Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 通过HTTP从远程服务器复制映像_Php_Image_Import_Curl_Copy - Fatal编程技术网

Php 通过HTTP从远程服务器复制映像

Php 通过HTTP从远程服务器复制映像,php,image,import,curl,copy,Php,Image,Import,Curl,Copy,我正在寻找一种使用PHP将图像从远程服务器导入/复制到本地文件夹的简单方法。我无法通过FTP访问服务器,但所有远程映像都可以通过HTTP(即)访问 示例用法:用户希望将图像添加到其个人资料中。该图像已存在于web上,并且用户提供了一个直接URL。我不希望热链接图像,但希望从我的域中导入和提供服务。使用GET请求下载图像并将其保存到服务器上的web可访问目录中 使用PHP时,可以使用curl从另一台服务器下载文件。使用它非常简单。只需提供url作为第一个参数。您已经了解了以下四种可能性: 。这需

我正在寻找一种使用PHP将图像从远程服务器导入/复制到本地文件夹的简单方法。我无法通过FTP访问服务器,但所有远程映像都可以通过HTTP(即)访问


示例用法:用户希望将图像添加到其个人资料中。该图像已存在于web上,并且用户提供了一个直接URL。我不希望热链接图像,但希望从我的域中导入和提供服务。

使用GET请求下载图像并将其保存到服务器上的web可访问目录中


使用PHP时,可以使用
curl
从另一台服务器下载文件。

使用它非常简单。只需提供url作为第一个参数。

您已经了解了以下四种可能性:

  • 。这需要
    允许在php.ini中启用\u url\u fopen
    ,但这是最简单的方法

  • 或者,如果PHP安装支持,也可以使用。甚至还有一个

  • 如果您真的想手动执行,请使用

  • 甚至都不要尝试


    • 以下是最基本的方法:

      $url = "http://other-site/image.png";
      $dir = "/my/local/dir/";
      
      $rfile = fopen($url, "r");
      $lfile = fopen($dir . basename($url), "w");
      
      while(!feof($url)) fwrite($lfile, fread($rfile, 1), 1);
      
      fclose($rfile);
      fclose($lfile);
      

      但是如果你做了很多很多(或者你的主机阻止文件访问远程系统),考虑使用CURL,它更有效,速度更快,在更多共享主机上可用。p> 您还可以欺骗用户代理,使其看起来像桌面而不是机器人

      $url = "http://other-site/image.png";
      $dir = "/my/local/dir/";
      $lfile = fopen($dir . basename($url), "w");
      
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
      curl_setopt($ch, CURLOPT_FILE, $lfile);
      
      fclose($lfile);
      curl_close($ch);
      

      对于这两个实例,您可能希望通过GD传递它,以确保它确实是一个图像。

      既然您已将问题标记为“php”,我将假设您在服务器上运行php。最好的选择是控制自己的web服务器,然后将cURL编译成php。这将允许您的web服务器向其他web服务器发出请求。从安全角度来看,这可能非常危险,因此大多数基本的web托管提供商不会启用此选项

      这是我的建议。在评论中,您可以找到一个示例,该示例下载了图像文件


      如果不想使用libcurl,可以使用fsockopen编写代码。这是内置在php中的(但可能在主机上被禁用),可以直接读取和写入套接字。请参阅。

      PHP有一个内置函数file_get_contents(),它将文件内容读入字符串。
      
      

      如果希望将文件存储在数据库中,只需使用$content变量,而不将文件保存到磁盘。

      如果服务器上启用了PHP5和HTTP流包装器,则将其复制到本地文件非常简单:

      copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
      

      这将处理所需的任何管道等。如果您需要提供一些HTTP参数,则可以提供第三个“流上下文”参数。

      创建文件夹并将其命名为示例下载 打开记事本并插入此代码

      例如,仅更改文件并将其保存到m.php

      chamod将php文件下载到666,并将文件夹下载到777

      <?php
      define('BUFSIZ', 4095);
      $url = 'http://www.google.com/aa.zip';
      $rfile = fopen($url, 'r');
      $lfile = fopen(basename($url), 'w');
      while(!feof($rfile))
      fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);
      fclose($rfile);
      fclose($lfile);
      ?>
      
      
      
      最后,从浏览器输入这些URL

      您将在下载文件夹中看到从其他服务器下载的文件

      谢谢使用

      $imageString = file_get_contents("http://example.com/image.jpg");
      $save = file_put_contents('Image/saveto/image.jpg',$imageString);
      
      帮助我将图像从服务器下载到客户端

      <a download="original_file.jpg" href="file/path.jpg">
        <img src="file/path.jpg" class="img-responsive" width="600" />
      </a>
      

      适用于需要保留原始文件名和扩展名的用户

      $origin = 'http://example.com/image.jpg';
      
      $filename = pathinfo($origin, PATHINFO_FILENAME);
      $ext = pathinfo($origin, PATHINFO_EXTENSION);
      
      $dest = 'myfolder/' . $filename . '.' . $ext;
      
      copy($origin, $dest);
      

      出于安全原因,这被锁定到许多共享主机上的本地文件系统。卷曲更好、更快、更强等等。。。并且通常在那些阻止远程文件系统上的fopen的主机上可用。如果cURL可用,那就更好了。在PHP.NET中查看用GD检查的图像,在保存文件后考虑运行这个问题:如果它返回false,立即删除文件。在代码< > CURLYORACK($CH)之前,您错过了<代码> CURLYEXEC($CH),而<代码> FRACK($CH)应该放在最后,而不是在<代码> CurLyCox($CH)之前,这意味着在没有任何内容写入文件之前关闭文件,因此只会得到一个空文件。请记住,在php.ini中,allow_url_fopen必须为=on。allow_url_fopen注释刚刚解决了一个多小时的挠头问题。谢谢,@mauro.dec!像这样的URL做了什么
      http://desmond.imageshack.us/Himg100/scaled.php?server=100&filename=desertoh.jpg&res=crop
      ???谢谢你的回答-我想我就快到了!当你说“/tmp/file.jpg”时,它与什么有关?web服务器的根目录。。。(例如:/var/www/vhosts等)或网站的根目录:/httpdocs/??无法看到出现的文件,我已将url fopen设置为“开”!!不要使用https,只使用httpusing curl是一个好方法,因为一些服务器人员出于安全原因不支持文件内容小文件的提示,但对于大文件,php内存将爆炸:(curl也不是一个好选择,因为它不是标准php的一部分,为什么“甚至不要尝试直接使用套接字?”?(这就是我正在使用的,)@Gajus:你没有在这个代码段中直接使用套接字。你在使用php的功能来打开远程文件。谢谢!第二个解决方案正在工作。最重要的是,解决方案对我不起作用:小文件的提示,但对于大文件,php内存将爆炸:(难道服务器没有代理模块吗?
      $origin = 'http://example.com/image.jpg';
      
      $filename = pathinfo($origin, PATHINFO_FILENAME);
      $ext = pathinfo($origin, PATHINFO_EXTENSION);
      
      $dest = 'myfolder/' . $filename . '.' . $ext;
      
      copy($origin, $dest);