【问题标题】:Recursive wget via PHP exec() fetches only first page?通过 PHP exec() 递归 wget 只获取第一页?
【发布时间】:2013-02-13 20:46:17
【问题描述】:

以下 wget 命令可以很好地递归爬取整个域,将下载的文件保存在单个文件夹中,然后将其全部删除:

wget --delete-after -r -nd http://www.example.com/

当从命令行运行时,它可以完美运行。当通过 PHP 的 exec(或 system、shell_exec、passthru)运行时,它只获取索引页,但似乎没有比这更深:

exec('wget --delete-after -r -nd http://www.example.com/');

如果这是一个权限问题,我认为它也不会下载索引页面,但确实会下载(当我取出“--delete-after”时会注意到)。

没有涉及robots.txt,如果我通过echo传递它也不会显示输出。我错过了什么?

【问题讨论】:

  • 如果将一个空数组作为第二个参数并在执行后将其转储,那么数组中会有什么?它是输出容器。它停止的原因有什么?
  • 数组出来为空:array(0) { }
  • 如果传递第三个参数,执行后它的值是多少?另外,您可以尝试将 -v 添加到 wget 参数并在此之后转储输出吗?
  • 这会导致 array(0) { } 和 int(8)。如果我添加 -O /some/file/nginx/can/access.txt,它会更深一层,但再一次它不会比这更进一步。
  • 这不是在 *nix 下运行的,是吗?

标签: php exec wget


【解决方案1】:

毕竟这似乎是一个权限问题,因为添加 --directory-prefix 参数修复了它。

wget --delete-after -q -r -nd -P /home/example.com/public_html/tmp/ http://www.example.com

我将前缀设置为 php-fpm 肯定可以访问的目录,而之前坦率地说,我不知道它将文件临时保存在哪里('.' 是默认目录,但那会在哪里呢?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2012-05-26
    • 2020-12-21
    相关资源
    最近更新 更多