【问题标题】:Is there a ftp_rawlist() alternative to avoid memory problems?是否有 ftp_rawlist() 替代方法来避免内存问题?
【发布时间】:2013-02-24 10:11:06
【问题描述】:

我正在使用 ftp_rawlist() 来获取目录中的文件列表:

$files = ftp_rawlist($ftp, "-A " . $ftp_dir);// obtain hidden files without "." and ".."

到目前为止一切顺利。但是有些文件夹包含数千个文件,所以我遇到了内存使用问题:

致命错误:允许的内存大小为 67108864 字节已用尽(试图 在 Y 行的 X 中分配 209855912 字节)

有没有其他方法可以逐行获取 LIST 结果?也许通过 ftp_raw()?

编辑:我不想使用 ini_set('memory_limit', 'xxxM');因为我永远不知道需要多少内存,而且我认为这不是一个好习惯,因为某些主机不允许更改此值。

【问题讨论】:

  • 您可以打开套接字连接并发送原始 ftp 命令,并逐行获取输出。但是您仍然需要将其存储在某个地方,因此您需要大量内存。
  • 你有例子吗?我会测试它。如果没有其他方法我会尝试将数据写入本地文件。
  • 看看phpclasses.org/package/1743-PHP-FTP-client-in-pure-PHP.html它实现了ftp客户端,不依赖ftp扩展
  • @dev-null-dweller 谢谢。我自己进行测试,但它确实是一个自己的项目来实现这一点,所以这门课真的很完美!我在 wordpress 中找到了一个“新”:github.com/WordPress/WordPress/blob/master/wp-admin/includes/… 我会使用它并提供反馈。

标签: php ftp


【解决方案1】:

尝试增加内存限制

ini_set("memory_limit", "64M") 

64 或更多 MB

你也可以关闭最大执行时间

set_time_limit(0);

【讨论】:

  • 我不想更改memory_limit。我已经更新了我的问题。
  • @mgutt 在我看来这是唯一的出路,使用 memoty_limit
  • 顺便说一句:67108864 = 64M 和 209855912 = 200M。可能还有包含更多文件的文件夹。
  • P.S.我对 max_execution_time 没有任何问题,因为我每个请求只传输 x 个文件(下一个请求在最后一个位置继续)。
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 2013-03-28
  • 2014-06-20
  • 1970-01-01
相关资源
最近更新 更多