Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP调用wget';s shell_exec不工作_Php_Shell_Wget_Shell Exec - Fatal编程技术网

从PHP调用wget';s shell_exec不工作

从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

我正在尝试在本地运行一个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 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));
 ?>