QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3806|回复: 7

如何判断一个远程的文件是否可以打开?

[复制链接]
发表于 2006-7-11 14:50:44 | 显示全部楼层 |阅读模式
比如有一文件 http://www.9900.com/file.xml

我要在本机上用 http://www.7788.com/parse.php 解析此文件

但如果打不开,本机仍将会花很长时间去解析,如何让此程序在规定时间内打开此文件,若失败,则继续下面程序。
发表于 2006-7-11 15:05:03 | 显示全部楼层
[code:1]
$handle = fopen("http://www.9900.com/file.xml ", "r");

if ($handle) {
    就解析
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2006-7-11 15:48:01 | 显示全部楼层
当前这样时,当这个远程文件(服务器)不稳定
时即有时候可以打开,有时候不能打开
若不能打开,此页面将会花很长时间,等以若干时间打不开后
才会返回错误。
我想让它在初次打开此文件失败时即停止此解析工作,继续下面的程序
回复

使用道具 举报

发表于 2006-7-11 16:35:38 | 显示全部楼层
Class _7788{

public function parse($file)
{
    $handle = fopen($file, "r");

    if ($handle) {
        就解析
        return $parsed_content
    }
}

public function other_stuff()
{
    其他的API
}

}

然后LZ在调用的时候,就可以进行多个API的使用,而不必陷入面向过程编程的麻烦
回复

使用道具 举报

发表于 2006-7-23 02:58:06 | 显示全部楼层
嗯,窃以为,这个可能是一个硬伤。
如果做一个普通的应用程序,无非多开一个线程,在一定时间内没有反应就杀掉那个打开文件的线程抛个异常出来。但web上,php我还没看到类似多线程的例子。web程序的操作是一项一项做下去的,一定要等它返回结果了,才能进行下一步。lz说的情况,时间是花在打开文件上了,如果网络有问题,可能在某个tcp/ip层上可能会去重试连接,在满足一定条件之后,web程序才知道打开远程文件失败。这时候程序才得已继续运行,但时间却已经花在打开远程文件之上了。

不知道流程是不是这样的,还望高手指正。
回复

使用道具 举报

发表于 2006-7-23 09:46:01 | 显示全部楼层
web 开发似乎只能这个样子,因为浏览器端条件限制。
回复

使用道具 举报

发表于 2006-7-23 15:13:09 | 显示全部楼层
emm,PHP多线程只看过例子,没有实际应用

LZ的应用中设置超时很重要
回复

使用道具 举报

 楼主| 发表于 2006-7-25 23:11:40 | 显示全部楼层
的确,在这个例子中,时间是花在了打开文件的操作上。
可以兔子说的来设置超时是个很有效的作法。
我的解决方法是用AJAX异步读取数据,如果在有限时间内读不出,则显示默认或是一个假有数据.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 00:27 , Processed in 0.060032 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表