1

このスクリプトは数週間問題なく動作し、その後理由もなく動作を停止しました。

1.<?php
2.ob_start();
3.include "weather xml website";
4.$data=ob_get_contents();
5.ob_clean();
6.
7.$xmlFile = 'filelocation\weatherData.xml';
8.
9.
10.$fh = fopen($xmlFile, 'w') or die("can not create or open $xmlFile");
11.
12.fwrite($fh, $data);
13.fclose($fh);
14.?>

私は Google と Msn の天気 API を使用しており、参照することで xml データをうまく受け取ることができ、ファイル ハンドラーはローカル xml を作成および編集できます。このスクリプトは、30 分ごとに実行されるスケジュールされたタスクとして設定しました。

私が使用すべき別の方法はありますか?キャッシング?どんな助けでも大歓迎です

4

2 に答える 2

2

file_get_contents()PHP の-functionを使用して URL を取得してみませんか? その場合、-関数は必要ありませんob_*。php.ini に、外部 URL を含めることに関連するいくつかの制限が設定されている可能性もあります。そのファイルのコメントでこれについて何かを読んだことを覚えています。さらに、ファイル操作を-function
への呼び出しに単純化できます。file_put_contents()

編集: salathe が指摘したように、php.ini オプションは問題allow_url_fopenallow_url_include関連しています。これらの構成を確認する必要があります。

于 2010-09-21T20:06:32.197 に答える
1

ああ、このコードはとても安全ではありません。リモートファイルを含めることは非常に危険です。接続が傍受される可能性があり、攻撃者がサーバー上でほぼ任意のコードを実行する可能性があります (すべてのファイルやものの削除を含む)。

したがって、問題は、ホスティング会社が または のいずれallow_url_fopenallow_url_includeに設定していることOffです。includeこれらのオプションは、PHP ファイル関数およびステートメントを使用したリモート ファイルへのアクセスを許可または禁止します。

あなたがしたいことは、はるかに少ないコードを使用して達成され、コードをより安全にすることができます:

file_put_contents('filelocation\weatherData.xml', file_get_contents('weather xml website'));

そこにいくつかのエラーチェックを入れることもできますが、基本的に必要なのはそれだけで、接続を操作して任意のコードの実行を防ぐことができます!

それでもうまくいかない場合は、おそらく無効になっているだけallow_url_includeでなく、無効になっていallow_url_fopenます。この場合、CURLを使用する選択肢はありません。

于 2010-09-21T20:37:29.067 に答える