从PHP的shell_exec中调用wget不起作用
我试图在本地运行一个PHP脚本,该脚本用wget
刮去Google,并将HTML转储为temp.html
。从PHP的shell_exec中调用wget不起作用
运行从终端这个命令正常工作:
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()
中的最后一个命令输出为空。
谢谢!
如何使用file_put_contents
& file_get_contents
而不是?这应该不用担心wget
。
<?php
$filename = 'temp.html';
$address = 'http://www.google.ca';
file_put_contents($filename,file_get_contents($address));
?>
谢谢,这对Google有用,但我只是以Google为例。我正在抓取的实际URL不适用于'file_get_contents'(服务器阻止请求 - 与cURL请求相同)。 –
据man wget
,用wget -O temp.html http://google.com
需要的所有文件,将其连接在temp.html
打印的一切,而不产生任何stdout
所以PHP的shell_exec
不返回任何东西(null
)。
被抓网页的内容应该存在于temp.html
中,但shell_exec("wget ...")
不会返回任何内容,因为不会生成输出。
正如你所提到的,你试图抓取的网页是行不通的,也许他们实施了某种机器人防护措施,以防止你正在尝试。
编辑:您可以用-
来代替stdout
。因此,请尝试使用shell_exec("wget -O - https://google.com");
应将所请求页面的内容返回给您的PHP脚本。
感谢您的回答。如果网页已经实现了某种机器人保护,那么直接从终端运行'wget -O temp.html http:// www.whoever.com'也不起作用,但它确实......对吗? –
正确的是,如果有某种保护措施(即显示一个浏览器检查页面或者假定为bot的访问者没有任何内容),'wget'不应该返回你想要的内容/代码/ HTML(根据我的经验)。 – GxTruth
最简单的解决方案是提供wget
二进制文件的完整路径,因为看起来运行脚本的用户没有与您相同的$ PATH。
您是否可以更新您的问题以添加您遇到的特定错误? –
我没有收到任何错误。正如我在问题中指出的那样,'shell_exec'命令不会创建文件'temp.html',其中包含“http:// www.google.ca”的内容。谢谢。 –
wget是否安装在服务器上? –