我遇到了与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);
更新:尝试使用 simplexml_load_string 而不是 fwrite() 来提取一个产品的信息,但仍然取得了有限的成功。我正在使用的 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
是 18 是 222 456 3786