【问题标题】:Checking FTP status codes with a PHP script使用 PHP 脚本检查 FTP 状态代码
【发布时间】:2010-09-05 17:48:30
【问题描述】:

我有一个脚本,它使用 PEAR HTTP 类检查来自 HTTP 服务器的响应。但是,我最近发现该脚本在 FTP 服务器(以及可能不是 HTTP 或 HTTPS 的任何服务器)上失败。我尝试了 Google,但没有看到任何从 HTTP 服务器以外的服务器返回服务器状态代码的脚本或代码。

如何使用 PHP 找出新闻组或 FTP 服务器的状态?

编辑:我应该澄清一下,我只对从 FTP 服务器和我指定的目录进行读取的能力感兴趣。我需要知道服务器是否已死/消失、我无权阅读等。

请注意,尽管大多数时候我与语言无关,但整个网站都是 PHP 驱动的,因此 PHP 解决方案将是未来易于维护和扩展的最佳解决方案。

【问题讨论】:

    标签: php http ftp pear server-response


    【解决方案1】:

    使用内置的 PHP FTP* 功能会不会比尝试使用自己的功能更简单?如果 URI 来自您无法控制的来源,则需要检查协议定义(http:// 或 ftp:// 等)以确定要使用的功能,但这很简单。如果现在指定了协议(确实应该有!),那么您可以尝试默认为 http。

    【讨论】:

      【解决方案2】:

      不幸的是,HTTP 的工作方式与 FTP 略有不同。尽管两者在您的浏览器中看起来相同,但 HTTP 是在 URI 的基础上工作的(即,要访问资源 A,您有一个标识符来告诉您如何访问它)。

      FTP 是非常老式的服务器驱动的。即使是匿名 FTP 也有点像黑客,因为您仍然提供用户名和密码,它只是定义为“匿名”和您的电子邮件地址。

      检查 FTP 服务器是否启动意味着检查

      1. 你可以连接到 FTP 服务器

        if (!($ftpfd = ftp_connect($hostname))) { ... }

      2. 您可以登录服务器:

        if (!ftp_login($ftpfd, $username, $password)) { ... }

      3. 然后,如果您需要访问更多底层资源以测试特定站点是否已启动,则对它们使用适当的操作。例如在文件上,可能使用ftp_mdtm() 获取最后修改时间或在目录上,查看ftp_nlist() 是否有效。

      【讨论】:

      • 需要注意的是,默认情况下,PHP编译时这些FTP功能是没有开启的,至少在我使用的系统上是这样。
      【解决方案3】:

      如果您想读取特定的响应,您将必须打开一个套接字并手动读取/写入数据。

      <?php
      $sock = fsockopen($hostname, $port);
      ?>
      

      然后您将不得不来回地 fput/fread 数据。
      这需要您阅读 FTP 协议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 2020-11-23
        • 1970-01-01
        • 2016-12-29
        • 2013-12-14
        • 2012-12-22
        相关资源
        最近更新 更多