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

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

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

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

有帮助吗?

解决方案

不幸的是,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* 功能不是比尝试推出自己的功能更简单吗?如果 URI 来自您无法控制的来源,您需要检查协议定义(http:// 或 ftp:// 等)以确定要使用哪个功能,但这相当简单。如果现在指定了协议(确实应该有!),那么您可以尝试默认为 http。

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

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

然后你必须来回 fput/fread 数据。
这将要求您阅读 FTP 协议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top