我有一个大文件(2GB),我想用服务器B用PHP将它下载到服务器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);
?>
答案 0 :(得分:0)
如果您有超时上传文件,可以查看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);
答案 1 :(得分:0)
调用时,set_time_limit()从零重新启动超时计数器。换句话说,如果超时是默认的30秒,并且脚本执行25秒,则进行诸如set_time_limit(20)之类的调用,脚本将在超时之前运行总共45秒。请检查php.ini中的“max_execution_time”指令
答案 2 :(得分:0)
如果可以(取决于执行php文件的位置),可以将max_execution_time更改为更长时间。
现在,我要做的是(仍然,如果你有权利),是在从php文件调用的命令行中完成它。命令行会将结果写入特定文件中,您只需检查该文件的内容即可。
一旦写完结果(就像在linux中一样成功地说“0”),你可以做你想做的事。
在前端,获得下载状态的一点点ajax也很有用!
但与往常一样,这取决于你是否可以运行shell命令。