2017-08-11 208 views
-1

我试图在本地运行一个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()中的最后一个命令输出为空。

谢谢!

+0

您是否可以更新您的问题以添加您遇到的特定错误? –

+0

我没有收到任何错误。正如我在问题中指出的那样,'shell_exec'命令不会创建文件'temp.html',其中包含“http:// www.google.ca”的内容。谢谢。 –

+0

wget是否安装在服务器上? –

回答

-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)); 
?> 
+0

谢谢,这对Google有用,但我只是以Google为例。我正在抓取的实际URL不适用于'file_get_contents'(服务器阻止请求 - 与cURL请求相同)。 –

0

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脚本。

+0

感谢您的回答。如果网页已经实现了某种机器人保护,那么直接从终端运行'wget -O temp.html http:// www.whoever.com'也不起作用,但它确实......对吗? –

+0

正确的是,如果有某种保护措施(即显示一个浏览器检查页面或者假定为bot的访问者没有任何内容),'wget'不应该返回你想要的内容/代码/ HTML(根据我的经验)。 – GxTruth

0

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