如何判断一个远程的文件是否可以打开?
比如有一文件 http://www.9900.com/file.xml我要在本机上用 http://www.7788.com/parse.php 解析此文件
但如果打不开,本机仍将会花很长时间去解析,如何让此程序在规定时间内打开此文件,若失败,则继续下面程序。
$handle = fopen("http://www.9900.com/file.xml ", "r");
if ($handle) {
就解析
}
当前这样时,当这个远程文件(服务器)不稳定
时即有时候可以打开,有时候不能打开
若不能打开,此页面将会花很长时间,等以若干时间打不开后
才会返回错误。
我想让它在初次打开此文件失败时即停止此解析工作,继续下面的程序 Class _7788{
public function parse($file)
{
$handle = fopen($file, "r");
if ($handle) {
就解析
return $parsed_content
}
}
public function other_stuff()
{
其他的API
}
}
然后LZ在调用的时候,就可以进行多个API的使用,而不必陷入面向过程编程的麻烦 嗯,窃以为,这个可能是一个硬伤。
如果做一个普通的应用程序,无非多开一个线程,在一定时间内没有反应就杀掉那个打开文件的线程抛个异常出来。但web上,php我还没看到类似多线程的例子。web程序的操作是一项一项做下去的,一定要等它返回结果了,才能进行下一步。lz说的情况,时间是花在打开文件上了,如果网络有问题,可能在某个tcp/ip层上可能会去重试连接,在满足一定条件之后,web程序才知道打开远程文件失败。这时候程序才得已继续运行,但时间却已经花在打开远程文件之上了。
不知道流程是不是这样的,还望高手指正。 web 开发似乎只能这个样子,因为浏览器端条件限制。 emm,PHP多线程只看过例子,没有实际应用
LZ的应用中设置超时很重要 的确,在这个例子中,时间是花在了打开文件的操作上。
可以兔子说的来设置超时是个很有效的作法。
我的解决方法是用AJAX异步读取数据,如果在有限时间内读不出,则显示默认或是一个假有数据.
页:
[1]