从PHP的shell_exec调用wget无效

时间:2017-08-11 04:45:30

标签: php shell wget shell-exec

我尝试在本地运行PHP脚本,用wget抓取Google并将HTML转储到temp.html

从终端运行此命令可以正常工作:

wget -O temp.html http://www.google.ca

从PHP运行此命令也可以正常工作(因此它不是权限问题):

shell_exec('touch temp.html');

但是从PHP运行它不起作用(不创建temp.html):

shell_exec('wget -O temp.html http://www.google.ca');

有什么建议吗?将var_dump()中的最后一个命令包装为null。

谢谢!

3 个答案:

答案 0 :(得分:0)

根据man wget,使用wget -O temp.html http://google.com获取所有文档,连接它们并打印temp.html中的所有内容,而不生成任何stdout所以PHP {{1}没有任何东西(shell_exec)。

抓取的网页内容应该出现在null中,但temp.html不会返回任何内容,因为不会生成输出。

正如您所提到的那样,您尝试抓取的网页无法正常工作,也许他们实施了某种机器人保护功能,可以防止您正在尝试的内容。

修改:您可以使用shell_exec("wget ...")将所有内容打印到-。因此,尝试使用stdout应该将请求页面的内容返回到PHP脚本。

答案 1 :(得分:0)

最简单的解决方案是提供wget二进制文件的完整路径,因为运行脚本的用户似乎与您拥有相同的$ PATH。

答案 2 :(得分:-1)

如何使用file_put_contents& file_get_contents而是?这应该工作而不必担心wget

 <?php
  $filename = 'temp.html';
  $address = 'http://www.google.ca';
  file_put_contents($filename,file_get_contents($address));
 ?>