为什么这不起作用?
$handle = fopen([file_patch], "r");
$handle_backup = $handle;
while (($line = fgets($handle)) {...}
$handle = $handle_backup;
while (($line = fgets($handle)) {...}
第二个循环不起作用,因为$ handle为NULL。
答案 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)) {...}