我試圖用proc_open()
執行程序並打印結果。但是,我不斷收到'權限被拒絕'。已經將腳本和可執行文件的chmod設置爲0777,但無濟於事。proc_open()失敗,'權限被拒絕'
ini_get('safe_mode')
是錯誤的。
什麼可能是錯的?
我使用的是CentOS,Apache和PHP 5.3.3。
我試圖用proc_open()
執行程序並打印結果。但是,我不斷收到'權限被拒絕'。已經將腳本和可執行文件的chmod設置爲0777,但無濟於事。proc_open()失敗,'權限被拒絕'
ini_get('safe_mode')
是錯誤的。
什麼可能是錯的?
我使用的是CentOS,Apache和PHP 5.3.3。
您必須啓用safe_mode並查看您的safe_mode_exec_dir。 您不能在safemode exec目錄之外執行。如果你有我的程序在safe_mode_exec_dir裏面,問題在於你的共享主機(有時共享主機禁用exec函數)
和負面....? –
http://php.net/manual/en/features.safe-mode.php表示安全模式從php 5.3.0開始已棄用。我有5.3.3:/ – HelloWorld
safe_mode_exec_dir只有在safe_mode打開的情況下才起作用,並且poster說safe_mode爲OFF。如果這將是一個問題,你會得到一個PHP錯誤消息'致命錯誤:嘗試在任何外部執行dir',這顯然是系統本身的消息。 –
我有這個問題與一個相同的設置,並且問題原來是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。
你想要執行什麼?你(執行PHP腳本的用戶)是否有執行該權限的權限? –
C.在位於/ home/emil/workspace/PKE/Debug/PKE的程序。我該如何給執行PHP腳本權限的用戶?我認爲給腳本和可執行文件0777就足夠了。對不起,我是一個新手:) – HelloWorld
創建一個php腳本,輸入'<?php exec(「whoami」);'你知道用戶是誰。將該用戶放入有權執行該文件的組中,並且您已準備好執行 –