2011-12-23 167 views
2

我有一個PHP腳本解析RSS提要,並在數據庫中輸入信息。我正在使用PHP5。PHP的cron作業與通過網絡瀏覽器的訪問

它是一個.php頁面,當通過web服務器&瀏覽器訪問時,它的功能就像一個魅力。 (http://myhost.com/rssjob.php)

現在我想將它設置爲CRON作業 - 但是當我通過SSH/CRON作業執行它時 - 它會拋出異常,例如「爲foreach提供的無效參數()「在下面的代碼。

問題: 1.爲什麼在通過訪問PHP頁面獲得的結果中出現三角形拋出瀏覽器,以及何時嘗試將其作爲CRON作業/ SSH命令行執行?有什麼更多的我應該指定的PHP頁面通過SSH/commandline/cron作業訪問時工作良好?

$ xml = parseRSS(「http://www.myhost.com/rss/」);

//SAMPLE USAGE OF 
foreach($xml['RSS']['CHANNEL']['ITEM'] as $item) { 
     //echo("<p>"); 
    $title = $item['TITLE']; 

    $description = $item['DESCRIPTION']; 
+0

沒有更多比提供的無效爭論,很難知道發生了什麼。雖然它可能與Apache加載的php.ini不同,但可能需要記住它們。可能是在php.ini中阻止http://.../請求或類似的東西。你是否有其他錯誤? – Corbin 2011-12-23 01:21:22

+0

爲什麼不向我們顯示print_r($ xml)? – 2011-12-23 01:27:21

回答

1

一個快速的解決方案(黑客)是通過HTTP從cron調用腳本:

? * * * * curl http://PATH.TO.YOUR/script.php 
0

有一對夫婦在通過的cron VS網絡運行腳本的差異。例如,cron不會有$ _SERVER ['DOCUMENT_ROOT']變量。 如果你在你的腳本中使用它,這可能會打破它。

我不確定在您的示例行之前會發生什麼情況,但由於某種原因,$ xml不是您期望它的陣列,而是它出現在Web版本中。 請檢查從cron運行它時$ xml變量的值。 一種簡單的方法來確定腳本是從命令行運行/ cron是:

$cron = (bool) defined('STDIN'); 
+0

我可能會做PHP_SAPI ==='cli'而不是檢查STDIN是否定義。 – Corbin 2011-12-23 01:18:42

相關問題