从PHP调用wget';s shell_exec不工作
我正在尝试在本地运行一个PHP脚本,它使用从PHP调用wget';s shell_exec不工作,php,shell,wget,shell-exec,Php,Shell,Wget,Shell Exec,我正在尝试在本地运行一个PHP脚本,它使用wget刮取Google,并将HTML转储到temp.HTML 从终端运行此命令可以正常工作: wget -O temp.html http://www.google.ca 从PHP运行此命令也可以正常工作(因此这不是权限问题): 但是,从PHP运行它不起作用(不会创建temp.html): 有什么建议吗?将最后一个命令包装在var\u dump()中会输出空值 谢谢 用file\u put\u contents和file\u get\u conten
wget
刮取Google,并将HTML转储到temp.HTML
从终端运行此命令可以正常工作:
wget -O temp.html http://www.google.ca
从PHP运行此命令也可以正常工作(因此这不是权限问题):
但是,从PHP运行它不起作用(不会创建temp.html):
有什么建议吗?将最后一个命令包装在var\u dump()
中会输出空值
谢谢 用
file\u put\u contents
和file\u get\u contents
代替怎么样?这应该可以工作,而不必担心wget
<?php
$filename = 'temp.html';
$address = 'http://www.google.ca';
file_put_contents($filename,file_get_contents($address));
?>
根据
man wget
,使用wget-O temp.htmlhttp://google.com
获取所有文档,连接它们并在temp.html
中打印所有内容,而不生成任何stdout
,因此PHP的shell\u exec
不会返回任何内容(null
)
刮取的网页内容应以temp.html
格式显示,但shell_exec(“wget…”)
不会返回任何内容,因为不会生成输出
正如你所提到的,你试图刮去的网页不起作用,也许他们实施了某种机器人保护,阻止了你正在尝试的东西
编辑:您可以使用
-
将所有内容打印到stdout
。因此,尝试使用shell\u exec(“wget-O-https://google.com");
应该将请求页面的内容返回到PHP脚本。最简单的解决方案是提供wget
二进制文件的完整路径,因为运行脚本的用户似乎没有与您相同的$path 你能更新你的问题来添加你得到的具体错误吗?我没有得到任何错误。如我在问题中所述,shell_exec
命令没有创建包含http://www.google.ca
在它里面。谢谢。服务器上是否安装了wget?是的,我正在安装wget的计算机上运行此程序。在终端的同一文件夹中运行相同的命令也很好。谢谢,这对谷歌来说确实有效,不过我只是以谷歌为例。我正在抓取的实际URL不适用于file\u get\u contents
(服务器会阻止请求——cURL请求也是如此)。谢谢您的回答。如果网页实现了某种bot保护,那么运行wget-O temp.htmlhttp://www.whoever.com
直接从终端发送也不起作用,但它确实。。。对吗?正确,如果存在某种保护(即显示浏览器检查页或对假定为机器人的访问者不显示任何内容),wget
不应返回所需的内容/code/HTML(根据我的经验)。
shell_exec('wget -O temp.html http://www.google.ca');
<?php
$filename = 'temp.html';
$address = 'http://www.google.ca';
file_put_contents($filename,file_get_contents($address));
?>