feof()期望参数1是资源

时间:2016-04-14 11:54:55

标签: php wordpress wordpress-theming

我收到了数以千计的错误日志:

$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);
}

有没有人遇到过类比问题而且知道如何解决这个问题?

在我尝试实施已经提供的消息时,我已经用完整的代码更新了这个问题。

2 个答案:

答案 0 :(得分:1)

你检查过fopen是否有效?

$handle = fopen($URL, 'r', false, $context);
if ( $handle === FALSE ) {
    echo 'Cannot open this url ' . $URL;
    exit;
}

答案 1 :(得分:1)

查看fopen

的文档
  

成功时返回文件指针资源,错误时返回FALSE。

我认为在您的情况下fopen返回falsefeof也返回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是否为资源。