_7788 发表于 2006-7-11 14:50:44

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

比如有一文件 http://www.9900.com/file.xml

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

但如果打不开,本机仍将会花很长时间去解析,如何让此程序在规定时间内打开此文件,若失败,则继续下面程序。

涩兔子 发表于 2006-7-11 15:05:03


$handle = fopen("http://www.9900.com/file.xml ", "r");

if ($handle) {
    就解析
}

_7788 发表于 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的使用,而不必陷入面向过程编程的麻烦

tinnyliu 发表于 2006-7-23 02:58:06

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

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

jiangtao9999 发表于 2006-7-23 09:46:01

web 开发似乎只能这个样子,因为浏览器端条件限制。

涩兔子 发表于 2006-7-23 15:13:09

emm,PHP多线程只看过例子,没有实际应用

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

_7788 发表于 2006-7-25 23:11:40

的确,在这个例子中,时间是花在了打开文件的操作上。
可以兔子说的来设置超时是个很有效的作法。
我的解决方法是用AJAX异步读取数据,如果在有限时间内读不出,则显示默认或是一个假有数据.
页: [1]
查看完整版本: 如何判断一个远程的文件是否可以打开?