PHP ftp_put 返回“无法建立数据连接:连接被拒绝”

2024-02-27

我有一台通过 PHP 运行一些 FTP 的 PC,我知道它在 1-2 个月前还可以工作,但现在我返回它,发现该 PC 不再工作了。我知道我一直在使用电脑,但我想不出可能会发生什么变化。

PHP 抛出错误消息读取

无法建立数据连接:连接被拒绝

...当我使用ftp_put()功能。

我正在使用的缩减代码是:

<?php

$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);

$server="***.***.***.***";
$port=21; 
echo "<LI>Connecting to $server:$port<BR>";
$conn_id = ftp_connect($server,$port,9999999) or die("<BR>Unable to connect to ".$server.":$port server.");
if ( !$conn_id ) {
    $errmsg = $php_errormsg;
    echo "<BR><LI>ERR:$errmsg";
}
else {
    $passive=false;
    echo "<LI>Setting Passive Mode=$passive";
    ftp_pasv($conn_id, $passive);

    $user="*********";
    $pass="*********";
    echo "<LI>Connecting as $user/*****";
    if (!ftp_login($conn_id, $user, $pass)) { 
        $msg = "Failed to login to $selected_server as $user; <BR>check logincredentials in the Settings";
        echo "<BR><LI>$msg";

        $errmsg = $php_errormsg;
        echo "<LI>ERR:$errmsg";
        return $msg;
    }

    ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 10000);
    

    if (!@ftp_put($conn_id, "test.txt", "C:......test.txt", FTP_BINARY)) {
        echo "<BR><LI>ftp_put failed";

        $errmsg = $php_errormsg;
        echo "<LI>ERR:$errmsg";
    }
    echo "<HR>Done";
}
?>

作为网页运行时的输出是

Connecting to ***.***.***.***:21
Setting Passive Mode=
Connecting as *******/*****
ftp_put failed
ERR:ftp_put(): Unable to build data connection: Connection refused
Done

结果是ftp_put()给出错误消息并在服务器上留下具有正确文件名的零 (0) 字节文件。

奇怪的是

  1. 相同的代码/连接信息可以在另一台笔记本电脑上使用
  2. 推送文件时使用 FileZilla 可以正常使用相同的连接信息
  3. 该问题发生在多台服务器上(即,不仅仅是某一特定目的地出现问题)

另外,这似乎与被动模式没有任何关系(启用或不启用此模式都会失败)

请注意,我们看到端口 20 和 21 在ftp_close()用一个netstat -n在命令行上。 PHP 文档表明端口 20 是数据通道,但我们正在讨论存在问题的 INBOUND 问题(服务器到 PC)。添加防火墙规则以在 INBOUND 上打开端口 20 和 21 后,我可以看到 PHP 可以正常工作。但尚不清楚

  1. 为什么 PHP 需要端口 20(而 FileZilla 不需要),
  2. 为什么另一台电脑没有同样的问题(都是公司电脑,相同的型号/年龄/构造),以及
  3. 我应该使用什么防火墙修复程序(如果有)。

有没有人有什么建议?
Thanks
Abe


您正在使用主动 FTP 模式。在主动模式下,服务器尝试连接到客户端。在大多数网络配置中,这是不可能的,因为客户端计算机通常位于防火墙后面。

这就是服务器失败的原因:

无法建立数据连接:连接被拒绝

这是专门针对这种情况的 ProFTPD 错误消息。

请参阅我的文章主动和被动FTP连接模式 https://winscp.net/eng/docs/ftp_modes了解详情。


如果其他计算机禁用了防火墙或者具有允许非特权端口上的传入流量的规则,则该代码可以在其他计算机上运行。

FileZilla 之所以能够工作,是因为它默认采用被动模式(就像大多数现代 FTP 客户端那样)。


您声称也尝试过被动模式,但仍收到相同的错误消息。

那是因为你正在使用ftp_pasv调用错误。

你必须移动ftp_pasv call after the ftp_login.

$user = "*********";
$pass = "*********";
echo "<LI>Connecting as $user/*****";
if (!ftp_login($conn_id, $user, $pass)) { 
    // ...
}

$passive = true;
echo "<LI>Setting Passive Mode=$passive";
ftp_pasv($conn_id, $passive);

文档 https://www.php.net/manual/en/function.ftp-pasv.php明确表明:

请注意,ftp_pasv()只能在登录成功后调用,否则会失败。


对于类似的问题(仅使用 Pure-FTPd),请参阅通过 FTP 上传 PHP - ftp_put() 我不会打开到 x.x.x.x 的连接(仅到 y.y.y.y) https://stackoverflow.com/q/31819695/850848.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP ftp_put 返回“无法建立数据连接:连接被拒绝” 的相关文章

  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g
  • 很好地阻止了齿轮工人

    我有许多 Gearman 工作人员不断运行 保存用户页面浏览记录等内容 偶尔 我会更新 Gearman 工作人员使用的 PHP 代码 为了让工作人员切换到新代码 我杀死并重新启动了工作人员的 PHP 进程 有什么更好的方法来做到这一点 据推
  • 使用 strtotime() 计算时间差(以小时和分钟为单位)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions time1
  • 如何防止 CakePHP 中重复表单提交?

    我发现 CakePHP 中的安全组件通过将令牌作为隐藏值添加到表单中来帮助防止 CSRF 我想知道是否有办法防止使用此组件或其他组件 帮助器重复表单提交 在之前的项目中 我使用了保存在会话中的唯一哈希值 该哈希值会在提交时读取并删除 重复提
  • 根据数组计数填充复选框

    我是新来的php我已经使用了它的开发php array 我想填充checkboxes根据数组计数 为了做到这一点 我尝试了以下方式 它对我不起作用 有什么方法可以做到这一点 在我的例子中 数组计数 5 所以我相应地需要 5 个复选框
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • 从twitter api实体参数php获取图像url

    我正在尝试通过实体参数使用 php 获取并显示在推文中发布的图像 我的 url 中有 include entities 可以看到返回的 json 中的实体 在我的 foreach 循环中 我正在执行以下操作 foreach results
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • DOMPDF - 未找到“字体”类

    我正在尝试通过命令行添加字体 每次我尝试都会收到以下错误 Fatal error Class Font not found in home scripts public html MarketingPalv2 load font php o
  • 如何将参数传递给 Symfony2 中的验证约束 - 在 yml 中

    我正在尝试向我的应用程序添加一个包范围的参数 以便我可以将其添加到我的验证约束文件 validation yml 中 myApp myBundle Entity Contact properties name NotBlank messag
  • 在 Apache 服务器上将特定的 .htm 页面处理为 .php [重复]

    这个问题在这里已经有答案了 我正在为 Apache 服务器编程 并且只需要将一个特定的 html 页面 例如 first htm 作为 PHP 脚本进行处理 可以设置吗 SetHandler http httpd apache org do
  • 如何将 yii2 Restful api 中两个表的关系数据显示为 json 格式

    我遇到了将两个表中的数据显示为 JSON 格式并在 yii2 Restful api 上工作的问题 这是我的结构数据库 TABLE volunteer volunteer id int 11 NOT NULL auto increment
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 与 array_intersect 相反?

    是否有一个内置函数可以获取数组 1 中不存在于数组 2 中的所有成员 我知道如何以编程方式执行此操作 只是想知道是否有一个内置函数可以执行相同的操作 所以请不要提供代码示例 这听起来像是一份工作array diff http www php
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 禁用/启用用户访问/下载,但允许 php 编辑 - 使用 chown 和 chmod

    我想 move uploaded files到某个文件夹 比方说http localhost myproject protected 并且 PHP 应该能够rm mv cp 里面的一切protected 例如 启用 禁用用户对任何文件的访问

随机推荐

  • 使用入口点console_script进行Python包分发

    我准备部署一个具有以下布局的 Python 包 MyPackage setup py MyPackage init py main py lib init py utils py db init py db1 py db2 py tasks
  • 使用另一个表中的随机值更新 MySQL 表的最佳方法

    对于这个 伪代码 示例 我在 MySQL 中有两个表 member id name names name 会员人数100人 姓名10人 我想使用名称中的随机名称来更新成员表 到目前为止我已经得到了这个 但是不确定是否有更好的方法来实现它 U
  • 在 Swift 中的 WebService 中传递参数

    我正在学习 Swift 但不知道如何使用 Swift 向服务器发送参数 在 Objective C 中我们可以通过使用来做到这一点 作为占位符 但是对于 Swift 应该怎么做 假设我有一个需要电子邮件和密码的登录 Web 服务 现在我想知
  • 如何在android中根据材料设计制作Cardview?

    我看到了有关材料设计指南 但它有点混乱 当我设计我的卡片时 左侧有图像 图像右侧有一些文字 但我不满意它是否符合指南 请检查并告诉 我还希望我的虚拟文本段落合理 这是我的代码
  • 是否可以在 Google 地图或 Google 地球中显示 3D 数据?

    我正在尝试找到一种有效的方法来可视化一些现实世界传感器测量不同高度风速的反馈 有谁知道在谷歌地图中显示3D数据是否可行 我想象着指示方向和风速的 3D 箭头 如果可以加载模型并将其定位到特定的 GPS 位置 高度 然后更改其方向以指向特定的
  • 如何在 Python 中将字符串转换为转义序列? [复制]

    这个问题在这里已经有答案了 如果我有一个包含四个字符的字符串 例如 xf0 我如何将其转换为转义序列 xf0 我正在使用Python 3 4 编辑 我试图将字符串转换为字符串值代表的字符 您要做的就是解释原始字符串中的转义序列 以获取相应的
  • 清晰高效的 3D 范围树实现

    我正在做这个项目 我必须在 3d 空间中搜索对象 我认为效率是一个巨大的问题范围树非常适合我想要做的事情 间隔树也可以工作 但我不会从树中删除任何内容 一旦我在 3D 空间中添加每个对象 我只会使用该结构进行搜索 以下是我将如何使用该结构
  • 在不同的 Excel 文件中使用一个宏

    我写了一个宏 我想在不同的Excel文件中使用它 这些文件具有几乎相同的表结构但不同的数据 那么是否有可能将我的宏脚本 包含 到任何 Excel 文件中 我已经读过this tip https web archive org web 201
  • PHP 和 PDO:一个连接与多个连接

    在我的 PHP 程序中 我需要针对任何给定的网页请求访问数据库 0 到 3 次 我正在使用 PDO 与 MySQL 交互 首先 我使用如下内容创建一个数据库连接 dbh new PDO mysql host hostname dbname
  • 辅助功能、字段集图例和标题标签

    我正在开发的网站的一个要求是它必须符合 508 标准 目前我们大多数的 html 视图都以 header 开头h1然后该视图中需要的任何内容 现在对于表单 建议使用fieldsets and legend除其他众多准则外 在处理可访问性时也
  • 谷歌分析是否将裸域与 www 子域结合起来?

    我为自己的域安装了谷歌分析 http mydomain com 输入的用户是否会http www mydomain com也被分析脚本计算在内吗 对我来说 这似乎是合乎逻辑的 因为裸域地址与 www 前缀的站点位于同一站点是很常见的 但分析
  • 重置被拒绝的 HTML 通知

    我有一个网络应用程序 在其中使用 HTML 通知 如果用户第一次允许它并开始使用它 它工作正常 但是如果用户第一次通过单击阻止按钮阻止通知 然后尝试通过某些用户手势再次请求权限 则浏览器不会触发 允许 阻止 弹出窗口 这是我第二次触发许可
  • 按键时的 JTable 编辑

    我正在尝试以编程方式开始编辑当前行的第三列JTable在按键上 我已经实现了一个 KeyListener 其中keyReleased 包含这段代码 if e getKeyCode KeyEvent VK ENTER myTab change
  • 在 Powershell 中优雅地停止

    How do I catch and handle Ctrl C in a PowerShell script I understand that I can do this from a cmdlet in v2 by including
  • JVM 何时抛出 OutOfMemoryError

    我们正在运行一个有时会 冻结 的 Java 应用程序 因为某些线程正在使用几乎所有堆 尽管 JVM 执行的 Full GC 持续了 60 秒以上 但应用程序从未因 OutOfMemoryError 错误而终止 我从 Java 文档中读到 如
  • amqp 与 amqplib - 哪个 Node.js amqp 客户端库更好?

    这些 amqp 客户端库之间有什么区别 哪一款最值得推荐 主要区别是什么 我会推荐amqp node https github com squaremo amqp node and bramqp https github com bakke
  • Json.Net 没有以相同的方式序列化小数两次

    我正在测试我正在处理的购物车的 Json NET 序列化 并注意到当我序列化 gt 反序列化 gt 再次序列化时 我发现某些文件的尾随零格式有所不同decimal字段 这是序列化代码 private static void TestRoun
  • 检测 Excel 设置的语言并将其显示在文件的单元格中

    我正在设计一组它们之间相关的相关Excel文件 目标是引用彼此文档的宏可以在任何给定的计算机 路径中工作 因此 我使用了一组相对路径 使宏能够正常工作 我使用了以下功能 CELDA nombrearchivo A 1 nombredearc
  • UIPasteboard 字符串从 Today 扩展返回 null

    似乎在 iOS 9 Xcode 7 beta 5 中 我无法访问 UIPasteboard generalPasteboard string 来自我的 今日 小部件扩展 因为每次无论内容如何 它都会返回 NULL 我浏览了发行说明 但没有看
  • PHP ftp_put 返回“无法建立数据连接:连接被拒绝”

    我有一台通过 PHP 运行一些 FTP 的 PC 我知道它在 1 2 个月前还可以工作 但现在我返回它 发现该 PC 不再工作了 我知道我一直在使用电脑 但我想不出可能会发生什么变化 PHP 抛出错误消息读取 无法建立数据连接 连接被拒绝