我正在运行一个网站,我们从一个安装在Fuse上的文件夹(cloudfuse - 一个Rackspace Cloudfiles容器)提供大量文件,它在大多数情况下工作得非常好但是Fuse连接的所有连接都停止了所有我的Apache进程挂起,等待file_exists()函数返回。
我的问题是,无论如何都要为特定函数设置超时或使用其他函数检查文件是否存在但如果函数花费的时间超过x秒则返回false?
答案 0 :(得分:2)
我认为file_exists()
只是简单的功能,不适用于此类操作。
解决方法#1(相当优雅)
解决方法#2(更简单,根本不优雅)
答案 1 :(得分:1)
你可以试试这个:
function file_exists_timeout($file, $timeout) {
// try with both, as i mentioned in comment
// this is just a shot :( maybe it will works for you
ini_set('default_socket_timeout', $timeout);
stream_set_timeout($timeout);
$file = fopen($file, 'r');
if($file) {
fclose($file);
return true;
}else{
return false;
}
}
但我不确定它会对你有用。
答案 2 :(得分:1)
我认为你可以运行一个脚本来扫描挂载的cloudfuse中的所有文件,
(通常是一个cronjob)
然后将结果存储到存储器(memcache,数据库等......),
随后你的PHP脚本可以使用结果
为了使扫描结果保持最新,
您可以使用加载挂钩来更新/添加/删除文件时更新结果
答案 3 :(得分:-1)
您可以使用PHP的set_time_limit来限制“父”脚本的执行时间。 http://php.net/manual/en/function.set-time-limit.php