为什么wget在命令行上工作,但file_get_contents不工作?

时间:2018-04-09 10:31:46

标签: php wget file-get-contents

我正在尝试使用php的get_file_contents()函数将html文件的内容下载到我的Ubuntu Linux 16.04计算机。但是,当我这样做时,我收到此警告:“未能打开流:中止”

然而,当我在终端命令行上使用wget时,它会快速下载文件内容。

那么为什么file_get_contents不能用于此呢?这是我的PHP代码,它产生警告:

$testDownload = file_get_contents("https://ebird.org/region/US-AL-001?yr=all");

echo $testDownload;

在我的Ubuntu终端命令行上,这是我的bash代码,它可以快速而完美地运行:

wget https://ebird.org/region/US-AL-001?yr=all

我想使用php,因为我想自动下载大量文件并需要相当多的代码才能完成,而且使用php比使用bash感觉更舒服。

P.S。我尝试了Stack Overflow上建议的file_get_contents函数的各种“上下文”解决方案,但它们没有解决问题。

P.P.S。我之前尝试过cURL并获得相同的重定向警告,但我承认对cURL不太了解。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:php中的shell_exec()函数允许我在我的php脚本中使用bash的wget命令行函数。我尝试了它,它的工作原理。 (我将不得不更改下载文件的所有权以便访问它们。)以下是有效的代码:

$output = shell_exec('wget https://ebird.org/region/US-AL-005?yr=all');

我仍然不明白为什么wget可以获取文件内容但file_get_contents不能。但是使用shell_exec()我找到了一个php解决方案来完成我的任务,所以我很高兴。