2011-04-29 5 views
1

exec("something")이 작동을 멈춘 후 최근에 PHP 5.2.17로 업데이트 된 FreeBSD 서버에서 일부 PHP 웹 사이트를 실행하고 exec("/full/path/something")을 작성해야했습니다.php exec() 검색 경로에 대한 시스템 전체 설정

실행 파일이 전체 경로를 쓰는 다른 위치에있는 다른 컴퓨터에서 스크립트가 실행되므로 허용되지 않습니다. PHP에서 passthru("set") 실행

는 수 (사용자 'www'를위한) PATH 변수를 보여준다 :

나는 PHP의은 safe_mode_exec_dir 디렉토리를 가리 키도록 PATH 필요
PATH=/sbin:/bin:/usr/sbin:/usr/bin 

:

PATH=/usr/phpsafe_bin 

가에 putenv("PATH=/usr/phpsafe_bin") 실행 PHP는 문제를 해결하지만이 컴퓨터에서 실행되는 모든 PHP 스크립트, 즉 php.ini, Apache 설정 또는 다른 시스템 설정을 변경하여 전역 수준에서 문제를 해결하는 솔루션이 필요합니다.

누군가가이 좋은 해결책을 제공 할 수 있기를 바랍니다. 어쩌면이 설명이 PHP 업데이트에서 변경된 이유 일 수도 있습니다. exec()과 친구들의 검색 경로가 결정되는 방법에 대한 PHP 문서가없는 것 같습니다.

+0

당신은 단순히 아파치를 시작하기 전에'은/etc/rc'의'PATH' 환경 변수를 해결할 수 있습니까? _fixed_ 디렉토리'/ usr/local/php_bin /'에 서버 전체에 흩어져있는 프로그램에 대한 심볼릭 링크를 채울 수 있습니까? – sarnold

+0

[safe_mode는 더 이상 사용되지 않습니다.] (http://us2.php.net/manual/en/features.safe-mode.php)주의하십시오.이 기능을 사용 중지하면 서비스가 원활해질 수 있습니다. 'exec'에 대한 모든 호출을 검사합니다 ... 하드 코딩 경로 이름은 결국 나쁜 생각이 아닐 수도 있습니다!) – Charles

답변

0

그것은 즐거운 해결책은 아니지만 생각할 수있는 전부입니다. 제안한 변경 사항을 수행하는 스크립트 파일을 만든 다음 php.ini 또는 .htaccess 파일에서 "auto_prepend_file"을 사용하여이 스크립트를 포함하십시오. 그러면 실제로 실행되는 모든 PHP 스크립트는 실행되기 전에이 파일이 실행되어 디렉토리가 변경됩니다.

주의 : 오류가 있기 때문에 prepend 스크립트의 여분의 공백 등으로 인해 전체 페이지, 다운로드 스크립트와 같은 기존 기능 또는 여러 가지 알 수없는 영향이 발생할 수 있으므로주의해야합니다.

자세히보기 : http://php.net/manual/en/ini.core.php