我们得到了这个错误:
警告: /home/USER/public_html/SCRIPT/fetch_scripts/noose.php ():无法打开到端口51461的数据连接:连接超时在第39行的ftp_get中
第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");
?>发布于 2015-05-18 17:25:07
正如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,因此不需要显式映射。
资料来源:
https://stackoverflow.com/questions/30308988
复制相似问题