PHP fopen备份变量

时间:2014-06-28 19:46:36

标签: php fopen

为什么这不起作用?

$handle = fopen([file_patch], "r");
$handle_backup = $handle;

while (($line = fgets($handle)) {...}
$handle = $handle_backup;
while (($line = fgets($handle)) {...}

第二个循环不起作用,因为$ handle为NULL。

2 个答案:

答案 0 :(得分:0)

正如官方fopen文档中所述:

  

fopen()将由filename指定的命名资源绑定到流。

这基本上意味着您的代码$handle$handle_backup不是不同的项目,而是对同一资源的公开可访问引用。含义$handle$handle_backup完全相同;它们只是内存中相同内容的别名。

因此当您执行fgets($handle)时,内存中的文件会被执行,因此$handle$handle_backup将反映该操作的相同结果。

这就是说,如果你试图简单地打开文件一次并保留一个“备份”来再次引用它,那么由于资源打开已经被采取行动,这将无法工作。正如您所描述的那样,获得“备份”的唯一方法是执行此操作:

$handle = fopen([file_patch], "r");
$handle_backup = fopen([file_patch], "r");

这可能有用或无用 - 取决于您的整体代码目标。

答案 1 :(得分:0)

也许你可以试试:

$handle1 = fopen([file_patch], "r");
$handle2 = fopen([file_patch], "r");

while (($line1 = fgets($handle1)) {...}
while (($line2 = fgets($handle2)) {...}