PHP XML读取器超时?

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脚本:

<?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请求失败!”错误。但是,下载文件时可能会看到这些。所以这里没有魔法,只是把失败的案例分开。