【发布时间】:2018-03-23 02:24:11
【问题描述】:
我目前有一个脚本,每次用户访问该页面时,该脚本使用 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 添加到内存缓存。您将获得一个函数的图像 URL,该函数在 memcache 中查找,如果找到则返回密钥,否则返回原始 URL。
-
谢谢 Mark Baker 和 Jcorry。原来的 urls 实际上是存储在 mysql 中的,但只有 url,没有大小信息。那将消除对 memcache 的需求?
标签: php mysql curl http-headers filesize