个性化阅读
专注于IT技术分析

feof()期望参数1为资源

我收到成千上万个如下所示的错误日志:

$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是否是资源。

赞(0) 打赏
未经允许不得转载:srcmini » feof()期望参数1为资源
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏