2014-03-13 40 views
2

我使用ftp_connect和ftp_login連接到FTP。ftp_fget():服務器無法接受隨機讀取參數

$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

你可以通過pastebin或其他東西附上完整的代碼。我可以連接到我的ftp服務器並嘗試重新生成相同的問題。 – Jigar

回答

0

我快速查看了PHP FTP extension source code over at github。我沒有找到那個字符串。這使我相信這個消息不是來自PHP本身,而是來自FTP服務器。

我建議您在FTP服務器部分啓用日誌記錄以檢查問題,或者在腳本運行時使用Wiresharktcpdump查看實際網絡流量。

您應該將轉儲的摘錄添加到問題中。如果你找出問題並解決問題,請隨時回答你自己的問題。

相關問題