来自feof()的错误eof与套接字fgets

时间:2013-03-29 16:49:38

标签: php fgets fsockopen feof

我继承了一段代码,该代码使用下面的fetchURL()函数从网址中获取数据。我刚刚注意到,在检索完整页数据之前,它经常会返回feof()。我尝试了一些测试,并使用CURL file_get_contents()每次都检索整页。

错误是间歇性的。 在9个调用中,有时7个将成功完成,有时只有4个.9个中的特定4个(它们只是通过更改查询字符串获取请求)总是成功完成。我试图颠倒顺序请求和相同的4个查询字符串仍然总是成功,而其余的有时工作,有时不工作 因此,“似乎”返回的数据可能与问题有关,但这是间歇性的,让我感到厌恶。在每种情况下返回的数据总是相同的(例如,每次我使用查询字符串?SearchString=8502806进行调用时,返回的页面包含相同的数据),但有时整页由{{1}传递有时没有。

有没有人建议可能导致这种情况的原因?在这个主题上看到的大多数其他帖子都是关于fgets/feof没有返回真实的相反问题。

feof()

2 个答案:

答案 0 :(得分:2)

我发现该代码存在很多问题。

  • 不要在套接字上使用feof。它会一直挂起,直到服务器关闭套接字,这不一定会在收到页面后立即发生。
  • feof可能会返回true(套接字已关闭),而PHP的缓冲区中仍有一些数据。
  • 用于区分标题和主体的代码似乎依赖于PHP正常工作,这通常是一个坏主意。 fgets不一定会读取一行,它也只能返回一个字节(\r,然后下一次调用你可能会得到\n
  • 您没有正确编码路径值

为什么不直接将代码转换为使用cURL或file_get_contents?

答案 1 :(得分:-1)

这听起来像是一个超时问题。请参阅PHP手册中的stream_set_timeout()