2015-05-18 24 views
0

我們收到此錯誤:如何指定在PHP代碼中的端口

Warning: ftp_get(): Could not open data connection to port 51461: Connection timed out in /home/USER/public_html/SCRIPT/fetch_scripts/noose.php on line 39

第39行:

ftp_get($CONNECTION_ID, '../ftp-in' . $SAVE_DIRECTORY . "/" . $SAVE_FILE_AS, $FTP_REMOTE_FILENAME, FTP_ASCII); 

但最初的FTP設置如下,有沒有辦法來映射端口需要21這個網站?

<? 
ini_set("display_errors", "1"); 
error_reporting(-1); 
//-------SYSTEM COMMANDS-------// 
set_time_limit(0); 
$start_time = time(); 

//-------CONFIGURE START-------// 
$remote_server = 'ftp.SITE.com'; 
$remote_username = 'SITEFEED'; 
$remote_password = 'PASSWORD'; 
$remote_file = 'DATA.csv'; 
$local_save_path = '/DIRECTORY'; 
$local_save_filename = 'FILE.txt'; 
//-------CONFIGURE END-------// 
//-------EXECUTION CODE-------// 
fetch($remote_server,$remote_username,$remote_password ,$remote_file,$local_save_path, $local_save_filename); 
//-------FUNCTIONS-------// 
function fetch($FTP_SERVER,$FTP_USERNAME,$FTP_PASSWORD,$FTP_REMOTE_FILENAME,$SAVE_DIRECTORY,$SAVE_FILE_AS){ 
//MAKE CONNECTION... 
$connected = 1; 
$CONNECTION_ID = ftp_connect($FTP_SERVER); 
if(!($CONNECTION_ID)){ 
    echo "<font color = 'red'>Could not connect to FTP_SERVER: " . $FTP_SERVER . ".</font><br>"; 
    $connected = 0; 
} 
$login_result = ftp_login($CONNECTION_ID,$FTP_USERNAME,$FTP_PASSWORD); 
if((!$login_result)){ 
    echo "<font color = 'red'>Check FTP_USERNAME & FTP_PASSWORD for " . $FTP_SERVER . ".</font><br>"; 
    $connected = 0; 
} 
//IF CONNECTED... 
if($connected == 1){ 
    if(!is_dir('../ftp-in' . $SAVE_DIRECTORY)) { mkdir('../ftp-in' . $SAVE_DIRECTORY); } 
    ftp_get($CONNECTION_ID, '../ftp-in' . $SAVE_DIRECTORY . "/" . $SAVE_FILE_AS, $FTP_REMOTE_FILENAME, FTP_ASCII); 
} 
} 
echo "<table><tr><Td><b>PAL FTP File Downloaded:</b></td><td>ftp-in/DATA/FILE.txt</td><td><i>Total Time: " . (time() - $start_time) . " seconds.</i></td></tr>"; 
$start_time = time(); 
include("../db_import_scripts/pal_db_import.php"); 
?> 
+1

端口21是FTP控制連接的默認。該錯誤可能是指使用臨時端口的數據連接。 – Barmar

+0

以下是確切代碼:<嘗試添加但太長> –

+0

請勿嘗試在註釋中放置代碼,編輯問題。 – Barmar

回答

1

正如Barmar指出的那樣,產生錯誤的端口號是用於FTP傳輸的本地/臨時端口。當您連接到端口21上的遠程FTP服務器時,在本地給您一個臨時端口用於TCP連接,在您的情況下是51461.這表示FTP服務器可能無法連接回您。

如果你確信你正在連接的FTP服務器的有效/活動/能夠接受連接,然後嘗試使用下面的代碼進行連接:

<?php 

$local_file = 'local.zip'; 
$server_file = 'server.zip'; 

// setup connection 
$conn_id = ftp_connect($ftp_server); 

// login 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// try to download $server_file and save to $local_file 
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) 
{ 
    echo "Successfully written to $local_file\n"; 
} 
else 
{ 
    echo "There was a problem\n"; 
} 

ftp_close($conn_id); 

?> 

如果不工作您可能需要驗證有狀態防火牆是否阻止本地端口接受從FTP服務器返回的連接。嘗試禁用所有防火牆,然後重試。

另外,關於'映射到端口21'的問題。如果你建立一個FTP連接並且不指定一個端口,那麼假定你將使用端口21,所以不需要顯式映射。

來源:

  1. http://php.net/manual/en/function.ftp-get.php
+0

完美,將嘗試。這只是因爲我們將名稱服務器移動到該域的cloudflare - 很好的保護,很好的中斷。謝謝! –