【问题标题】:Why does PHP ftp_connect fail when the server is running?为什么服务器运行时 PHP ftp_connect 失败?
【发布时间】:2014-02-16 03:59:00
【问题描述】:

一段时间以来,我一直在尝试通过 FTP 连接到我的服务器,但似乎无法正常工作。

$connection_id = ftp_connect("example.com", 22);

运行此代码时,它会挂起一段时间,直到 PHP 最终告诉我脚本执行时间过长并退出。它不会失败并返回 FALSE。它只是超时。

我的第一直觉是服务器可能已关闭,因此我对其进行了 ping 操作。 ping 成功,我没有丢失任何数据包。然后我尝试使用相同的参数连接Filezilla,它能够连接。我也可以通过 SSH 连接到服务器。我什至尝试延长 PHP 允许脚本的执行时间,但它总是挂起并超时。

所以让我感到困惑的是,如果所有这些连接到服务器的方法都有效,那么为什么 ftp_connect() 函数不起作用?

澄清:

有些人想知道为什么我使用端口 22(SSH 端口)进行连接。我一开始尝试了 FTP 的默认端口(端口 21),但是 ftp_connect() 函数立即返回 FALSE,根据 PHP 手册,这意味着有一些错误。

我也无法通过端口 21 与 FileZilla 连接。所以我决定改用 SFTP 端口,即端口 22。在 FileZilla 中成功连接。

【问题讨论】:

  • FTP 服务器通常在端口 21。端口 22 通常是 SSH。
  • 听起来服务器没有运行 FTP 服务器。端口 22 不是 SFTP 端口,而是 SSH。也许您正在考虑通过 SSH 执行文件传输的 SCP。您不能为此使用 FTP 客户端。

标签: php ftp connection-timeout


【解决方案1】:

ftp_connect 不用于连接 SFTP 服务器。查看ssh2_sftp,它使用与标准 FTP 不同的方法。

【讨论】:

    【解决方案2】:

    第三个参数被添加到名为timeout 的函数中。尝试类似:

    $conn = ftp_connect('site', 22, 360);
    

    【讨论】:

    • I even tried extending the execution time PHP allows for the script but it always hangs up and times out. - OP 已经尝试过了。
    • @AmalMurali 有几种方法可以更改执行时间(或超时),他从未指定哪一种。
    • @julienhavesano 感谢您的意见。我实际上在脚本开头使用了 PHP 函数 set_time_limit() 来设置执行时间限制。在 ftp_connect() 函数中指定它是否会产生重大影响?
    • @Jamil 我认为值得一试,可能唯一真正停止连接的是超时。默认情况下它设置为 90,因此除非服务器非常慢,否则您不需要设置它。
    • @julienhaversano 我已将脚本时间和 ftp_connect() 的超时时间都延长到 5 分钟以上。这一次,使用端口 22,我从函数中得到了一个决定性的失败,而不是超时。这是一些进步(我认为),但它仍然不能解释为什么它不能连接,而 FileZilla 可以。令人费解。
    【解决方案3】:

    也许你可以尝试使用“IP”地址而不是整个字符串。

    【讨论】:

    • 如果您可以 ping 主机名,将其更改为使用 IP 地址不会有任何作用。
    猜你喜欢
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多