2012-09-02 2 views
2

proc_open()을 사용하여 프로그램을 실행하고 결과를 인쇄하려고합니다. 그러나 나는 계속 'Permission denied'를 받고있다. 스크립트와 실행 파일에 대해 chmod를 0777로 설정했으나 사용하지 마십시오.'Permission denied'로 인해 proc_open()이 실패합니다.

ini_get('safe_mode')은 거짓입니다.

무엇이 잘못 될 수 있습니까?

CentOS, Apache 및 PHP 5.3.3을 사용하고 있습니다.

+1

실행하려는 것은 무엇입니까? PHP 스크립트를 실행하는 사용자에게 실행 권한이 있습니까? –

+0

C.에서 만든 프로그램은/home/emil/workspace/PKE/Debug/PKE에 있습니다. PHP 스크립트 권한을 실행하는 사용자에게 어떻게 권한을 부여합니까? 나는 스크립트와 실행 파일을주는 것이 충분할 것이라고 생각했다. 미안, 나는 newb이다 :) – HelloWorld

+0

PHP 스크립트를 만들고,'

답변

0

safe_mode를 활성화하고 safe_mode_exec_dir을 확인해야합니다. safemode exec dir 외부에서 실행할 수 없습니다. u가 safe_mode_exec_dir 내부에 ur 프로그램을 가지고 있다면 문제는 공유 호스팅입니다 (때때로 공유 호스팅은 exec 기능을 사용하지 않습니다)

+0

및 음수는 ...? –

+0

http://php.net/manual/en/features.safe-mode.php는 안전 모드가 PHP 5.3.0부터 제공되지 않는다고 말합니다. 5.3.3 :/ – HelloWorld

+0

safe_mode_exec_dir은 safe_mode가 켜져 있고 포스터에 safe_mode가 OFF라고 표시되는 경우에만 작동합니다. 그리고 이것이 문제가된다면, PHP 오류 메시지'치명적인 오류 : 무엇이든 실행하려고합니다. '를 보게됩니다. 이것은 분명히 시스템 자체의 메시지입니다. –

2

동일한 설정으로이 문제가 발생했으며 문제는 SELinux로 밝혀졌습니다. httpd가 내 외부 프로그램을 실행하지 못하게합니다. 허용 모드로 설정할 수 있습니다.

setenforce permissive 

내가 동일한 문제를 겪고 있다면 모든 것이 작동해야합니다. 이것은 재부팅 할 때까지 지속됩니다.

는 이동, 변경을 영구적으로 만들려면을/etc/SELinux가/설정, 변경 :

SELINUX=enforcing 

편집

SELINUX=permissive 

에 :

OK, 나는 방법에 발견 SELinux를 끄지 않아도됩니다. 문제는 내가 이해할 수 있듯이, httpd가 자체 도메인을 가지고 있고 그 도메인 외부의 것을 만질 수 없다는 것입니다. 따라서 가장 간단한 방법은 스크립트/프로그램을/var/www 디렉토리 트리로 옮기는 것입니다.

semanage fcontext -a -t httpd_sys_content_t "/path/to/program(/.*)?" 

기본적으로 프로그램 httpd에 속한 말할 것이다 : 그것은 가능하지 않으면

, 당신은 대신 현재 위치에서 프로그램의 내용을 변경할 수 있습니다.

관련 문제