2011-12-23 9 views
2

RSSフィードを解析して情報をdbに入力するPHPスクリプトがあります。私はPHP5を使用しています。PHP cronジョブとWebブラウザによるアクセス

これは.phpページで、ウェブサーバ&ブラウザからアクセスすると魅力的です。 (http://myhost.com/rssjob.php)

私はこれをCRONジョブとして設定したいのですが、SSH/CRONジョブで実行すると、 "無効な引数がforeach ()」を参照してください。

質問:結果にデルタがあるのはなぜですか?私はPHPページにアクセスしてブラウザをスローして、それをCRONジョブ/ SSHコマンドラインとして実行しようとしますか? SSH /コマンドライン/ cronジョブを使ってアクセスすると、PHPページがうまく動作するように何か指定する必要がありますか?

$ 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が読み込まれているとは限りません。 http://.../リクエストやそのようなものをブロックするphp.iniのものかもしれません。他のエラーが出ていますか? – Corbin

+0

私たちにprint_r($ xml)を見せてみませんか? –

答えて

1

迅速な解決(ハック)はcronでHTTP経由でスクリプトを呼び出すことです:

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

cron vs webを使用してスクリプトを実行する場合、いくつかの違いがあります。たとえば、cronには$ _SERVER ['DOCUMENT_ROOT']変数はありません。 これをスクリプトで使用している場合、これはおそらくそれを破ります。

サンプルラインの前に何が起こるのか分かりませんが、何らかの理由で$ xmlが期待通りの配列ではなく、ウェブバージョンに表示されているような配列です。 $ xml変数がcronから実行されているときにどのような値が入っているか確認してください。スクリプトは、コマンドライン/ cronで実行されているかどうかを決定する 簡単な方法は次のとおりです。

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

STDINが定義されているかどうかを調べる代わりに、おそらくPHP_SAPI === 'cli'を実行します。 – Corbin

関連する問題