gpt4 book ai didi

PHP 有什么比curl 更快的方法来检查远程图像文件大小大约3000 倍?

转载 作者:行者123 更新时间:2023-11-29 18:19:49 25 4
gpt4 key购买 nike

我目前有一个脚本,每次用户访问该页面时,都会使用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 秒的加载时间用户访问该页面的时间。

有什么建议/帮助吗?谢谢

最佳答案

正如其他人在评论中建议的那样,我将创建一个后台进程来检查文件大小并更新 mysql,完全独立于页面请求。如果多个用户请求相同的图像,这会更有效。

但是,如果确实需要在页面加载时完成,获得更好用户体验的另一个选择是从浏览器进行检查。使用存储的图像路径加载页面,然后使用 JS 请求文件大小并根据需要更改图像路径。例如

var images = document.getElementsByTagName('img'); 
for(var i = 0; i < images.length; i++) {
var xhr = new XMLHttpRequest();
xhr.open("HEAD", images[i].src, true);
xhr.onreadystatechange = function() {
if (this.readyState == this.DONE) {
if (parseInt(xhr.getResponseHeader("Content-Length"))) === 7442) {
images[i].src = 'https://www...'; // New path
}
}
};
xhr.send();
}

(未经测试,但您明白了。改编自 another SO answer 。)

当这一切完成后,您可以向您的 Web 应用程序发送一个 AJAX POST 来更新 MySQL(如果需要)。另请记住,这将尝试向托管图像的服务器发出许多并发请求,因此可能会对性能产生影响。

关于PHP 有什么比curl 更快的方法来检查远程图像文件大小大约3000 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com