我尝试在本地运行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。
谢谢!
答案 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));
?>