如何从PHP中的URL获取图像?

时间:2014-02-27 08:28:13

标签: php codeigniter

我有一个输出图像的远程网址 网址格式如下

http://domain.com/my_file/view/<file_id>/FULL/

在url“my_file”中是控制器名称,“view”是函数名,另外两个是参数

如果我在浏览器中点击此网址,则会显示图片

我想在我的项目文件夹中获取该图像

我尝试过使用file_get_contents但是它给了我404的警告

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

$img=file_get_contents('http://example.com/image/test.jpg');
file_put_contents('/your/project/folder/imgname.jpg',$img);

只有在php.ini文件中将allow_url_fopen设置为1时才有效。 如果您可以更改此值,请启用它并完成。

另一种选择是CURL。检查PHP配置中是否启用了此模块。

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://example.com/image/test.jpg');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_HEADER , 0);   
  curl_setopt($ch, CURLOPT_VERBOSE, 0);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  $result = @curl_exec($ch);
  $curl_err = curl_error($ch);
  curl_close($ch);
  if (empty($curl_err)) {
     file_put_contents('/your/project/folder/imgname.jpg',$result);
  }

如果未启用CURL,您可以编写一个简单的HTTP客户端,如下所示:

  $buf='';
  $fp = fsockopen('example.com',80);
  fputs($fp, "GET /image/test.jpg HTTP/1.1\n" );
  fputs($fp, "Host: example.com\n" );
  fputs($fp, "Connection: close\n\n" );
  while (!feof($fp)) {
    $buf .= fgets($fp,128);
  }
  fclose($fp);
  file_put_contents('/your/project/folder/imgname.jpg',$buf);

答案 1 :(得分:0)

使用Curl:

function curlFile($ url)     {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

function readurl()
{
$url="http://domain.com/my_file/view/<file_id>/FULL/";
curlFile($url);
}

echo readurl();

答案 2 :(得分:0)

如果您正在尝试

$image = file_get_contents('http://domain.com/my_file/view/<file_id>/FULL/');
if($image) file_put_contents('some/folder/<file_id>');

并且它不起作用,它可能意味着:

  1. 有访问控制可以阻止它在远程服务器上。在这种情况下,您必须设置适当的cookie。我建议使用curl来做到这一点。
  2. 图像路径错误;尝试使用浏览器导航到http://domain.com/my_file/view/<file_id>/FULL/时查看来源。
  3. 您的网址中的尾随/不应该在那里,例如http://domain.com/my_file/view/<file_id>/FULL