'09年に投稿されたこの問題とほぼ同じ問題が発生しています。それはうまく解決されていないようで、私は一日中関連する質問を熟読し、見つけた提案を実装しています.
XML ソース (ファイルではない) から動的 (毎日変更) データを取得し、mySQL データベースに挿入しようとしています。fwrite を使用せずにデータをプルしようとすると、出力にタグ/キーなしでデータが返されます。したがって、特定のデータベース フィールドにデータを適切に割り当てることができません。
情報をファイルに書き込んでそこから移動することにしましたが、ファイルは毎回 334kb で中止/「完了」します。残念ながら、私は cURL の初心者であり、問題が何であるかを正確に把握するための知識がありません。また、これを行うために vqMod for OpenCart を使用しています。それ以外の場合は、まっすぐな PHP を使用します。
私は何が欠けていますか?
また、xml を文字列ではなく配列としてプルする方法はありますか (それにより、fwrite ステップをバイパスする可能性があります)。または、他のファイルタイプに書き込む必要がありますか?
私が見逃した解決済みの質問への提案やリダイレクトは大歓迎です。
これは関連するコードです。コメント部分は私が試みた修正です。
$curl = curl_init();
$fp = fopen('dir/file.xml' , "w" );
//w+ will not download any information from the url - file is created but empty.
//AS IS, downloads first 334KB of file then lands on a blank page
//and a 500 error when any of these other options are implemented.
curl_setopt($curl, CURLOPT_URL, 'http://www.url.com');
curl_setopt($curl, CURLOPT_FILE, $fp);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($curl, CURLOPT_TIMEOUT, 300);
// curl_setopt($curl, CURLOPT_NOPROGRESS, false);
// curl_setopt($curl, CURLOPT_RANGE, '0-1000');
// $data = array();
$data = curl_exec($curl);
fwrite($fp, $data);
curl_close($curl);
fclose($fp);
更新: fwrite() の代わりに simplexml_load_string を使用して 1 つの製品の情報を取得しようとしましたが、まだ成功は限られています。私が使用しているXMLの例:
<?xml version="1.0"?>
<response>
<root>
<part>
<![CDATA[PARTNUM]]>
</part>
<errorcode>0</errorcode>
<errormsg></errormsg>
<special>N</special>
<description>
<![CDATA[]]>
</description>
<price>75</price>
<weight>1.02</weight>
<webpurch>Y</webpurch>
<altnum>
<![CDATA[ALT-NUM]]>
</altnum>
<active>Y</active>
<redo>
<![CDATA[]]>
</redo>
<codes>
<code>
<fieldname>
<![CDATA[Mfr Part No]]>
</fieldname>
<fieldvalue>
<![CDATA[PARTNUM]]>
</fieldvalue>
</code>
<code>
<fieldname>
<![CDATA[Special Code 1]]>
</fieldname>
<fieldvalue>
<![CDATA[XYZ123]]>
</fieldvalue>
</code>
</codes>
<customtag>N</customtag>
<onhand>0</onhand>
<notes>
<![CDATA[PRODUCT-SPECIFIC NOTE]]>
</notes>
<mfr>
<mfr_name>
<![CDATA[MFR]]>
</mfr_name>
</mfr>
<altpartnums>
<altnum>
<![CDATA[PARTNUM.12]]>
</altnum>
</altpartnums>
<gtrue>N</gtrue>
<group>
<![CDATA[GROUP NAME]]>
</group>
<categories>
<cat>294</cat>
<cat>475</cat>
</categories>
</root>
</response>
これは、fwrite() を使用しない場合の複数の製品の $data 戻り値の例です: 0 N 75 1.02 Y Y
N 0 N 294 475 0 N 288 12 Y Y
Y 18 Y 222 456 3786