假设存在一个简单的网站,将用户图像托管在多个图像共享网站上,以确保一台服务器宕机不会损害用户页面的完整性。
是否可以使用 PHP(也许使用
Thread
、curl
或 proc_open
?)来确定哪些图像托管站点已启动,并使用产生最快图像传输的主机来显示图像?
我使用 php 的 fsockopen() 函数读取第一行(标题)并检查 404 或 302 等错误状态以确定文件是否存在。确实又快又高效。 php.net 上有关于如何使用 fsockopen 的很棒的文档。 $path contains 包含图像的文件名。
$fp = @fsockopen($domain, 80, $errno, $errstr, 1);
if ($fp) {
$out = "GET $path HTTP/1.1\r\n";
$out .= "Host: $domain\r\n";
$out .= "Connection: Close\r\n\r\n";
...
}
如果您希望客户端直接从托管服务商请求图像,那么了解您的服务器可以访问哪个图像托管服务商的作用有限。
这意味着您有两个可靠的选择:
我建议您研究第二个选项,通过 PHP 提供可能的图像 URL 列表,然后在客户端上使用 JS 尝试加载,直到成功(或列表耗尽)。随机值和概率阈值的组合还可以使您的客户端脚本在加载失败时“打电话回家”,这样您就可以在服务器端重新排序您的 URL 列表。