我写了一个php脚本,通过FTP下载文件和文件夹,以便我可以在某些条件下进行备份。但是,它不是下载所有文件。它正在从我们的服务器下载一些图像。我无法理解其他图像的错误。它们都是所有国家旗帜的小图像。它们的大小相同。如果我从更多根级别下载,它会下载其他文件。但是,它完全停止了co.png文件。
以下是link(http://robi123.com/flags.zip)下载我尝试使用PHP FTP下载的图像文件。
我知道这个脚本可能需要其他改进,或者在下载其他大文件时也会遇到其他步骤。我现在需要帮助来解决这个问题。什么是我的脚本没有下载其他图像? php的警告附有这个问题。我有一个想法尝试执行RAW FTP命令。忽略RAW FTP命令的代码。但是ftp下载的所有其他方法(ftp_get,ftp_nb_get和)都被卡在同样的事情和相同的警告中。但你可以任何方式提出建议。
这是我的代码:
<?php
set_time_limit(0);
ini_set('xdebug.max_nesting_level', "100000000000000000000000");
$ftp_server = "";
$ftp_user = "";
$ftp_pass = "";
$ftp_conn = ftp_connect($ftp_server);
$ftp_login = ftp_login($ftp_conn, $ftp_user, $ftp_pass);
ftp_set_option($ftp_conn, FTP_TIMEOUT_SEC, 10000000);
ftp_set_option($ftp_conn, FTP_AUTOSEEK, true);
ftp_pasv($ftp_conn, true);
if ((!$ftp_conn) || (!$ftp_login)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user<br />";
} else {
echo "Connected to $ftp_server, for user $ftp_user<br />";
}
echo getcwd()."<br />" ;
function download($ftp_conn,$local_folder,$remote_folder){
if($local_folder !=""){
chdir($local_folder);
}
echo getcwd()."<br />" ;
ftp_chdir($ftp_conn,$remote_folder);
$files_folders = ftp_nlist($ftp_conn, ".");
foreach($files_folders as $temp){
if ($temp == '.' OR $temp == '..'){
continue;
}
if(ftp_is_dir($ftp_conn,$temp)){
//echo "$temp<br>";
@mkdir($temp);
echo "Folder: ".$remote_folder."/".$temp."<br />";
download($ftp_conn,$temp,$remote_folder."/".$temp);
}else{
ftp_get($ftp_conn, $temp, $temp, FTP_BINARY);
//ftp_nb_get($ftp_conn, $temp, $temp, FTP_BINARY);
/*
$ret = ftp_nb_get($ftp_conn, $temp, $temp, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
$ret = ftp_nb_continue($ftp_conn);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file";
exit(1);
}
$command = "RETR $remote_folder/$temp";
$result = ftp_raw($ftp_conn, trim($command));
print_r($result);
*/
echo "File: $temp<br />";
}
}
chdir("..");
ftp_chdir($ftp_conn, "..");
return;
}
function ftp_is_dir($ftp_conn,$dir) {
if (@ftp_chdir($ftp_conn, $dir)) {
ftp_chdir($ftp_conn, '..');
return true;
} else {
return false;
}
}
download($ftp_conn,"data","/public_html/c4smod/traffic/Img/Flags/");
?>
答案 0 :(得分:0)
我发现了这个问题。下载了几个图像后,我的脚本只需重新连接到服务器并下载其余图像。所以,我只是添加了额外的条件来检查ftp函数是否失败并重新连接并重试继续下载文件和图像。我没有强烈要求进一步查找并知道ftp会话或超时存在多长时间,或者这些问题是否与我的脚本有关。