我收到了数以千计的错误日志:
$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);
}
有没有人遇到过类比问题而且知道如何解决这个问题?
在我尝试实施已经提供的消息时,我已经用完整的代码更新了这个问题。
答案 0 :(得分:1)
你检查过fopen是否有效?
$handle = fopen($URL, 'r', false, $context);
if ( $handle === FALSE ) {
echo 'Cannot open this url ' . $URL;
exit;
}
答案 1 :(得分:1)
查看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
是否为资源。