使用 PHP 脚本检查 FTP 状态代码
-
08-06-2019 - |
题
我有一个使用 PEAR HTTP 类检查来自 HTTP 服务器的响应的脚本。但是,我最近发现该脚本在 FTP 服务器(可能还有非 HTTP 或 HTTPS 的任何服务器)上失败。我尝试了 Google,但没有看到任何从 HTTP 服务器以外的服务器返回服务器状态代码的脚本或代码。
如何使用 PHP 找出新闻组或 FTP 服务器的状态?
编辑:我应该澄清一下,我只对从 FTP 服务器和我指定的目录中读取数据的能力感兴趣。我需要知道服务器是否已死亡/消失,我无权阅读等。
请注意,虽然大多数时候我与语言无关,但整个网站都是 PHP 驱动的,因此 PHP 解决方案将是未来易于维护和扩展的最佳解决方案。
解决方案
不幸的是,HTTP 的工作方式与 FTP 略有不同。尽管两者在浏览器中看起来可能相同,但 HTTP 是在 URI 的基础上工作的(即要访问资源 A,您有一个标识符告诉您如何访问它)。
FTP 是非常老式的服务器驱动。即使是匿名 FTP 也有点黑客行为,因为您仍然提供用户名和密码,它只是被定义为“匿名”和您的电子邮件地址。
检查 FTP 服务器是否启动意味着检查
您可以连接到 FTP 服务器
if (!($ftpfd = ftp_connect($hostname))) { ... }
您可以登录服务器:
if (!ftp_login($ftpfd, $username, $password)) { ... }
然后,如果您需要访问更多底层资源来测试特定站点是否正常运行,请对它们使用适当的操作。例如在文件上,也许使用
ftp_mdtm()
要获取目录的最后修改时间,请查看是否ftp_nlist()
作品。
其他提示
使用内置的 PHP FTP* 功能不是比尝试推出自己的功能更简单吗?如果 URI 来自您无法控制的来源,您需要检查协议定义(http:// 或 ftp:// 等)以确定要使用哪个功能,但这相当简单。如果现在指定了协议(确实应该有!),那么您可以尝试默认为 http。
- 看 这里
如果您想读取特定响应,则必须打开套接字并手动读取/写入数据。
<?php
$sock = fsockopen($hostname, $port);
?>
然后你必须来回 fput/fread 数据。
这将要求您阅读 FTP 协议。