2014-09-04 26 views
0

我有一種感覺它與權限做,我編譯G ++PHP執行函數不執行與我的編譯的程序權限

的main.cpp

#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::cout << "It works!" << std::endl; 
    return 0; 
} 

下面的程序和我有PHP文件

test.php的

<?php 
// DEBUG ///////////////////////////////// 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
////////////////////////////////////////// 

$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 

echo "In : " . $in . "<br>"; 
echo "Out: " . $out . "<br>"; 
?> 

在命令行中運行該程序我得到輸出「It works!」然而,當我在PHP上運行時,我沒有得到任何輸出(我仍然得到[In:... \ nOut:],但我知道PHP正在工作)。

相關問題:php exec() is not executing the command

更讓我把 「2> & 1」 的結尾,現在我得到的輸出:

日期:SH:1:/家庭/亞歷克斯/ Dropbox/code_snippets/output/a.out:權限被拒絕

在做了一個快速sudo chmod 0777到a.out後,我仍然得到了同樣的結果。 也嘗試過sudo chown www-data a.out來賦予PHP的所有權,但那也不起作用,我相信這很簡單,但我發現難以獲得解決方案。提前致謝。

編輯:

  1. exec()函數肯定的作品,因爲我使用EXEC(「WHOAMI」),以找出它是執行它通過PHP用戶WWW的數據。在目錄

  2. 試圖執行opendir()函數,它返回相同的權限被拒絕

警告:執行opendir(/家/亞歷克斯/ Dropbox的/ code_snippts /輸出):未能打開目錄:權限被拒絕在/var/www/html/test.php

我猜這是因爲PHP只限於執行/ var/www中的東西后有一點在互聯網上看起來更多我發現這可能有所幫助:

https://help.ubuntu.com/community/ApacheMySQLPHP向下滾動到部分安裝suPHP似乎是設置在/ var/www目錄以外的目錄中運行的東西的方法有任何其他人有更好的想法嗎?

將a.out複製到/ var/www,PHP正在輸出「It works!」。

+0

你檢查了你的php.ini,以確保你被允許使用exec()函數嗎?具體檢查它是否列在'disable_functions'中 – mz3 2014-09-04 15:28:39

+0

您的PHP文件位於何處?你能打開目錄/ home/alex/Dropbox/code_snippets/output /它嗎? (opendir()所,例如功能) – Petr 2014-09-04 15:32:11

回答

0

你的代碼適合我,所以它必須是一個環境配置問題。

1)EXEC()在php.ini

檢查的php.ini被列入黑名單,以查看是否safe_mode設置爲on,或者如果執行exec()在disable_functions禁止。

2)包含文件的目錄不被webserver配置所允許。

,如果您使用的是Web服務器,但要確保有一樣,如果是這樣的話(例如爲Apache)在您的服務器配置如下目錄塊你有沒有說過:

<Directory /var/www/> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 
+0

EXEC絕對是工作,我嘗試: 'EXEC( 「WHOAMI」)' 並返回www數據 – user3102241 2014-09-10 17:38:32

+0

答案#2是正確的 – user3102241 2014-09-10 17:47:06

+0

Emzy,你知道在哪裏apache配置文件的位置包含我需要更改的信息,如上所示? – user3102241 2014-09-10 17:48:41

0

您可能需要使用的umask:

$umask = umask(0); 
$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 
umask($oldumask); 
+0

不好意思,這沒有奏效。 – user3102241 2014-09-10 17:37:57

0

這是一個與權限的問題的用戶:WWW的數據無法讀取/寫入/外執行任何的/ var/www目錄(默認情況下)。感謝emzy和Petr幫我解決了這個問題。

+0

這是我上面所說的#2。很高興你解決了這個問題。 – mz3 2014-09-10 17:44:10

+0

確實,對不起,忘了閱讀這一點,謝謝。 – user3102241 2014-09-10 17:45:32