试试fopen两次?

时间:2014-08-02 02:17:04

标签: php fopen

我的本​​地主机上从未遇到PHP的fopen函数失败。但是,如果fopen在第一次尝试时失败,那么第二次尝试是否有用,如下面的函数所示?

<?php

function tryOp2 ($filename, $how) {
    $handle = fopen($filename, $how);

    if($handle === false) {
        $handle = fopen($filename, $how);
        if($handle === false){
            return false;       
        }
    }

    return $handle;
}

?>

4 个答案:

答案 0 :(得分:0)

在某些情况下,这确实会有所帮助。如果你在再次尝试之前短暂延迟,你甚至可以提高恢复的机会。如果这是一个长期运行的脚本,尤其是它非常有用。

PHP缓存某些文件操作(例如fstat),但在这些情况下,PHP只会缓存成功的结果,并且可以再次尝试任何失败的调用,而不必担心会出现缓存失败。

答案 1 :(得分:0)

我不推荐它。而是试着找出它为什么不起作用。

检查文件是否存在file_exists()

答案 2 :(得分:0)

我宁愿说使用不同的权限fopen。如果您再给一个机会打开一个可能正忙于某个其他进程的文件可能会对您有所帮助。但它并没有太大的区别,因为虚拟代码不会花费太多时间来进行第二次尝试。如果你只想阅读文件使用fopen标志它会更好。因此,您不必使用两次尝试。

答案 3 :(得分:0)

您可以执行类似

的操作
$handles=array();

$handles[]=@fopen($url, "r");

$handles[]=@fopen($url2, "r");

foreach($handles as $handle){
while (!feof($handle))
{
    $buffer = fgets($handle);
    if(strpos($buffer, $map) !== FALSE)
        $matches[] = $buffer;
}
fclose($handle);

}

正如@stewe回答here