2009-11-05 101 views
2

我正在编写一个工具,允许有人连接到网页并生成可供即时下载的文件。PHP fwrite vs.输出管道

写这些文件,我可以使用PHP功能,如FOPEN或FWRITE,或者我可以创建一个脚本,它可以被称为一个系统调用,生成的输出如:

PHP downloadGen.php> filetocreate .xml

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

无论如何,我希望有人有经验,类似的东西,并能提供一些建议......

回答

0

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

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

并回答你的第二个问题,除非你有:

  1. 数量庞大的用户,
  2. 你不断写大文件,或
  3. 你的服务器是胡扯

然后你会好起来的。

+0

使用file_put_contents的问题是,我将不得不将整个输出存储在变量中,然后将其转储到文件中。 – 2009-11-05 06:23:02

1

解决 的fwrite的版本使用更多的内存,并且也比管道版本

确实慢 ?我会打赌美元甜甜圈这是相反的(但以一种微不足道的方式),你只是测量错误。

存储器 -

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

“速度” -

这同样适用于速度。启动PHP解释器会消耗处理器周期。如果你这样做是同步进行的,那么将代码/输出代码放在主脚本中应该更快。但只是勉强。