从FTP下载文件失败


Downloading files from FTP failing

在我来这里发布问题之前,我检查了其他一些答案,我在下面的脚本中遇到了问题,无论我尝试了什么,它都不会从FTP下载文件,即使列出了目录中的文件(显然)

因为我很有条理,我喜欢把所有的东西都简化成一个类,

class FTPHandler
{
    private $connection;
    public function FTPConnect($host, $user, $pass)
    {
        $ftp = ftp_connect($host);
        $login = ftp_login($ftp, $user, $pass) or die("FTP: Login Failed");
        if ($login) {
            $this->connection = array("host" => $host, "user" => $user, "pass" => $pass);
            return $ftp;
        }
        echo "FTP Login Failed";
    }
    public function ListAllFiles($stream, $dir)
    {
        ftp_pasv($stream, true);
        $ls = ftp_nlist($stream, $dir);
        return $ls;
    }
    public function get_conx_info() {
        return $this->connection;
    }
}

使用以下代码:

define("APP_DIR", "./app/");
$ftp = new FTPHandler();
$handle = $ftp->FTPConnect("ftp.example.com.au", "exampleuser", "examplepass");
$files = $ftp->ListAllFiles($handle, APP_DIR);
foreach ($files as $val)
{
    if ($val != "." && $val != ".." && $val != "processed") {
        $local_file     =   $val;
        $remote_file    =   APP_DIR.$val;
        if (ftp_get($handle, $local_file, $remote_file)) {
            echo "Successfully retrieved: $remote_file <br/>";
        }
        else
        {
            echo "Failed retrieving file: $remote_file <br/>";
        }
    }
}

我的回报总是:

Failed retrieving file: ./app/adsl-1989-csv.csv 
Failed retrieving file: ./app/adsl-1989-sig.png 
Failed retrieving file: ./app/dd-1964-csv.csv 
Failed retrieving file: ./app/dd-1964-sig.png 
Failed retrieving file: ./app/dd-1967-csv.csv 
Failed retrieving file: ./app/dd-1967-sig.png 
Failed retrieving file: ./app/dd-1972-csv.csv 
Failed retrieving file: ./app/dd-1972-sig.png 
Failed retrieving file: ./app/dd-1973-csv.csv 
Failed retrieving file: ./app/dd-1973-sig.png 
Failed retrieving file: ./app/dd-1974-csv.csv 
Failed retrieving file: ./app/dd-1974-sig.png 
Failed retrieving file: ./app/dd-1975-csv.csv 
Failed retrieving file: ./app/dd-1975-sig.png 
Failed retrieving file: ./app/dd-1978-csv.csv 

我们非常感谢您的任何帮助,因为我必须将其自动化,以减少每周数千人的员工预算。

我最终发现FTP服务器本身有故障。

该错误是通过从默认的活动端口更改来修复的,因为它正在丢弃大部分数据包。

因此,如果有人遇到同样的问题,值得一试。

感谢Fred-ii-的帮助。