ftp_fget():服务器无法接受随机读取的参数

时间:2014-03-13 21:57:52

标签: php iis ftp

我使用ftp_connect和ftp_login连接到FTP。

    $this->connID = ftp_connect($this->host, 21, static::FTP_TIMEOUT);
    if (!$this->connID) {
        throw new \Exception('Connection to FTP: '. $this->host .' failed.');
    }       

    $loginResult = ftp_login($this->connID, $this->username, $this->password);
    if(!$loginResult) {
        throw new \Exception('Auth for FTP user ' .$this->username. ' failed.');
    }

之后,我使用下面的命令集检查是否存在DIR。

    $resultPwd = ftp_pwd($this->connID);
    if ($resultPwd===false) {
        throw new \Exception ('Command ftp_pwd failed.');
    }

    $resultChdir = ftp_chdir($this->connID, $this->filesDir);
    if ($resultChdir===false) {
        throw new \Exception ('ftp_chdir failed, its most likely that directory: ' .$this->filesDir . ' does not exists');
    }

    $resultChdirBack = ftp_chdir($this->connID, $resultPwd);
    if ($resultChdirBack===false) {
        throw new \Exception ('Directory test failed, coult not set back directory to: '. $resultChdirBack);
    }

之后我得到了以下代码的文件列表(大约200个):

$arrFilePath= ftp_nlist($this->connID, $this->filesDir);

之后我迭代文件并阅读它们:

$resultGet = ftp_fget($this->connID, $fhTemp, $remoteFilePath, FTP_ASCII);

问题是,在读取了未知数量的文件后,ftp_fget失败了,我得到了:

Warning: ftp_fget(): Server cannot accept argument.

我也尝试过每个文件迭代来关闭连接并再次打开它,但它没有解决问题。

我还尝试设置被动连接,但我的FTP服务器似乎无法正常使用被动模式,因为切换到被动模式后每个命令都会失败。

此外,我将超时时间增加到15秒。

可能出现什么问题?

感谢。

1 个答案:

答案 0 :(得分:0)

我快速浏览了PHP FTP extension source code over at github。我没找到那个字符串。这让我相信消息不是来自PHP本身,而是来自FTP服务器。

我建议您在FTP服务器部分启用日志记录以检查问题,或者在脚本运行时使用Wiresharktcpdump查看实际的网络流量。

您应该在问题中添加转储的摘录。如果你发现了问题并解决了问题,请随时回答你自己的问题。