使用PHP脚本从远程服务器读取大文件

3

我正在尝试使用cron job在我的系统中读取大文件,比如Illustrator文件或Photoshop文件。

这些文件的大小从20MB到300MB不等。

我一直在使用一些函数,但在读取过程中会中断。所以我想听听新的意见。

以下是这些函数:

  • file_get_contents
  • readfile
  • curl

就以下几个方面来说,哪一个是最有效的:

  • 一致性(在读取文件时不应中断)
  • 速度
  • 资源使用

如果有两个以上的cron job,它是否会影响整个服务器的性能。

请分享最佳实践代码。

提前感谢您的帮助。


你是否“绑定”于HTTP?对于文件传输来说,它并不是非常有效,其他协议可能更加高效,甚至在失败时可能会重新启动(虽然这也可以通过HTTP实现)。 - Wrikken
3个回答

3
使用cURL。文件函数已被弃用,取而代之的是cURL打开远程文件。它不仅更快, 而且更可靠1(您不太可能遇到超时问题)。
如果您的脚本仍然超时或内存不足,则需要增加执行时间和内存限制(max_execution_timememory_limit)。
其他注意事项:
  • readfile()读取文件并将其打印到输出缓冲区;这与file_get_contents()不同。
  • 如果您使用--with-curlwrappers编译curl,则在执行file_get_contents()时,它将使用cURL而不是fopen()函数。

1需要引用。


0

如果文件太大,你需要将两个任务分开。首先用wget下载文件,然后用php处理文件。这样做,你就不太可能遇到超时问题。

如果你不知道要下载哪个文件,因为它是某种php变量,你可以在工作的第一步写入所需文件的名称。

然后作为第二步将其通过“--input-file=file”传递给wget。

最后,用你的php程序作为第三步和最终步骤来处理它。


0

DirectIO是一种低级扩展,可以绕过操作系统直接访问硬盘,因此可能是最有效的。

http://php.net/manual/en/ref.dio.php

请注意,自 PHP 5.1.0 起,它不再与 PHP 捆绑在一起。此外,如果您的脚本在操作过程中中断,请检查您的 max_execution_time 和 max_memory。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接