高分--求教高手:PHP与XML的问题。

swall 2003-08-19 11:47:57
以下这个循环,什么情况下会退出?什么情况下又会死循环了?

while ($mstrData = fread($mobjFP, 4096))
{
if (!xml_parse($mobjParser, $mstrData, feof($mobjFP)))
{
die("");
}
}
...全文
53 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
swall 2003-08-19
  • 打赏
  • 举报
回复
是否每次执行以下这句,都读到同样的东西?还是每次会往下读?
$mstrData = fread($mobjFP, 4096)
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
文件结束或读出错误就退出
不会出现死循环
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
文件结束或读出错误就退出
不会出现死循环
babystudio 2003-08-19
  • 打赏
  • 举报
回复
如果set_time_limit()在你的服务器上可用,基本上这就可以解决当机问题,不过一个缺点是访客看到的是
脚本超过最大运行时限
的服务器错误。
你可以通过register_shutdown_function()注册一个方法来处理超时情况,可以有一个比较友好的界面。
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
@set_time_limit(5);
$fp = fopen("http://.....); // 5秒钟大不开则超时

@set_time_limit(10);
// 打开后10秒钟不能读取和解析完则超时

代码中判断是否超时可用
if(connection_timeout())
超时
swall 2003-08-19
  • 打赏
  • 举报
回复
分段设置?不太明白。。可否解释一下?
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
如果5秒钟就可读取文件并解析完成,那自然是没有问题了
对远程文件要分段设置
swall 2003-08-19
  • 打赏
  • 举报
回复
感谢!!

那是否表示:我在文件的前边加上set_time_limit(5) ,该问题就可以彻底解决?
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
哦,是这样啊。

这是正常现象,
1、我试着将参数换成任意的别的显然不存在的文件。看起来也只是读不到结果,并不会出现当机情况。。
这是因为文件打不开,$mobjFP无效。至多报个错
2、如果参数mobjFP的所在文件无法访问(该文件放在别的server上而该server所在城市全城停电的情况),整个网站访问非常非常慢,甚至当机。
使用文件函数打开远程文件。使用http或ftp协议。处理过程中将不断的进行尝试,直到成功或php超时

建议
1、视远程文件更新周期,考虑在本地缓存文件
2、设置php超时时间在适当的限度

swall 2003-08-19
  • 打赏
  • 举报
回复
我的问题就是:
页面代码似乎出了问题,正常情况下一切OK,如果参数mobjFP的所在文件无法访问(该文件放在别的server上而该server所在城市全城停电的情况),整个网站访问非常非常慢,甚至当机。
调查原因时尝试将该页改成空白页后,一切又正常了。

奇怪的是: 我试着将参数换成任意的别的显然不存在的文件。看起来也只是读不到结果,并不会出现当机情况。。

有好的建议么?
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
不会。

另外,你并未说明你遇到了什么问题
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
不会。

另外,你并未说明你遇到了什么问题
swall 2003-08-19
  • 打赏
  • 举报
回复
另外一个问题:是否存在某种情况,比如用户太多的情况,而文件又读不到时,会等待很长时间然后导致down机?
swall 2003-08-19
  • 打赏
  • 举报
回复
感谢上边两位的答复。。终于明白了流程。。虽然对我的问题的解决还是没作用。。
xuzuning 2003-08-19
  • 打赏
  • 举报
回复
是否每次执行以下这句,都读到同样的东西?还是每次会往下读?
$mstrData = fread($mobjFP, 4096)

答案是:每次会往下读
sports98 2003-08-19
  • 打赏
  • 举报
回复
我上面说的游标,就是C里所说的文件指针的含义

你可以参考一下手册中fseek函数的相关说明
sports98 2003-08-19
  • 打赏
  • 举报
回复
不会的

你这代码不会死循环的

文件内是有游标的,fread不是没次都从头读文件的...

当你的$mstrData不符合XML标准的时候程序将退出..

21,880

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧