通过 FTP/PHP 下载每次都在同一个地方停止
Downloading via FTP/PHP stops at the same place each time
我有一个 PHP 脚本通过 FTP 连接到远程服务器以递归下载所有内容并将文件添加到 MySQL 数据库。
我遇到的问题是它总是在不同的时间后停止。它们是通话录音,所以数量很多。文件夹结构看起来有点像这样:
|/
|¬merged
|¬20150105
|¬Time-20150105-091444-From-2244605-To-2244615.wav
|¬20150106
|¬Time-20150105-091444-From-1234567-To-1236547.wav
等等...(显然每个文件中有多个文件...)
这是 FTP 脚本:
<?php
include('../includes/init.php');
$ftp_server = "ftp1.FTPSERVER.com";
$conn_id = ftp_connect ($ftp_server)
or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, "USER", "PASSWD");
if ((!$conn_id) || (!$login_result))
die("FTP Connection Failed");
ftp_pasv($conn_id, false);
ftp_sync ("."); // Use "." if you are in the current directory
ftp_close($conn_id);
// ftp_sync - Copy directory and file structure
function ftp_sync ($dir) {
global $conn_id, $core;
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
ftp_get($conn_id, $file, $file, FTP_BINARY);
$core->addFile('3', $file);
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}
?>
我通过 shell 运行 这个脚本来避免 PHP 的最大执行时间。
addFile 函数只是读取文件名并将其放在数据库中的新行中。
如果有帮助,CLI 会输出这个...
Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43
PHP Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43
Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43
PHP Warning: ftp_chdir(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 47
非常感谢任何帮助。
增加 php.ini 文件中的脚本执行时间。这可能会解决您的问题。
要么
第 220 个文件的文件名可能存在一些错误,这会停止执行您的脚本。或者增加内存限制
ini_set('memory_limit','1024M');
调试了一段时间后,我发现问题出在$core->addFile()
函数上。
这是 运行 对 每个 文件的 MySQL 查询,因此被阻止。 MySQL 连接最终超时,因此停止了脚本。
这个问题很难回答,因为我忘记在上面添加 addFile
功能。抱歉!
最终修复很简单...在 /etc/my.cnf
(在 CentOS 上)中设置超时时间。
我有一个 PHP 脚本通过 FTP 连接到远程服务器以递归下载所有内容并将文件添加到 MySQL 数据库。
我遇到的问题是它总是在不同的时间后停止。它们是通话录音,所以数量很多。文件夹结构看起来有点像这样:
|/
|¬merged
|¬20150105
|¬Time-20150105-091444-From-2244605-To-2244615.wav
|¬20150106
|¬Time-20150105-091444-From-1234567-To-1236547.wav
等等...(显然每个文件中有多个文件...)
这是 FTP 脚本:
<?php
include('../includes/init.php');
$ftp_server = "ftp1.FTPSERVER.com";
$conn_id = ftp_connect ($ftp_server)
or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, "USER", "PASSWD");
if ((!$conn_id) || (!$login_result))
die("FTP Connection Failed");
ftp_pasv($conn_id, false);
ftp_sync ("."); // Use "." if you are in the current directory
ftp_close($conn_id);
// ftp_sync - Copy directory and file structure
function ftp_sync ($dir) {
global $conn_id, $core;
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
ftp_get($conn_id, $file, $file, FTP_BINARY);
$core->addFile('3', $file);
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}
?>
我通过 shell 运行 这个脚本来避免 PHP 的最大执行时间。
addFile 函数只是读取文件名并将其放在数据库中的新行中。
如果有帮助,CLI 会输出这个...
Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43 PHP Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43
Warning: ftp_get(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 43 PHP Warning: ftp_chdir(): 1.763 seconds (measured here), 2.57 Mbytes per second in /home/user/web/domain.com/public_html/test/ftp.php on line 47
非常感谢任何帮助。
增加 php.ini 文件中的脚本执行时间。这可能会解决您的问题。 要么 第 220 个文件的文件名可能存在一些错误,这会停止执行您的脚本。或者增加内存限制
ini_set('memory_limit','1024M');
调试了一段时间后,我发现问题出在$core->addFile()
函数上。
这是 运行 对 每个 文件的 MySQL 查询,因此被阻止。 MySQL 连接最终超时,因此停止了脚本。
这个问题很难回答,因为我忘记在上面添加 addFile
功能。抱歉!
最终修复很简单...在 /etc/my.cnf
(在 CentOS 上)中设置超时时间。