PHP XML读取器超时?
我有以下用于访问我的网站内容的PHP脚本:PHP XML读取器超时?,php,xml,error-handling,timeout,xmlreader,Php,Xml,Error Handling,Timeout,Xmlreader,我有以下用于访问我的网站内容的PHP脚本: <?php $con = mysqli_connect("x", "x", "x", "x"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } mysqli_query($con, "UPDATE products SET in_stock = 'no'");
<?php
$con = mysqli_connect("x", "x", "x", "x");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con, "UPDATE products SET in_stock = 'no'");
$xml = new XMLReader;
$xml->open('compress.zlib://file.xml/compression/gzip/');
while ($xml->read())
{
if ($xml->nodeType == XMLReader::ELEMENT)
{
if ($xml->name == 'merchant')
{
$merchant = array();
$merchant['merchant_id'] = $xml->getAttribute('id');
$merchant['merchant_name'] = $xml->getAttribute('name');
}
}
if ($xml->nodeType == XMLREADER::ELEMENT)
{
if ($xml->name == 'prod')
{
$prod = array();
$prod['merchant_id'] = $merchant['merchant_id'];
$prod['merchant_name'] = $merchant['merchant_name'];
$prod['aw_product_id'] = $xml->getAttribute('id');
$prod['in_stock'] = $xml->getAttribute('in_stock');
}
if ($xml->name == 'name')
{
$xml->read();
$prod['product_name'] = $xml->value;
}
if ($xml->name == 'awTrack')
{
$xml->read();
$prod['aw_deep_link'] = $xml->value;
}
if ($xml->name == 'awImage')
{
$xml->read();
$prod['aw_image_url'] = $xml->value;
}
if ($xml->name == 'buynow')
{
$xml->read();
$prod['search_price'] = $xml->value;
}
if ($xml->name == 'rrp')
{
$xml->read();
$prod['rrp_price'] = $xml->value;
}
if ($xml->name == 'awCatId')
{
$xml->read();
$prod['category_id'] = $xml->value;
}
if ($xml->name == 'awCat')
{
$xml->read();
$prod['category_name'] = $xml->value;
}
if ($xml->name == 'awBrandId')
{
$xml->read();
$prod['brand_id'] = $xml->value;
}
if ($xml->name == 'brandName')
{
$xml->read();
$prod['brand_name'] = $xml->value;
}
}
if ($xml->nodeType == XMLReader::END_ELEMENT)
{
if ($xml->name == 'prod')
{
$products[] = $prod;
}
}
if ($xml->nodeType == XMLReader::END_ELEMENT)
{
if ($xml->name == 'merchant')
{
$merchants[] = $merchant;
}
}
}
$i = 0;
foreach ($products as $row)
{
mysqli_query($con, "INSERT INTO products (merchant_id, merchant_name, aw_product_id, in_stock, product_name, aw_deep_link, aw_image_url, search_price, rrp_price, category_id, category_name, brand_id, brand_name) VALUES ('$row[merchant_id]', '$row[merchant_name]', '$row[aw_product_id]', '$row[in_stock]', '$row[product_name]', '$row[aw_deep_link]', '$row[aw_image_url]', '$row[search_price]', '$row[rrp_price]', '$row[category_id]', '$row[category_name]', '$row[brand_id]', '$row[brand_name]') ON DUPLICATE KEY UPDATE merchant_id = '$row[merchant_id]', merchant_name = '$row[merchant_name]', in_stock = '$row[in_stock]', product_name = '$row[product_name]', aw_deep_link = '$row[aw_deep_link]', aw_image_url = '$row[aw_image_url]', search_price = '$row[search_price]', rrp_price = '$row[rrp_price]', category_id = '$row[category_id]', category_name = '$row[category_name]', brand_id = '$row[brand_id]', brand_name = '$row[brand_name]'");
$i++;
}
$j = 0;
foreach ($merchants as $row)
{
mysqli_query($con, "INSERT INTO merchants (merchant_id, merchant_name) VALUES ('$row[merchant_id]', '$row[merchant_name]') ON DUPLICATE KEY UPDATE merchant_name = '$row[merchant_name]'");
$j++;
}
echo 'Update complete!<br />' . $i . ' product(s) in total<br />' . $j . ' merchant(s) in total';
mysqli_close($con);
您是否先下载文件,然后对本地副本进行操作?否。。。我应该吗@哈克瑞斯。或者:如果没有,请不要怀疑错误消息。:)对于创建临时文件,这可能会有所帮助:;所以,只要我理解正确;如果我将文件保存在本地(解压),并使用与指向临时文件相同的代码,那么无论XML文档大小如何,我都不会再出现此错误了@是的。至少,如果您自己的磁盘上有XML,您可以实际看到它是XML。如果您也从磁盘打开一个文件,您不应该看到任何“HTTP请求失败!”错误。但是,下载文件时可能会看到这些。所以这里没有魔法,只是把失败的案例分开。