通过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函数只需读取文件名并将其放置在DB中的新行中。

如果有帮助,CLI会输出以下内容。。。

警告:ftp_get((:1.763秒(此处测量(,第43行/home/user/web/domain.com/public_html/test/ftp.php中每秒2.57兆字节PHP警告:ftp_get((:1.763秒(此处测量(,在第43行的/home/user/web/domain.com/public_html/test/ftp.PHP中每秒2.57兆字节

警告:ftp_get((:1.763秒(此处测量(,第43行/home/user/web/domain.com/public_html/test/ftp.php中每秒2.57兆字节PHP警告:ftp_chdir((:1.763秒(此处测量(,在第47行的/home/user/web/domain.com/public_html/test/ftp.PHP中每秒2.57兆字节

非常感谢您的帮助。

增加php.ini文件中的脚本执行时间。这可能会解决你的问题。或第220个文件上的文件名可能存在一些错误,该文件将停止执行您的脚本。OR增加内存限制

ini_set('memory_limit','1024M');

经过一段时间的调试,我发现问题实际上存在于$core->addFile()函数中。

这是对每个文件运行MySQL查询,因此也是阻塞。MySQL连接最终超时,从而停止了脚本。

这个问题很难回答,因为我忽略了添加上面的addFile函数。很抱歉

最终修复很简单。。。在/etc/my.cnf中增加超时时间(可在CentOS上使用(。