차근차근/PHP

php소스코드만 따로 콘솔창에서 실행

예쁜꽃이피었으면 2014. 8. 29. 18:45

http://okkks.tistory.com/900

리눅스(Linux) php 쉘(Shell) 스크립트 실행하기, 백그라운드로 php 사용하기(nohup)


php 파일을 리눅스에서 쉘 방식으로 직접 실행을 해보자.

실행할 php파일이 있는 디렉토리로 이동한다.
]# cd 실행할 php파일 디렉토리

방법1>
]# ./파일명.php

방법2>
]# php 파일명.php

* 방법1,2처럼해도 실행이 안된다면 whereis 명령어로 먼저 php파일 위치를 알아낸다.
]# whereis php
php: /usr/bin/php /etc/php.d /etc/php.ini /usr/lib/php /usr/share/man/man1/php.1.gz
위 내용은 php설치설정에 따라 다를 수 있다.

방법3>
]# /usr/bin/php 파일명.php


참고1> 권한이 없다고 하면(Permission denied) 실행할 php파일에 대한 권한을 확인해 본다.
]# chmod 744 파일명.php
또는 755, 777등 권한에 맞게 실행 권한을 부여한다.

참고2> 메일링처럼 많은 데이터를 처리하는 php 파일을 좀 더 빨리 처리하고 싶다면 
php 헤더(header) 값을 출력하지 않으면 실행속도가 좋아진다. (옵션 -q)
]# ./파일명.php -q

실행할 파일명.php 소스 상단에 아래 소스를 삽입해도 된다.
#!/usr/bin/php -q
<?php
echo "php 쉘스크립트";
?>

참고3> 백그라운드로 실행하고 싶다면 & 을 사용한다.(반대로 포그라운드로 전환할 수도 있다. <- 추후 작성예정)
]# ./파일명.php &

참고4>
실행 후 어떠한 값도 남기지 않는다.
]# ./파일명.php > /dev/null &

참고5>
실행을 한 사용자가 로그아웃을 하게 되면 실행중인 프로세스가 죽게되는데 
로그아웃을 해도 실행을 마칠때까지 계속 살아있게하려면 nohup 명령어를 사용한다.
]# nohup ./파일명.php &

참고6>
nohup 명령어를 사용하면 실행을 마친 후 결과 값이 파일(nohup.out)로 자동 저장하게 된다.
]# nohup ./파일명.php &
]# nohup: appending output to `nohup.out'

cat 명령어로 내용을 확인해 보자
]# cat nohup.out

참고7>
nohup 명령어로 실행을 마친 후 결과를 원하는 곳에 원하는 파일명으로 저장하고 싶다면
]# nohup ./파일명.php > log/저장할파일명 &


실사용예> header 출력제한은 소스 상단에 삽입
]# nohup ./실행파일명.html > log/저장할파일명.log &







http://ra2kstar.tistory.com/155

PHP


PHP 쉘에서의 php 실행 및 인자값 받기


지금까지 내가 해왔던 php는 소스를 작성하고, 웹에서 실행을 시켜왔다.
그렇다면 웹이 아닌 리눅스나 유닉스 서버의 쉘에서 실행하려면 어떻게 하면 될까. 

우선 리눅스든 유닉스든 php가 설치된 디렉토리를 알아야 한다. 

  쉘에서의 php 코드 실행 
1. php 설치 디렉토리 확인
$> whereis php
php: /usr/bin/php /etc/php.d /etc/php.ini /usr/include/php


2. php 파일 시작에 다음과 같은 소스를 적어준다. 
#!/usr/bin/php -q   <-- php가 설치된 디렉토리 & -q 

3. 권한변경 
실행을 하려면 
php 파일명.php 를 하면 되지만, 만약 권한이 어쩌구저쩌구한다면, chmod 명령을 통해 
권한을 바꿔 주도록 한다. (권한을 변경하게 되면 ./파일명.php 만으로도 실행이 가능하다) 


  인자값(파라메터) 받기 
인자값을 받는 함수에 대해서는 다음 링크에 설명되어 있다. 


그 중, 인자값만 받는 부분을 가져와서 간단한 소스를 구현해 보았다. 

#!/usr/bin/php -q
<?php
        $number = $_SERVER['argv'];
        echo "넘겨받은 인자값 =  $number[1] 입니다. \n" ;
?>



  인자값(파라메터) 받기 - 추가 내용 
위와 같이 $_SERVER['argv'] 함수를 사용하지 않고도 그냥 받을수 있다. 

바로, $argc, $argv 인데, $argc 에는 인자값의 수가, $argv에는 인자값이 들어온다. 




http://ra2kstar.tistory.com/167


PHP $argc 와 $argv 의 차이점과 활용



PHP에서 인자값을 활용하기 위해서 $argc 와 $argv를 사용한다. 이 둘의 차이점은 무엇일까? 


$argc = 인자값의 개수가 자동으로 저장된다. 

$argv = 실제 인자값이 문자열로 저장되어 있다. 

여기서 $argv[0] 은 PHP 파일 자신의 이름이 저장되어 있기때문에 $argc-1을 해줘야 실제 인자값으 개수를 알 수 있다. 


다음은 $argc 와 $argv를 사용한 간단한 예제코드이다. 


#!/usr/local/bin/php -q

<?php


echo "인자값의 갯수는 $argc 개 입니다.\n" ;

echo "이것은 php 파일의 이름을 포함한 갯수입니다.";


function usage($argv){

    printf("입력받은 인자값 : %s , %s , %s \n" , $argv[0] , $argv[1] , $argv[2]);

}


if($argc == 3){

    usage($argv);

    exit(0);

}


?>



  결과화면








Illegal offset type 어쩌고 하는 에러


http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=80429


배열이라서 안된다고 하는데  그건 모르겠고 

$number = $_SERVER['argv']; 이렇게 받고

$r = match($number[1]) 이렇게 사용하고자 할떄  [ ]안에 숫자가 중요한 것 같다.

입력한 파라미터 순서대로 0,1,2,.. 이렇게 나가나보다.

나의 경우

 php ./App/0829matching_test.php platanus.jpg 이렇게

실행할 php파일의 경로와 파라미터를 같이 줬기 때문에 []에 1을 넣었다.

파라미터 넘겨야 하니까~





[PHP] json_encode 할 때 'Invalid UTF-8 sequence in argument' warning

http://bloodguy.tistory.com/entry/PHP-jsonencode-%ED%95%A0-%EB%95%8C-Invalid-UTF8-sequence-in-argument-warning






리눅스에서 무슨무슨 so 파일이 없다고 할 때



반응형

'차근차근 > PHP' 카테고리의 다른 글

[함수] php 서버에서 json escape unescape 하는 예제입니다.  (0) 2014.09.02
유용한 함수 - json_decode,json_encode  (0) 2014.09.02
foreach  (0) 2014.08.28
무작정 자료수집2  (0) 2014.07.30
무작정 자료수집3  (0) 2014.07.30