Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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 为什么文件获取内容($url)或文件获取内容(urlencode($url))返回http请求失败_Php_Laravel_Laravel 4 - Fatal编程技术网

Php 为什么文件获取内容($url)或文件获取内容(urlencode($url))返回http请求失败

Php 为什么文件获取内容($url)或文件获取内容(urlencode($url))返回http请求失败,php,laravel,laravel-4,Php,Laravel,Laravel 4,当我在laravel 4中使用库干预/image时,使用一段代码$image=image::make($url),我遇到错误: file_get_contents(http://ticket.at-newyork.com/image/tenboudai/rockfeller-top.jpg): failed to open stream: HTTP request failed! HTTP/1.1 410 Gone 我已经研究了许多关于stackoverflow的解决方案,并尝试了它,例如:使

当我在laravel 4中使用库干预/image时,使用一段代码$image=image::make($url),我遇到错误:

file_get_contents(http://ticket.at-newyork.com/image/tenboudai/rockfeller-top.jpg): failed to open stream: HTTP request failed! HTTP/1.1 410 Gone
我已经研究了许多关于stackoverflow的解决方案,并尝试了它,例如:使用urlencode,但我有另一个错误:

file_get_contents(http%3A%2F%2Fticket.at-newyork.com%2Fimage%2Ftenboudai%2Frockfeller-top.jpg): failed to open stream: No such file or directory

请不要建议我使用curl,因为file_get_contents()是库中的代码,我无法更改。谢谢

域票证。at-newyork.com请求中需要用户代理标头才能远程获取内容。看看下面的解决方案,它对我来说很有效

$opts = array(
    'http'=>array(
        'method'=>"GET",
        'header'=>"Host: ticket.at-newyork.com\r\n" .
            "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"
    )
);

$context = stream_context_create($opts);

$data = file_get_contents('http://ticket.at-newyork.com/image/tenboudai/rockfeller-top.jpg', false, $context);
file_put_contents('test.jpg', $data);

您还可以通过设置
CURLOPT_USERAGENT

来使用curl。这是我的解决方案,有助于解决此问题。我使用cURL-in-controller获取二进制图像数据并将其传递给param,而不是在param中传递url,这是我的代码:

    curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL,$url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Vivo app');
    $query = curl_exec($curl_handle);
    curl_close($curl_handle);

    try {
        $image = Image::make($query)->save($destinationPath . $img_name);

托管该映像的服务器是否阻止了热链接?我不明白,我只知道curl可以解决问题,但我无法使用,因为它是库中的代码,所以我无法更改。我刚刚尝试了curl,但它不起作用,它也返回410状态代码。映像/站点的所有者已阻止您像这样远程访问映像。谷歌“阻止热链接”。当我改变使用cURL时,它是完全正确的,我不知道为什么在你这边它会返回410状态码,也许它看起来不合理。请看@bbullis关于用户代理检测的评论。如果我在cURL中设置用户代理,我将获得图像,如果我没有设置,我将获得410状态。您的方法无法解决我的问题,因为我无法更改库中包含函数file_get_contents()的文件中的任何内容,但它帮助我了解更多信息,非常感谢您的支持。我很感激+1 Chetan Ameta的代码是正确的。如果不设置这些选项,则无法使用file_get_contents()获取图像文件。标题(“内容类型:图像/jpeg”);打印(数据);显示图像。