通过 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 上)中设置超时时间。