我收到成千上万个如下所示的错误日志:
$xml = "<requisicao-boleto>
<website>
<n_website>{$n_website}</n_website>
<password>{$password}</password>
</website>
<sacado>
<name>{$name}</name>
{$user_code}
<address>
<street>{$street}</street>
<complement>{$complement}</complement>
<number>{$number}</number>
<district>{$district}</district>
<state_province>{$state_province}</state_province>
<city>{$city}</city>
<postcode>{$postcode}</postcode>
<country>{$country}</country>
</address>
</sacado>
<dados_boleto>
<product>{$product}</product>
<reference>{$uid}</reference>
<value>{$value}</value>
</dados_boleto>
</requisicao-boleto>";
$xml = preg_replace('/\s(?=\s)/', '', $xml);
$xml = "xml=" . $xml;
$n = strlen($xml);
$opts = array(
'http' => array(
'method' => "POST", 'header' => "User-Agent: My Own Http Client\r\n" .
"Content-length: " . $n . "\r\n", 'content' => $xml
)
);
$context = stream_context_create($opts);
$handle = fopen($URL, 'r', false, $context);
$conteudo = '';
while (!feof($handle)) {
$conteudo .= fread($handle, 1024);
}
代码是:
while (!feof($handle)) {
$conteudo .= fread($handle, 1024);
}
有没有人遇到过类似的问题, 并且知道如何克服这个问题?
在尝试实施已经给出的建议时, 我已经用完整的代码更新了这个问题。
#1
你检查过fopen是否有效吗?
$handle = fopen($URL, 'r', false, $context);
if ( $handle === FALSE ) {
echo 'Cannot open this url ' . $URL;
exit;
}
#2
查看fopen文档
成功返回文件指针资源, 错误返回FALSE。
我认为在你的情况下, fopen返回false, feof也返回false。这就是为什么你会陷入无限循环。
以下是feof文档的报价
如果文件指针位于EOF或发生错误(包括套接字超时), 则返回TRUE。否则返回FALSE。
你的示例如下所示
php > var_dump(feof(false));
PHP Warning: feof() expects parameter 1 to be resource, boolean given in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
PHP 2. feof() php shell code:1
bool(false)
php >
在执行其他任何操作之前, 你需要检查$ handle是否是资源。
评论前必须登录!
注册