PHP fwrite与输出管道

时间:2009-11-05 05:43:59

标签: php linux file-io

我正在编写一个工具,允许某人连接到网页并生成文件以便即时下载。

要编写这些文件,我可以使用像fopen或fwrite这样的PHP函数,或者我可以创建一个可以作为系统调用调用的脚本来生成输出,例如:

php downloadGen.php> filetocreate.xml

解决方案的fwrite版本使用更多内存,并且也比管道版本慢。有没有人看到作为系统调用执行下载生成有任何问题?我可以同时运行多少次电话会有上限吗?

无论如何,我希望有人有类似的经验,可以提供一些建议......

2 个答案:

答案 0 :(得分:1)

  

解决方案的fwrite版本   使用更多的内存,也更慢   而不是管道版

你确定吗?我会把美元押在甜甜圈上它是相反的(但是可以忽略不计),而你只是测量错误。

记忆 -

通过fopen / fwrite在进程中构建文件应该比在服务器上创建单独的进程消耗更少的内存。也许您认为这是另一种方式,因为您正在测量脚本消耗的内存量。但是php downloadGen.xml系统调用正在启动另一个进程。那里的PHP代码将使用尽可能多的内存,如果你在你的webserver绑定过程中使用它,加上cli php进程的所有开销。所以差异应该可以忽略不计。

“速度” -

这同样适用于速度。启动PHP解释器会占用处理器周期。如果您同步执行此操作,则将生成/输出代码放在主脚本中应该更快。但只是勉强。

答案 1 :(得分:0)

最简单,最有效的方法(自PHP 5.0起可用)就是简单地使用file_put_contents()将内容插入到文件中。您可以将文件名指定为第一个参数,并将字符串(二进制或简单文本 - 它是二进制安全函数)指定为要输入到文件中的数据。

然后它将在您指定的路径上生成文件。

回答你的第二点,除非你有:

  1. 大量用户
  2. 您正在不断编写HUGE文件,或
  3. 您的服务器是废话
  4. 那你就没事了。

相关问题