加载远程存储文件的PHP方法
我正在使用存储用户提交的文件。要在站点上显示图像文件,我可以直接链接到它们,但如果文件丢失,我就没有选择显示默认图像。或防止热链接。或设置浏览器缓存等 他们的API限制为每分钟180个请求。因此,在繁忙的站点上显示图像是没有好处的 我曾尝试使用加载远程存储文件的PHP方法,php,curl,file-get-contents,get-headers,Php,Curl,File Get Contents,Get Headers,我正在使用存储用户提交的文件。要在站点上显示图像文件,我可以直接链接到它们,但如果文件丢失,我就没有选择显示默认图像。或防止热链接。或设置浏览器缓存等 他们的API限制为每分钟180个请求。因此,在繁忙的站点上显示图像是没有好处的 我曾尝试使用get\u headers检查预期文件是否存在,如果存在,则检查file\u get\u contents,但这非常缓慢且效率低下。只需先使用file\u get\u contents而不使用get\u headers是非常慢的 我最好的选择是什么?我还没
get\u headers
检查预期文件是否存在,如果存在,则检查file\u get\u contents
,但这非常缓慢且效率低下。只需先使用file\u get\u contents
而不使用get\u headers
是非常慢的
我最好的选择是什么?我还没有尝试使用
curl
。我想我只需要一个请求就可以得到标题和文件,但是由于file\u get\u contents
速度很慢,我想curl不会更快了。您可以通过JavaScript加载和检查浏览器。所以,您的应用程序只是将链接传递到文件,用户将看到正在加载的图像,而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>
$.ajax({
类型:'头',
网址:'http://example.com/image.jpg',
成功:函数(){
$('img').attr('src','http://example.com/image.jpg');
},
错误:函数(){
}
});
如果不需要隐藏图像路径,则不必加载包含文件\u获取\u内容的图像
您还可以使用一些数据库表来缓存映像地址。并每小时检查一次链接是否仍在工作或断开。如果它被破坏,您将在数据库中将该图像的url更改为missing.jpg
你也可以考虑从StaskFipe移动到Dropbox或其他服务。
< P>尝试从另一个站点抓取图像,是的,它使用FielyGETYAX内容<?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>";
}
}
}
}
?>
虽然JS是一个局部解决方案,但我正在寻找一个PHP解决方案。JS不适用于未启用JS的浏览器。在修改之前,它不会将头设置为在用户浏览器中缓存文件。文件名已经存储在数据库中,所以文件不应该丢失,但如果丢失,看起来很难看!最后,我为什么要从smartfile转移到dropbox,作为AmazonS3的文件托管替代方案?smartfile developer可免费进行高达100GB的存储、200GB的转出(不限输入)、不限api调用。比免费提供的2GB DB稍好一点,它不是真正用于此用途的!在这里,这应该是最快的检查方法。若文件存在,那个么您只需提供指向浏览器的链接。你不必加载文件内容。那么到目前为止你做了什么来解决这个问题呢?或者这是一个规范工作的要求?什么?我已经尝试了get_headers
,现在我也尝试了curl
来获取headers和body。我在寻找最好的方法!