我正在寻找一个简单的方法来导入/复制图像从远程服务器到本地文件夹使用 PHP。我没有访问服务器的 FTP 权限,但所有远程映像都可以通过 HTTP (即 http://www.mydomain.com/myimage.jpg)访问。
示例使用: 用户希望在其配置文件中添加图像。该图像已经存在于网络上,用户提供了一个直接的 URL。我不希望热链接的形象,但导入和服务从我的领域。
使用 GET 请求下载图像并将其保存到服务器上可访问的 Web 目录中。
在使用 PHP 时,可以使用 curl从其他服务器下载文件。
curl
使用 File _ get _ content非常简单,只需提供 URL 作为第一个参数。
你有这四种可能性:
远程文件 。这需要在 php.ini 中启用 allow_url_fopen,但这是最简单的方法。
allow_url_fopen
或者你可以使用 CURL,如果你的 PHP 安装支持它。甚至有一个 例子。
如果你真的想手动做到这一点使用 HTTP 模块。
甚至不要尝试 直接使用插座。
以下是最基本的方法:
$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,它更有效、更快速,并且可以在更多的共享主机上使用。
您还可以欺骗用户代理,使其看起来像一个桌面,而不是一个机器人!
$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 托管提供商不会启用这个选项。
这是 使用 cURL 的 php 手册页。在评论中你可以找到一个下载和图像文件的例子。
如果不想使用 libcurl,可以使用 fsockopen 编写代码。这是内置在 php 中的(但可能在您的主机上禁用) ,并且可以直接读写到套接字。参见 Fsockopen 手册页上的示例。
PHP 有一个内置函数 file _ get _ content () ,它将文件的内容读入一个字符串中。 < ? php //获取文件 $content = file _ get _ content (“ http://example.com/image.jpg”) ;
< ? php //获取文件 $content = file _ get _ content (“ http://example.com/image.jpg”) ;
//存储在文件系统中。 $fp = fopen (“/location/to/save/image. jpg”,“ w”) ; Fwrite ($fp,$content) ; Fclose ($fp) ; ? > 如果希望将文件存储在数据库中,只需使用 $content 变量,不要将文件保存到磁盘。
如果在服务器上启用了 PHP5和 HTTP 流包装器,那么将其复制到本地文件非常简单:
copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
这将照顾到任何管道等所需要的。如果需要提供一些 HTTP 参数,还可以提供第三个“流上下文”参数。
使文件夹和名称为例子下载 打开记事本并插入此代码
例如,只将 http://www.google.com/aa.zip更改为文件并将其保存为 m.php
将 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 Http://www.example.com/download/m.php
您将在下载文件夹中看到从其他服务器下载的文件
谢谢
如果没有效果,使用这个快速解决方案
$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);