2010-10-28 96 views
1

我嘗試使用ftp_get() 檢索的文本文件,當我執行該腳本,我得到警告:獲取有關ftp_get警告()在PHP

ftp_get() [function.ftp-get]: Can't open data connection 

一些人能給出一些線索,什麼是錯的。這是我以前的託管/服務器,因爲我把它打破了。是否有一些特定的PHP配置。我檢查了phpinfo並啓用了FTP支持。 連接獲取資源ID,用戶名,密碼和ftp主機通過CuteFTP工作。

function _getFtpFile($fileName = '') { 
    if($fileName == '') { 
     return false; 
    } 

    $model = $this->getModel(); 
    $params =& $model->getParams(); 

    $vebraHost = $params->get('vebra_host'); 
    $vebraUser = $params->get('vebra_username'); 
    $vebraPass = $params->get('vebra_password'); 
    $localFile = JPATH_BASE.'/tmp/tmp.csv'; 

    // Delete the file in case it exists 
    @unlink($localFile); 

    // set up basic connection 
    $connId = ftp_connect($vebraHost); 

    // login with username and password 
    $loginResult = ftp_login($connId, $vebraUser, $vebraPass); 

    // turn on passive mode transfers 
    ftp_pasv($connId, true); 

    // try to download $server_file and save to $localFile 
    if (!ftp_get($connId, $localFile, $fileName, FTP_BINARY)) { 
     $file = false; 
    } else { 
     $file = $localFile; 
    } 

    // close the connection 
    ftp_close($connId); 

    return $file; 
} 

回答

5

說實話,這聽起來像一個FTP的問題,而不是一個PHP的問題,作爲一個「無法打開數據連接」是一個FTP錯誤425,這是一個FTP協議級的錯誤。 FTP服務器可能導致很多問題,特別是錯誤配置的問題。

如果我猜,我會說,問題在於FTP服務器的配置中,可能在主動/被動設置,但可能在他們的防火牆設置的地方。它也可能存在於你的,但似乎不太可能,因爲你仍然可以通過CuteFTP連接。

是FTP服務器的遠程服務器,或者是腳本託管在同一個?如果它們相同,很可能會有港口衝突。我會聯繫您的主機的支持,看看他們是否認識到這是一個問題。

1

它可能是PHP沒有權限寫入'lgw'子目錄。

什麼是該目錄的權限?

+0

權限是755 – infinity 2010-10-28 17:26:03