Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载远程存储文件的PHP方法_Php_Curl_File Get Contents_Get Headers - Fatal编程技术网

加载远程存储文件的PHP方法

加载远程存储文件的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是非常慢的 我最好的选择是什么?我还没

我正在使用存储用户提交的文件。要在站点上显示图像文件,我可以直接链接到它们,但如果文件丢失,我就没有选择显示默认图像。或防止热链接。或设置浏览器缓存等

他们的API限制为每分钟180个请求。因此,在繁忙的站点上显示图像是没有好处的

我曾尝试使用
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。我在寻找最好的方法!