2017-02-28 129 views
1

我想從PHP腳本內部觸發AWStats的更新。從PHP觸發awstats更新

我目前使用cron作業來觸發更新,並簡單地將命令行復制到腳本中的exec函數中。

if(exec("/path/to/awstats.pl -config=domain.com -update")) { 
    echo 'Logs processed'; 
} 

但是,這返回了誤報。雖然顯示「日誌處理」行,但AWStats尚未處理統計信息。

當直接訪問AWStats時,AWStats可以完美工作,並且在通過cron作業運行更新時,它不僅僅來自此PHP腳本。我檢查了錯誤日誌,我的腳本或AWStats超時沒有問題。

我錯過了什麼嗎?

爲了記錄,此腳本旨在清除舊數據,更新引用鏈接黑名單以阻止垃圾郵件,然後重新編譯日誌文件中的統計數據。是的,我知道使用SkipReferrerBlackList指令的性能問題。

+0

是否運行的cronjob以相同的用戶作爲PHP腳本? – aross

+0

@aross啊,這是在一個共享的託管服務器上。我相信如此,但我不確定。 –

+0

嘗試手動將某些內容附加到腳本寫入的文件中。當然,從PHP腳本。它可能只是一個權限問題 – aross

回答

1

從您的代碼看來,您認爲exec返回一個指示成功或失敗的布爾值。它沒有,它只是返回一個字符串(命令輸出的最後一行)。和字符串(除了"0"和一個空字符串)總是評估爲true。

要調試的問題,您應該打印命令的輸出:

exec("/path/to/awstats.pl -config=domain.com -update", $output); 
echo join(PHP_EOL, $output); 
+0

謝謝,@aross。是的,我沒有正確思考,我確實假設了一個布爾響應。我也認爲PHP腳本無權運行'.pl'文件,輸出結果是一個數組。從這裏我找到了一個解決方案,通過創建腳本可以運行的'.cgi'文件。 –