6

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

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

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

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

4

3 回答 3

4

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

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

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

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

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

  2. 您可以登录到服务器:

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

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

于 2008-08-12T13:07:00.117 回答
0

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

于 2008-08-12T12:19:34.300 回答
0

如果要读取特定响应,则必须手动打开套接字并读取/写入数据。

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

然后你必须来回输入/读取数据。
这将需要您阅读 FTP 协议。

于 2008-08-12T17:56:54.370 回答