通过FTP / PHP下载每次都停在同一个地方

时间:2015-01-19 09:09:45

标签: php mysql ftp

我有一个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会输出这个......

  

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

     

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

增加php.ini文件中的脚本执行时间。这可以解决您的问题。 要么 在第220个文件上可能存在与文件名相关的一些错误,该文件停止执行您的脚本。或者增加内存限制

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

答案 1 :(得分:-1)

经过一段时间的调试后,我设法确定问题实际上在addFile函数中存在。

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

这个问题很难回答,因为我忽略了添加上面的/etc/my.cnf函数。遗憾!

最后修复很简单......在{{1}}(在CentOS上)上调超时时间。