如何在php中使用wget?

2022-08-30 12:47:00

我有这个参数来下载一个XML文件:

wget --http-user=user --http-password=pass http://www.example.com/file.xml

我如何在php中使用它来打开这个xml文件?


答案 1

wget

wget是一个linux命令,而不是PHP命令,所以要运行这个命令,你需要使用exec,这是一个用于执行shell命令的PHP命令。

exec("wget --http-user=[user] --http-password=[pass] http://www.example.com/file.xml");

如果您正在下载一个大文件-并且想要监视进度,这可能很有用,但是当您处理您只对内容感兴趣的页面时,有一些简单的功能可以做到这一点。

默认情况下,exec 功能处于启用状态,但在某些情况下可能会被禁用。此配置的配置选项驻留在 php.ini中,若要启用,请从disabled_functions配置字符串中删除 exec

另类

使用file_get_contents我们可以检索指定URL / URI的内容。当您只需要将文件读入变量时,这将是用作curl替代品的完美函数 - 在构建URL时遵循URI语法

// standard url
$content = file_get_contents("http://www.example.com/file.xml");

// or with basic auth
$content = file_get_contents("http://user:pass@www.example.com/file.xml");

正如 Sean the Bean 所指出的 - 您可能还需要在 php 中将allow_url_fopen更改为 true.ini以允许在此方法中使用 URL,但是,默认情况下,这应该是正确的。

如果要将该文件存储在本地,则有一个函数file_put_contents将其写入文件,与上一个函数结合使用,这可以模拟文件下载:

file_put_contents("local_file.xml", $content);

答案 2

如果目的是将内容加载到应用程序中,则甚至不需要使用:wget

$xmlData = file_get_contents('http://user:pass@example.com/file.xml');

请注意,如果在 php.ini 或 Web 服务器配置(例如 httpd.conf)中禁用allow_url_fopen(默认情况下启用),则此功能将不起作用。

如果您的主机显式禁用了它,或者您正在编写一个库,则建议使用 cURL 或抽象功能的库,例如 Guzzle

use GuzzleHttp\Client;

$client = new Client([
  'base_url' => 'http://example.com',
  'defaults' => [
    'auth'    => ['user', 'pass'],
]]);

$xmlData = $client->get('/file.xml');

推荐