【发布时间】:2015-07-25 03:29:16
【问题描述】:
这是我的问题的一个超级简单的例子。该代码预计将分别创建 1000 个名为 file1 到 file1000 的文件,并且在每个文件中,数字 1 到 1000000000 应该以升序出现,每行一个数字,因为一个人浏览文件。
<?php
for ($filenum=1;$filenum<=1000;$filenum++){
$handle=fopen("file".$filenum,"w");
for ($num=1;$num<=1000000000;$num++){
fwrite($handle,$num."\n");
}
fclose($handle);
}
?>
在执行时,第一个文件 file0001 被正确创建。然而,第二个文件包含乱序的数字。我相信这是因为 fwrite 将字符串发送到稍后写入的特殊缓冲区中?
我想要的是立即写入数据。我不在乎是否需要额外的十分钟才能正确写入文件,我愿意使用更好的函数来代替 fopen() fwrite() 和 fclose()。我相信在 C 语言中,有一个名为 OPEN 的系统函数用于创建没有任何缓冲的文件,而这正是我想要的。
谁能告诉我应该使用更好的功能吗?还是我必须求助于创建自己的涉及循环的函数,直到 fwrite() 函数写入所有数据并祈祷系统不会锁定?
【问题讨论】:
-
我运行了一个测试,只创建了 10 个文件,10k 行,按预期工作。无法想象这个在现实世界中的用途 :-)
-
我尝试了循环方法并写入了一些字节,但是在fwrite无限期返回零值之后,文件句柄仍然有效。
-
您可能正在寻找
stream_set_write_buffer。file_put_contents或touch可以创建更简单的文件。否则请调查flock,如果原因实际上是并发访问或其他原因。