在PHP从 URL 保存图像
有时,需要从特定 URL 下载图像并将其用于项目。转到页面并使用右键单击按钮并保存图像很容易。但是,如果您想以编程方式进行呢?原因可能因人而异,因开发者而异。如果给定了数百个图像 URL 并且想以某种方式将它们保存到机器中,或者需要将这个概念应用到项目中。那么绝对不会手动下载这些文件中的每一个。
从 url 下载图像有两种不同的方法,如下所示:
- 使用基本的文件处理。
- 使用名为 cURL 的 HTTP 库。
这两种方法都有自己的优点和缺点。
使用基本文件处理:这是完成任务的基本且最简单的方法。就像任何其他文件一样,首先创建一个空文件并以“写入”模式打开它。之后,从源 URL 获取内容并将其粘贴到此文件中。这听起来很简单。
从脚本中,您可以自行了解它的作用。
- 声明两个名为$url和$img 的变量,分别代表源 URL 和目标文件。
- 使用file_put_contents()函数将字符串写入带有两个参数的文件。一个是文件名(或路径),另一个是该文件的内容。
- 使用file_get_contents()函数将文件读入字符串。
例子:
File downloaded!
注意:它将图像以给定的名称 logo.png 保存到服务器。
现在这个方法唯一的问题是它需要设置allow_url_fopen配置,默认设置为1。但有时,项目要求不允许有这个选项。这可能是因为一些预防性安全措施或只是一个设计原则。在这种情况下,还有另一种保存图像的方法。
使用 HTTP 库,cURL:严格来说,cURL 不仅仅是一个 HTTP 库。它还有其他几种数据传输协议。由于我们的图像位于 HTTP 服务器上,因此我们将仅限于该库的这一小部分。
cURL 允许在PHP发出 HTTP 请求。首先初始化它的一个实例并为请求设置一些必要的选项,包括 URL 本身。然后执行这个查询,它返回文件的内容。之后,其余的过程是相同的。一旦我们得到数据,就把它放到一个文件中并保存。
方法:
- 在这个脚本中,我们定义了一个函数file_get_contents_curl来复制前面提到的技术中的file_get_contents的行为。
- 在这个函数,我们使用curl_init函数初始化了一个 cURL 实例,以便使用它来获取数据。
- 之后,需要使用curl_setopt设置一些选项,以便此特定示例可以工作。这个函数接受三个参数
- cURL 的一个实例
- 需要设置的对应选项
- 以及选项设置的值
在本例中,设置了以下选项:
- CURLOPT_HEADER,用于确定是否需要接收headers;
- CURLOPT_RETURNTRANSFER 将数据作为curl_exec函数的返回值传输而不是直接输出。
- 还有另一个选项 CURLOPT_URL 用于设置请求的 URL。
- 之后,我们从curl_exec获取数据并从父函数返回它。
- 然后使用file_put_contents将此数据写入您机器上的文件。
例子:
输出:
File downloaded!
这种方法在从 Internet 获取内容时提供了一些灵活性。如前所述,它不仅限于 HTTP,还可以在许多其他情况下使用。它允许以您想要的任何方式配置传输。例如, file_get_contents使用简单的 GET 请求来获取数据,但是使用 cURL,也可以使用 GET、POST、PUT 等方法。
PHP是一种专门为 Web 开发设计的服务器端脚本语言。您可以按照此PHP教程和PHP示例从头开始学习PHP 。