我目前有一个脚本,它使用curl来检查每次用户访问页面时大约3000个图像的文件大小。这是因为每次内容可能会改变。PHP比curl更快检查远程图像文件大小约3000倍?
如果它匹配7442字节的大小,它会更改图像的路径,如果不是,则保持它的源。
图像URL存储在$ variable,mysql以及远程和本地xml文件中。但图像自身总是远程存储。
$image = 'http://remoteserver.com/user22.jpg';
//Check if all thumbs are ok real and available
$ch = curl_init($image);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
if($size == 7442){
echo '<img src="https://www.newdomain.com/tmp.jpg" height="190.11"/></a>';
} else {
echo '<img src="' . $image . '" alt="' . $user . '" /></a>';
}
当它被激活时,页面大约需要40秒加载,当它被注释掉时,它需要3秒钟。但是每次用户访问网页时都会执行该操作,或者如果在向mysql添加数据并在mysql中更改地址之前执行curl操作,会导致将该信息加载到该mysql的大量延迟,从而无法显示所有图像。
我知道有很多取决于这个检查,这两个服务器响应时间,PHP配置等等..但我真的需要这个图像文件检查工作,并且不能有40秒的加载时间每次用户访问该页面。
任何建议/帮助?谢谢
将其作为后台进程运行,而不是作为Web请求的一部分 –
您可以使用memcache或其他方式来存储图像URL重新路由的集合。定期后台服务(PHP脚本)可以定期运行以检查文件大小并将重新路由的URL添加到memcache。您可以获取在memcache中查找的函数的图像URL,如果找到则返回键,否则返回原始URL。 – jcorry
谢谢Mark Baker和Jcorry。原来的url实际上存储在mysql中,但只有url,没有大小信息。这将消除对memcache的需求? –