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

时间:2010-09-27 13:31:34

标签: php curl file-get-contents readfile

我正在尝试阅读大文件,让我们在我的系统中使用cron作业说插图文件或photoshop文件。 文件大小从20 mb到300 mb

不等

我一直在使用某些功能,但在阅读时它会在中间打破。所以我想有一个新意见。

这些功能的数量

  • 的file_get_contents
  • ReadFile的
  • 卷曲

最有效的

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

如果有超过两个cron作业,它是否会影响所有服务器性能。

请分享最佳实践代码。

提前致谢

3 个答案:

答案 0 :(得分:3)

使用cURL。不推荐使用文件函数,而是使用cURL来打开远程文件。它不仅faster,而且更可靠 1 (您不太可能遇到超时)。

如果您的脚本超时或内存不足,您需要增加执行时间和内存限制(max_execution_timememory_limit)。

其他说明:

  • readfile()读取文件并将其打印到输出缓冲区;这跟file_get_contents()不一样。
  • 如果您使用--with-curlwrappers编译curl,那么当您执行file_get_contents()时,它将使用cURL而不是fopen()函数。

1 需要引文。

答案 1 :(得分:0)

如果文件太大,你需要拆分这两个任务。 首先你用wget下载文件,一旦你有你的文件,你用PHP处理它。 这样你就不太可能遇到超时问题。

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

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

然后使用您的php程序将其作为第三步也是最后一步处理

答案 2 :(得分:0)

DirectIO是一种低级扩展,绕过操作系统直接进入硬盘,因此效率最高。

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

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