【问题标题】:Download a remote file (2GB) using PHP使用 PHP 下载远程文件 (2GB)
【发布时间】:2012-02-10 08:46:57
【问题描述】:

我有一个大文件 (2GB),我想用 PHP 将它从服务器 B 下载到服务器 A。

我用 PHP 尝试了 FTP 和 CURL,但没有成功。即使我 set_time_limit() 的值为 0,它也会返回 TIMEOUT REQUEST 错误。

这是我的代码:

<?php

set_time_limit(0)

$local_file = 'file.zip';
$server_file = '/www/file.zip';

$conn_id = ftp_connect("ftp.webmashing.com");

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD");

if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully written to $local_file\n";
} else {
echo "There was a problem\n";
}

ftp_close($conn_id);

?>

【问题讨论】:

  • safe_mode 开启了吗?顺便说一句:如果它很大(cronjobs 或 gearman 工作人员),我会将其委托给非 http 进程。

标签: php file-upload curl ftp download


【解决方案1】:

如果您在上传文件时遇到超时,您可以查看ftp_pasv()

bool ftp_pasv ( resource $ftp_stream , bool $pasv )

在你的情况下,试试这个:

$conn_id = ftp_connect("ftp.webmashing.com");

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD");

ftp_pasv($conn_id, true);

【讨论】:

    【解决方案2】:

    调用时,set_time_limit() 从零重新启动超时计数器。换句话说,如果超时是默认的 30 秒,并且在脚本执行 25 秒后调用了诸如 set_time_limit(20) 之类的调用,则脚本将在超时之前总共运行 45 秒。请检查 php.ini 中的“max_execution_time”指令

    【讨论】:

    • 是的,但是 set_time_limit(0) 完全禁用了超时。
    【解决方案3】:

    如果可以(取决于执行 php 文件的位置),您可以将 max_execution_time 更改为更长。

    现在,我要做的(不过,如果您有权限的话)是在从 php 文件调用的命令行中执行此操作。命令行会将结果写入特定文件,您所要做的就是检查该文件的内容。

    一旦写入结果(在 linux 中总是说“0”表示成功),你就可以做你想做的事了。

    在前端,获取下载状态的小 ajax 也很有用!

    但一如既往,这取决于您是否可以运行 shell 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多