2015-03-31 121 views
0

因此,當在網站上加載頁面時,我運行一個C腳本來創建一些文件。我可以運行一個PHP腳本來運行一個C腳本,然後創建一個文件?

一切都完美地自行完成,但放在一起我得到了一個分段錯誤。

system('./cScript /var/www/html/someFile.txt', $returnValue); 

C腳本採用該參數並創建一個基於它的另一個文件:

FILE *f; 
f = fopen ('/var/www/html/someFile.bak', "w"); 
fprintf (f, "%s", "some content goes here"); 
fclose (f); 

它的工作原理,如果我在它上面運行自己的 C腳本它的工作原理,如果我跑PHP -asystem('./cScript /var/www/html/someFile.txt', $returnValue);

但是,如果我通過瀏覽器運行它不起作用。 C腳本確實運行,所以我在瀏覽器上得到了一些響應,這只是創建文件不起作用的部分。

難道這是我不知道的某種權限嗎?或者路徑相關的問題?

+0

運行Web服務器的用戶是否具有對目錄的讀/寫權限?嘗試以該用戶身份登錄,然後運行腳本! – 2015-03-31 14:16:34

+0

那麼php目前以root身份運行 – matt 2015-03-31 14:17:55

+0

可能是一個權限錯誤。您應始終檢查涉及外部資源的呼叫的返回值,例如打開一個文件。永遠不會取得成功。你的C代碼假設什麼都不會出錯,這是非常糟糕的編碼習慣。不,php不會以root身份運行,除非你以root身份運行你的web服務器(非常非常糟糕的做法)。您的web服務器以root身份啓動,但應該刪除root priv並以不同的用戶身份運行,例如www數據。 – 2015-03-31 14:18:26

回答

1

所以是的,這是一個權限問題,PHP運行的是www-data,它沒有寫權限,所以它拋出了一個錯誤,我沒有捕捉到我的讓 - 保持 - 極端 - 簡單開始使用代碼。

可通過固定授權允許www數據:

sudo chown -R www-data:www-data /var/www/html 
sudo chmod -R 770 /var/www/html 

,雖然不是很安全,壞的做法,讓最好不要這樣做。 但是,如果你不得不創建一些專門設計的目錄來存儲這些高層次的文件。

相關問題