1

ソースディスクからデータを選択し、ボタン送信を介してアップロードすることにより、xmlファイルからmysqlデータベースにデータをインポートするスクリプトを作成しました。しかし、このインポートを自動化するためにサードパーティのアプリケーションが使用されたとしたらどうでしょう。xml パスの get パラメータが存在するかどうかを確認し、そのコンテンツを取得して以前と同じ方法でインポートするのは適切でしょうか? またはより良い方法がありますか?

パラメータを取得することで、次のようになります。

http://domain.com/import.php?path=externaldomain.com/xml/page.xml
4

2 に答える 2

1

インポートするデータの種類によって異なります。RSS フィードからデータをインポートする場合は、この方法で問題ありません。しかし、個人データをインポートする場合、これはあまり良い方法ではないかもしれません.

他の人が見るはずのない重要なデータを扱っている場合は、より安全なものをお勧めします。ftp を介して xml ファイルをインポートすることを検討し始め、サーバーで保護されたフォルダーからダウンロードします。選択した安全な場所に xml ファイルをアップロードするようにサードパーティ アプリケーションに依頼します。何らかのセキュリティの背後で行われることは、個人データに対して推奨される方法よりも優れています。

于 2012-07-24T17:26:21.590 に答える
0

まず、 を使用することをお勧めしますcURL。XML がどれほど巨大であっても、メモリに関する問題は少なくなります。

$fp = fopen('/var/www/vhosts/my.com/xml/feed.xml', 'w'); // opening file handler to write feed in

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/xml/page.xml'); // setting URL to take XML from
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // If result is gziped
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  // Wildcard certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // disabling buffer output, bec. we want to write XML to the file first and don't need it to be returned into variable
curl_setopt($ch, CURLOPT_FILE, $fp); // here we should transfer opened file handler to the cURL and it should be writable!
$result = curl_exec($ch); // executing download
$reponse_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); // retrieving HTTP return code for our request. Was it successful or not.

したがって、SSL の背後にあり、GZIP されている場合でも、XML フィードをファイルに直接ダウンロード/保存できます。

you を使用curl_getinfo()すると、リクエストに関するさまざまな情報を取得できます。手順が自動化されている場合は、リクエストが失敗した場合にどうするかを決めるとよいでしょう。

それよりも、ファイルが大きくない場合 ( 200 ~ 300 Mb を超える非常に大きなファイルを意味SimpleXMLします)、ライブラリ( PHP5 以降でのみ使用可能) を使用してデータを解析できます。PHP4 を使用している場合 (現在でも可能ですlibXML)、非常に役立つものを見つけてみてください。

取得したファイルがかなり大きい場合:)FILEパーミッションを持つ MySQL データベースはあなたの味方です。

于 2012-07-24T20:26:21.013 に答える