首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php代码中指定端口

如何在php代码中指定端口
EN

Stack Overflow用户
提问于 2015-05-18 17:00:29
回答 1查看 1.6K关注 0票数 0

我们得到了这个错误:

警告: /home/USER/public_html/SCRIPT/fetch_scripts/noose.php ():无法打开到端口51461的数据连接:连接超时在第39行的ftp_get中

第39行:

代码语言:javascript
复制
ftp_get($CONNECTION_ID, '../ftp-in' . $SAVE_DIRECTORY . "/" . $SAVE_FILE_AS, $FTP_REMOTE_FILENAME, FTP_ASCII);

但是最初的ftp设置如下所示,是否有方法将端口映射到此站点所需的21?

代码语言:javascript
复制
<?
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");
?>
EN

回答 1

Stack Overflow用户

发布于 2015-05-18 17:25:07

正如Barmar所指出的,生成错误的端口号是用于FTP传输的本地/临时端口。当您连接到端口21上的远程FTP服务器时,本地会给您一个临时端口,以便在TCP连接中使用,在您的情况下,这个端口是51461。这表示FTP服务器可能无法连接回您。

如果您确信正在进行连接的FTP服务器是有效的/活动的/能够接受连接,那么尝试使用以下代码进行连接:

代码语言:javascript
复制
<?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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30308988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档