2014-03-03 11 views
0

這裏是我有在PHP文件中的代碼的一部分:PHP EXEC( '回聲1>〜/ cctv_config/cctvstatus')不工作

function checkSetStatus($checkSet) { 

//other if options here 

    if ($checkSet == '2') { 
     exec('echo 0 > ~/cctv_config/cctvstatus.log'); 
     sleep(1); 
     exec('echo "$(date) | setOff" >> weblog.log'); 
     return (int) exec('cat ~/cctv_config/cctvstatus'); 
    } 
} 

問題是與行:

exec('echo 0 > ~/cctv_config/cctvstatus.log'); 

當我在Linux命令行觸發命令

echo 0 > ~/cctv_config/cctvstatus.log 

,它工作正常。但是,如果它是由php文件中的exec函數間接觸發的,它不會對目標文件進行任何更改。

在apache的錯誤日誌文件有信息來源的是

文件或目錄〜/ cctv_config/cctvstatus.log不能創建

(I已經改變cctvstatus.log的模式777)。類似的信息被記錄爲觸發此行的結果:它會記錄這樣的文件或目錄不存在

exec('cat ~/cctv_config/cctvstatus'); 

在這種情況下(還有一個問題 - 與貓EXEC我想知道,而中繼功能不應該使用)。

+0

你試過用'file_put_contents'(+'FILE_APPEND'標誌)?這會給你更多關於失敗原因的信息,而不是默默地忽略它。它會給你更少的轉義問題等。另外,'〜'代表當前用戶的主目錄。由於您不是以用於手動運行命令的相同用戶身份運行PHP,因此目錄不會相同(很可能)。我建議使用完整路徑(例如'/ home/user/cctv_config /')。 – Diamondo25

+0

謝謝你。我將能夠在幾個小時內驗證您的建議。之後我會發布更新。 – Michal

+0

你說得對。這是文件路徑的問題。更改〜/ home/myuser /解決問題。 – Michal

回答

0

PHP實例的用戶的主目錄與您正在測試命令的用戶的主目錄不同。 通過在路徑前使用~(代字號),您正在接受主目錄。

更改路徑的完整路徑,而不是:

function checkSetStatus($checkSet) { 

//other if options here 

    if ($checkSet == '2') { 
     exec('echo 0 > /home/myuser/cctv_config/cctvstatus.log'); 
     sleep(1); 
     exec('echo "$(date) | setOff" >> weblog.log'); 
     return (int) exec('cat /home/myuser/cctv_config/cctvstatus'); 
    } 
}