我正在使用SmartFile来存储用户提交的文件。要在网站上显示图像文件,我只能链接到它们,但如果文件丢失,我无法选择显示默认图像。或者防止热链接。或者设置浏览器缓存等。
他们的API被限制为每分钟180个请求。因此,在繁忙的网站上显示图像并不好。
我已尝试使用get_headers
检查预期的文件是否存在,然后file_get_contents
,如果确实存在,但这非常缓慢且效率低下。只使用file_get_contents
而不使用get_headers
首先非常慢!
这里最好的选择是什么?我还没有尝试使用curl
。我想我只能通过一个请求来获取标题和文件,但由于file_get_contents
很慢,我想卷曲不会更快。
答案 0 :(得分:0)
您可以通过JavaScript在浏览器中加载和检查。因此,您的应用程序只是将链接传递给文件,用户将看到 loading 图像,而JavaScript将检查图像是否存在。
使用jQuery的示例:
<img src="loading.gif">
<script>
$.ajax({
type: 'HEAD',
url: 'http://example.com/image.jpg',
success: function() {
$('img').attr('src','http://example.com/image.jpg');
},
error: function() {
}
});
</script>
如果您不需要隐藏图片路径,则无需使用 file_get_contents 加载图片。
您还可以使用一些数据库表来缓存图像地址。如果链接仍然有效或已损坏,请每小时检查一次。如果它被破坏,您将在该数据库中将该图像的URL更改为 missing.jpg 。
您还可以考虑从 smartfile 迁移到DropBox或其他服务。
答案 1 :(得分:0)
尝试从其他网站抓取图片,是的,使用file_get_content
<?php
if(!isset($_GET['read'])){
$url = "http://mangaku.web.id/baca-komik-naruto-terbaru-bahasa-indonesia/";
$input = @file_get_contents($url) or die("Could not access file: $url");
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
if (strpos($match[2],'chapter')!== false OR strpos($match[3],'naruto-chapter')!== false) {
echo "<a href='http://localhost/mangaku.php?read=".$match[2]."'>".$match[3]."</a><br>";
}
}
}
}
if(isset($_GET['read'])){
$url = $_GET['read'];
$input = @file_get_contents($url) or die("Could not access file: $url");
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
if (strpos($match[2],'bp.blogspot.com') !== false) {
echo "<center><image src='".$match[2]."'></center><br>";
//echo $match[2]."<br>";
}
}
}
}
?>