我使用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秒。
可能出现什么问题?
感谢。
答案 0 :(得分:0)
我快速浏览了PHP FTP extension source code over at github。我没找到那个字符串。这让我相信消息不是来自PHP本身,而是来自FTP服务器。
我建议您在FTP服务器部分启用日志记录以检查问题,或者在脚本运行时使用Wireshark或tcpdump查看实际的网络流量。
您应该在问题中添加转储的摘录。如果你发现了问题并解决了问题,请随时回答你自己的问题。