2018. 8. 28. 18:12





웹서버에서 어떤 디렉터리나 파일의 절대 경로(absolute path)를 알아야 하는 상황이 있을 수 있습니다.

이런 경우 다음과 같은 PHP 코드를 사용할 수 있습니다.

<?php echo getcwd(); ?>


->save(getcwd ().'/'.$file_name);

이런식으로 파일 저장했다.

근데, 이거는 현재 내 위치이고, 파일의 위치를 찾으려면, 


http://tyson.tistory.com/151


여기처럼 절대경로 찾는걸 넣어주는게 낫다.




참고 블로그 

https://iwordpower.com/2017/01/absolute-path-of-a-directory-or-file/


'컴퓨터 > PHP' 카테고리의 다른 글

php 파일이동  (0) 2018.08.28
php 메일 보내기  (0) 2018.08.28
crontab php 실행시 파일 경로  (0) 2018.08.28
php.ini 유용한 기본 설정법  (0) 2018.06.29
홈페이지 .php .html 등 확장자 생략하기,  (0) 2018.06.29
Posted by Tyson
2018. 8. 28. 18:08

crontab으로 스케쥴을 걸었는데, 


실행결과 로그를 보고 싶을때 log 파일을 만드는 법이다.


밑에 내용은 다른 블로그에서 퍼온건데, 처음에


> 랑 >> 차이를 잘 몰랐는데, 


>> 같은경우는 밑에 계속 로그가 쌓인다.


* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1

위처럼 작성하면 매분마다 test.sh.log 파일이 갱신 되어 작업 내용이 어떻게 처리 되었는지 알 수 있습니다. 만약 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용만 나옵니다. 2>&1은 이곳에서 확인합시다.

그런데, 이게 너무 자주 실행 되고 또한 지속적으로 로깅이 되야 해서 로그를 계속 남겨둬야 한다면 다음처럼 입력합니다.

* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1

그러면 계속 로그가 누적이 되는 것을 확인 할 수 있을겁니다. 대신 로그가 과도하게 쌓이면 리눅스 퍼포먼스에 영향을 주므로 가끔씩 비워주거나 파일을 새로 만들어주는 센스가 필요합니다.


위처럼 해도 되고, 나 같은 경우는 


로그 파일에, `date +%Y%m%d' 를 써줘서 날짜별로 파일을 만들기를 했다. 




참고 블로그 

https://jdm.kr/blog/2


Posted by Tyson
2018. 8. 28. 17:55

crontab 이 안먹어서, 보니까, include 파일 경로를 상대경로로 해주니, 못 찾아온다.


그래서, 찾아보니, 절대경로로 해줘야 하는데, 


실행 파일의 하위 폴더를 가져오고 싶어서, 하는법을 찾아보니, 3가지 방법이있더라.



밑에처럼 해주면 된다.


 include ($_SERVER['DOCUMENT_ROOT'] . '/libs/get.php');


 include (dirname($_SERVER['SCRIPT_FILENAME']) . '/libs/get.php');



 set_include_path("/home/habonyphp/public_html/");

 include ('libs/get.php');




난 dirname($_SERVER['SCRIPT_FILENAME']) . 

이게 되더라. 다른것들은 잘 못찾아와서, 그냥 두번째거로 했다.




참고블로그

: http://blog.habonyphp.com/entry/php-crontab-php-%EC%8B%A4%ED%96%89%EC%8B%9C-%EC%9D%B8%EC%BF%A0%EB%A5%B4%EB%93%9C-%ED%8C%8C%EC%9D%BC-%EA%B2%BD%EB%A1%9C%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0#.W4T8Fej7Tcs

Posted by Tyson
2018. 8. 7. 17:05

jQuery에서 필드를 추가해서, 입력할때마다 전체값을 더해서 보여주고 싶었다.


예로, 노래 CD 디스크 입력 필드를 새로 만들고, 키을 입력할때마다, each로 돌면서 각각의 값들을 더한거를 보여주고 싶을때



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        //트랙수 키 입력시
 
        $('.track').on('keyup',function(e){
 
            var Sum = 0;
 
            //.trackNo 클래스 돌면서 계산
 
           $('.tracksNo').each(function(idx,ele){
 
               //입력값 있는거만
 
               if(!isNaN(this.value)&&this.value.length!=0){
 
                   Sum+=parseInt($(ele).val());
 
                   $('#total').val(Sum);
 
               }
 
           });
 
        });
cs


isNaN은 아직 값을 입력 안한것들은 계산하면 안되어서, if문으로 값 입력된거만 넣어서 sum에 계산함.



 if(!isNaN(this.value)&&this.value.length!=0)

이게 입력값 체크 할때 생각보다 유용하다.


그리고, 여러값들을 더할때는 클래스로 지정하고, .each로 돌리면 됨.


아, parseInt 또는 parseFloat 해서 숫자 인식하게 해줘야한다.


아니면, String으로 인식해서, 문자열만 합쳐진다.




참고 사이트

http://blog.naver.com/PostView.nhn?blogId=caesar0342&logNo=20119941095

http://madebykaus.com/?p=382







Posted by Tyson
2018. 7. 4. 15:49



돌아다니다가, 진짜 마음에 드는 템플릿을 발견했다.


https://templated.co/intensify



근데, 얘가 skel 이라는 css를 사용했길래, 


보니까, 


부트스트랩이랑 좀 다른 클래스 명들을 쓰는거다.


그래서 보니까....


https://github.com/ajlkn/skel/blob/master/docs/skel.md






<div class="row">
	<div class="6u 12u$(small)">
		Content
	</div>
	<div class="3u 6u(small) 12u$(xsmall)">
		Sidebar1
	</div>
	<div class="3u$ 6u$(small) 12u$(xsmall)">
		Sidebar2
	</div>
</div>




6u같은거는 부트스트랩 col-md-6 이런거랑 같은데, 


뒤에 $ 달러표시 붙는거랑,


(small) 이런거는 이해가 안되는거다.



찾아서 보니까. 


달러표시는 여기가 마지막이라는 이야기다.


그래서,  3u$ 는 3u를 만들고, 뒤에 얼마가 남아있건, 마지막으로 인식해서,


그 다음거는 밑으로 내려보내는거다.


오~~ 이거 대박 편한거다~!!


그리고, (small) 이런거는, 


main.js 에 세팅해놓는 브레이크포인트가 있는데,


밑에 저 가로 길이까지는 small로 보는거다.



@include skel-breakpoints((
	xlarge: "(max-width: 1680px)",
	large:  "(max-width: 1280px)",
	medium: "(max-width: 980px)",
	small:  "(max-width: 736px)",
	xsmall: "(max-width: 480px)"
));




6u(small) 12u$(xsmall)


위에 같은 경우는 small 사이즈일때는 6u 사이즈로 만들어준다.


xsmall 사이즈일때는, 12u 로 만들어주고, 마지막이므로, 다음 그리드는 밑으로 내리라는 이야기다.



col-md-4 이렇게 안쓰고, 간단하고, 깔끔해서 쓰기는 좋은데....


부트스트랩의 bg-black 같은 컬러는 종류가 너무 적어서, 직접만들어주려니...너무 많아서....


Metro css에서 컬러만 다운 받아서 추가했다.


처음에 Metro All css 를 추가하니까, 충돌이 나서.... $ 명령어가 안 먹히는거다.


https://metroui.org.ua/colors.html



그래서, metro color 가 따로 있어서, 걔만 다운받아서 추가해 주었다.


        <link rel="stylesheet" href="css/metro-colors.css /">


bg-black, bg-red 같은 컬러도 다 먹히고, 이걸로 써봐야 겠다~ㅎㅎ

Posted by Tyson
2018. 7. 3. 15:46

도커파일 만들다보면, 설정파일내 문자열을 수정할때가 있는데,



리눅스 명령어 중에, 파일안에 문자열 수정명령어가 sed 명령어이다.


그래서 파일안에 문자열을 sed 를 사용해서 수정하면 된다.


다른데는 

RUN sed -i "s/'database_name_here'/'wp'/g" wp-config.php

위에처럼 했다.

sed -i "s/[찾는문자열]/[수정문자열]" 파일명


이런순인데. 나는 저..>따옴표때문에 안되는거다.


그래서 찾아보니, 구분자로 / 대신에 #를 써도 된다고 해서....


RUN sed -i 's#short_open_tag = Off#short_open_tag = On#g' /etc/php5/apache2/php.ini


RUN sed -i 's#;date.timezone =#date.timezone = "Asia/Seoul"#g' /etc/php5/apache2/php.ini


위에처럼 했는데. 잘 먹힘다. 구분자로 #를 넣어서 했다.


Posted by Tyson
2018. 7. 2. 16:24



git pull origin master


하는데, 

밑에 같은 에러가 나온다.


(gnome-ssh-askpass:6705): Gtk-WARNING **: cannot open display: 


인터넷 찾아보니,


gtk의 ssh-askpass를 사용하여 ssh 인증을 하도록 환경 변수가 설정되어 있는데, 터미널이므로, GTK 앱이 구동되지 않아서 발생.


이란다....


하여튼, 그래서, shell 설정 파일에 추가해 줘야한다.


shell 설정 파일(Ex: .bash_profile) 에 다음 내용 추가

unset SSH_ASKPASS


참고 사이트

https://www.lesstif.com/pages/viewpage.action?pageId=22643955


란다.




나는 bash_profile 말고, bashrc 에 추가해 주었다.


cd 치면, 로그인 계정의 home으로 간다.


예로 root로 로그인했으면,


/root 폴더로 이동할거다.


거기에서 ll -al 를 쳐보면,


.bash_profile

.bashrc 


파일들이 있을거다.


 > vi .bashrc 


로 들어가서, 


unset SSH_ASKPASS 


를 추가하고 저장해주고 나온다.


그리고, 


source .bashrc 


명령어를 실행해준다.


또는 재접속해본다.


그러면, 그 에러가 안뜰거다.



Posted by Tyson
2018. 7. 2. 16:13

git 원격저장소 추가.

 

git init 을 하여, 폴더를 초기화 시키고,

 

git add . 

파일추가

 

git remote add origin <url> 

 

이렇게 처음에 원격저장소를 추가하는데, 

 

git remote add origin http://user@192.168.0.52:9000/www/html



이렇게 했더니, pull 할때마다 암호를 물어본다.

 

귀찮으면, 처음부터 암호를 저장했어야 했다.

 

git remote add origin http://user:password@192.168.0.52:9000/www/html

 

 

[유저명:암호]

 

이렇게 했어야 했는데....

 

또는 git clone 해서 했는데, 암호를 처음에 안적었더니...

 

pull 할때마다, 암호를 적어줘야한다.

 

그래서 암호를 저장해서 다시 설정해야한다.

 

[root@localhost]# git remote -v

origin  http://user@192.168.0.52:9000/www/html (fetch)

origin  http://user@192.168.0.52:9000/www/html (push)

 

 

git remote -v 하면, 위처럼, origin에 저장된 주소가 나온다.

 

http:// 뒤에 user 가 내 아이디이다.

 

뒤에 ,user:password 이렇게썼으면, 암호가 저장되었을거다.

 

[유저명:암호]@주소 이렇게 써주면 된다.

 

그래서 origin (remote의 정보를 바꿔줘야한다.)

 

밑에처럼 치면 된다.

 

git remote set-url origin http://user:password@192.168.0.52:9000/www/html

 

 

git remote set-url origin [유저id:암호@주소] 

 

이런식으로 서주면 바뀐다.

 

git remote -v 로 확인해 본다.

 

 

 

Posted by Tyson
2018. 7. 1. 15:54

보통 내가 자주 쓰는 환경이, 아파치, PHP, 오라클인데,


도커로 이미지를 찾다보니, 마음에 드는게 별로 없었다.


아파치, PHP Oracle를 쓰고 싶은데, 오라클연결하려면, oci8사용해야하고,


그리고, 난 tnsnames.ora 파일을 쓰고 싶은데,...


도커 허브에 올라온 이미지들은, 보니까, php7.0에, 오라클 인스턴스 클라이언트 드라이버로만 설치를 한거 같은데,


ORACLE_HOME으로 가서 봐도, ORACLE_HOME/network/admin/tnsnames.ora 이 위치에 파일이며, 폴더가 없는거다.


아.....그래서 이미지들 Dockerfile 보면,  


밑에처럼 오라클 경로 있는거가 있긴한데.....


/usr/local/instantclient_12_1


LD_LIBRARY_PATH="/usr/local/instantclient"' 


ENV LD_LIBRARY_PATH="/usr/local/instantclient_12_1"


잘 안되는거다....


그러다가 


https://hub.docker.com/r/thomasbisignani/docker-apache-php-oracle/


이 이미지를 찾았는데, 그나마 내가 원하는 것들이 다있는 이미지였다. 


오라클 경로도 밑에처럼 되어있고,


# Set up the Oracle environment variables

ENV LD_LIBRARY_PATH /usr/lib/oracle/12.1/client64/lib/

ENV ORACLE_HOME /usr/lib/oracle/12.1/client64/lib/


저기 폴더 밑으로 /network/admin/tnsnames.ora 파일/ 폴더 만들어 주고,


환경변수에 

TNS_ADMIN /usr/lib/oracle/12.1/client64/lib/network/admin


이렇게 넣어주니까, 된다!!



내가 원하는 환경은 


Apache, php5.6, Oracle12g(oci8)연결 이다.


근데, 그나마, 


thomasbisignani/docker-apache-php-oracle 


이게 최고로 나에게 맞는거 같았다.


그래서, 위 이미지에, tns파일생성만 해주고, 

환경변수만 넣어서, Dockerfile를 생성했다.


아!! 그리고 중요한거, tnsnames.ora파일 권한을 꼭 바꿔줘야한다!!!


여기서부터 복사해서 Dockerfile 생성해서 안에 넣어주면 된다.

==================================================================

# Image with Linux Oracle instant client. 


FROM thomasbisignani/docker-apache-php-oracle


MAINTAINER Tyson <tyson444@yahoo.com>


RUN apt-get update && apt-get install -y vim

RUN mkdir -p /usr/lib/oracle/12.1/client64/lib/network/admin



RUN echo "ORCL = \

  (DESCRIPTION = \

    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) \

    (CONNECT_DATA = \

      (SERVER = DEDICATED) \

      (SERVICE_NAME = orcl) \

    ) \

  )" > /usr/lib/oracle/12.1/client64/lib/network/admin/tnsnames.ora


  ENV TNS_ADMIN /usr/lib/oracle/12.1/client64/lib/network/admin


  RUN chmod 757 /usr/lib/oracle/12.1/client64/lib/network/admin/tnsnames.ora



================================================================


여기까지이다!!!


이정도면, 사용하는데, 충분하더라.


혹시, 수정더하고 싶으면, 



도커 개인 이미지 만들기(컨테이너 테스트하는 법) 블로그 


http://tyson.tistory.com/142


여기 포스트에서 확인해보고, 이런 방법으로 해보면 된다.



===================================

그외 괜찮았던, Oci8 Docker목록이다


https://hub.docker.com/r/thomasbisignani/docker-apache-php-oracle/

https://hub.docker.com/r/shenron/nginx-php-fpm-oracle-client/

https://hub.docker.com/r/kmcgill88/php-oracle/

https://hub.docker.com/r/adrianharabula/php7-with-oci8/



Posted by Tyson
2018. 7. 1. 14:12

앞에서 설명한, Docker에서 아파치 재시작이 안되서, 


컨테이너 안에서 아파치 설정을 바꾸고, 그때그때마다, 이미지를 만들어서, 


그 이미지로 컨테이너를 생성해서, 에러나, 실행 유무를 확인했다.



먼저, 내가 작업하고 싶은 컨테이너 안에 들어가서 설정들을 바꾼다.


그리고, 


그 바뀐 설정들에서, 스냅샷같은거를 만들어야하는거다.


그래서 커밋을 한다.



#커밋(이미지 생성)

docker commit -p [컨테이너ID] [원하는저장 이미지명]:[버젼명_태그:생략가능]  

docker commit -p 1e3bd8faf374 tysondev


난  1e3bd8faf374 컨테이너를 tysondev란 이미지로 생성했다.


버젼명은 안썼는데, 생략가능하다. 생략하면, latest로 자동입력됨.


이때, 컨터이너에서 나가지 말고, 창을 하나 더 열어서, 새로 접속해서 작업하는게 편하다.


그리고, 이미지를 확인해보자~!


#이미지 확인(아이디)

docker images 


REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

tysondev           latest              2aa8258fdbb1        9 hours ago         712MB



이렇게 생성이 될거다.



그리고, 그 이미지로 컨테이너를 새로 생성한다.

#컨테이너 생성

docker run -p [외부포트:내부포트] -d -v [외부공유폴더:내부공유폴더] [이미지이름:버젼]

docker run -p 8383:80 -d -v /Users/tyson13/Documents/workspace/docker/front:/var/www/html tysondev:latest



#컨테이너 실행 확인

docker ps -a 


머 밑에처럼 나온다.


2번째꺼는 내가 지금 샐행중 컨테이너고, 그 위에꺼가, 방금 생성한거다.



CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                  NAMES

b1c3e235a86d        cherrydevos2:latest   "/bin/sh -c '/usr/sb…"   1 min ago         Up 8 hours          0.0.0.0:8383->80/tcp   friendly_kalam

a23fc3e235a8        origianl:latest   "/bin/sh -c '/usr/sb…"   8 hours ago         Up 8 hours          0.0.0.0:8385->80/tcp   first saaam



자, 근데, 실행이 안되어 있으면, 로그를 확인한다.



#실행 중단되어 있으면, 로그확인

docker logs b1c3e235a86d



#실행중이면, 컨테이너 접속

sudo docker exec -it b1c3e235a86d /bin/bash   



이런식으로 해서, 원본 컨테이너에서 설정을 바꾸면서, 계속 이미지를 만들어서 테스트 해보았다.


그리고, 이미지를 저장해서, 저장해놓던지, 레파지토리에 올리면 된다.


난 개인 소장용으로, 내 개인정보등도 세팅을 해놓아서, 그냥 저장해서 가지고 있다.



#도커 이미지 백업 (파일로 저장)

$ sudo docker save -o [저장할이름].tar [이미지 이름]

$ sudo docker save -o build-machin.tar build-machin


이런식으로 저장하면,  .tar파일이 생성된다.


이 파일을 회사사람들에게 공유해주던지, 가지고 있다가, 이 설정쓸때,


도커에서 불러오면 된다.


tar 로 묶어서 백업한 경우 load 명령을 사용하여 도커의 로컬 이미지 레포지토리에 넣어주어야 한다.

-i 옵션은 --input 임.

# docker load -i /root/container1.tar

확인을 위해 아래 명령을 입력해보자.

# docker images


이렇게 해서 사용하면 된다.


추가로, 설정 바꾸던, (원본 컨테이너에서는 나가지 말고, 계속 접속해서 작업하기를 추천한다.)


나갔다가, 컨터이너 종료가 되면, 에러가 있을떄, 컨테이너가 재시작이 안된다....


진짜...멘붕옴....ㅠㅠㅠㅠ 그안에 설정바뀐거, 중요파일까지 넣어놓았으면, 최악이다.


그래서 중요파일들은 공유폴더를 사용해서만 하자~!



도커를 사용하면서 느낀건.....내가 생각한거처럼 많이 까는게 아니고, 진짜 최소만 불러와서, 쓰는개념이라고 생각해야한다.



그리고, 한 컨테이너에 다 설치하는게, 아니고, 여러 컨테이너들을 포트로 연결해서 사용하는 개념으로 사용해야한다.


여러컨테이너 만들기 위해서 COMPOSE라는것도 있는데, 걔는 아직....ㅎㅎ


다음 포스팅에서 Dockerfile 작성에 대해서 쓰겠다.

Posted by Tyson