2011-07-27 3 views
0

는 PHP 파일을 호출하지 않을 경우 포함하는 경우 함수는 인수를 잃고있다 : (브라우저에서 URL을 열고, CGI를 통해 수행 할 때 php myScript.php 모든 것이 잘 실행하지만php system(); CGI를 통해 실행하지만, CLI에서

CLI에서
<?php system('/bin/sh /usr/local/bin/myScript.sh '.'myArg'); ?> 

을 통해 백그라운드에서 아파치) myArg 문자열이 손실됩니다. 무엇이 실패 할 수 있는지 아는 사람 있습니까?

PD : myScript.sh 그래서 꼬리 /tmp/foo.txt는 모든 CLI에서 미세하지만 아파치의 CGI에서 작동을 보여줍니다 단지

echo "$# $*" >> /tmp/foo.txt 

입니다. php.ini에서 추가 설정이 필요합니까? 내 아파치 별칭 파일에 특별한 것이 필요합니까? 그것은 부두인가?

답변

1

코드가 위에서 설명한대로라면 'myArg'이 손실되지 않습니다. 그러나 인수를 동적으로 채우는 경우 호출 메소드에 대해 적절하게 작동하는 방식으로 인수를 수집해야합니다.

브라우저를 통해 스크립트를 실행하면 $_REQUEST, $_GET 또는 $_POST을 통해 인수를 수집 할 수 있습니다. CLI를 통해 스크립트를 실행하면 인수는 에 있습니다.

인수에 대한 올바른 값을 얻었 음을 확인했다면 다음 단계는 사용 권한을 확인하는 것입니다. CLI 사용자에게 지정된 인수로 명령을 실행할 수있는 권한이 있는지 확인하십시오.

+0

답을위한 Thx, 지금까지 myArg는 문자열이므로 cli와 cgi 모두에서 작동해야합니다. 그렇지 않습니까? – user846226

+0

@ user846226 : 업데이트 된 답변을 참조하십시오. –

+0

Thx 답변을 많이했지만 메인 포스트에 명시된 바와 같이 myScript.php와 myScript.sh는 문제없이 실행됩니다. myArgv는 php 'string'이지만 cli/cgi에서 인수를 얻는 방법을 이미 알고 있습니다. 그것은 코딩 문제가 아니에요, 그건 뭔가 PHP는 CGI 구성이나 뭔가의 OS 내부와 관련된 관련이있을 수 있습니다. php myScript.php를 사용하면 잘 수행되지만 uri를 통해 실행하는 것은 인수가없는 경우와 똑같습니다. – user846226

1

아파치를 실행하는 사용자의 쉘이 /etc/passwd인지 확인하십시오. 기본 사용자는 nobody입니다.

+0

안녕하세요, 답변 주셔서 감사합니다. 아파치를 실행하는 사용자는 www- 데이터입니다. myScript.php는 우분투 사용자가 소유하고 있습니다. cat/etc/passwd | grep -i www www-data : x : 33 : 33 : www-data :/var/www :/bin/sh – user846226

+0

@ user846226 아마도 cgi 파일은 없었을 것입니다 '사형 당하지 않았다. 파일의 파일 사용 권한을 확인하십시오. (어쨌든 403 오류가 발생할 수 있습니다 ...) – Zaffy

+0

안녕하세요, 어떤 cgi 파일에 대해 이야기하고 있습니까? :) – user846226

관련 문제