0

我正在使用 ScraperWiki 构建一个简单的屏幕抓取工具,从在线商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该 url,从那里找到所有链接,转到下一页,依此类推等等。

这就是我所在的地方。ScraperWiki 使用简单的 HTML DOM 和 CSS 选择器:

<?php 
require 'scraperwiki/simple_html_dom.php';  

function nextPage(){
    $next = $html->find("li.pager-next a"); 
    $nextUrl = 'http://www.domain.com';
    $nextUrl .= $next->href . "\n"; 
    getLinks($nextUrl);
} 

function getLinks($url){    // gets links from product list page   

    $html_content = scraperwiki::scrape($url);
    $html = str_get_html($html_content);

    $x = 0;

    foreach ($html->find("div.views-row a.imagecache-product_list") as $el) { 
        $url = $el->href . "\n";  
        $allLinks[$x] = 'http://www.domain.com';
        $allLinks[$x] .= $url;
        $x++;
    }

    nextPage();
}

getLinks("http://www.domain.com/foo/bar");


print_r($allLinks);

?>

getLinks()函数在不在函数中时工作正常,但是当我将它们放入函数时出现“未声明的变量”错误。我的问题是:

在 PHP 中,我可以像在 Javascript 中那样声明要在整个脚本中使用的空变量/数组吗?我在 Stack 上阅读了一些答案,这似乎暗示不需要声明,这似乎很奇怪。

4

3 回答 3

1

如果您显示了整个错误,它可能类似于

未定义变量:$getLinks

可能是因为你的意思是这样的: getLinks($nextUrl);

不是这个: $getLinks($nextUrl);

它在nextPage函数之外工作正常,因为您在那里正确调用它。

于 2013-02-21T23:34:31.523 回答
0
class ScraperWiki{
    public $variable;
    protected $variable;
    private $variable;

    // here you have the option of choosing how your functions and variables are treated...


     private function getLinks(){...}



     public function someOtherFunction(){
          $this->getLinks(); //will call the function in this Class
     }
}

另外,您还有语法错误 $getLinks($nextUrl); 应该是 getLinks($nextUrl)

于 2013-02-21T23:38:39.767 回答
0

在其他答案的帮助下自己找到了解决方案 - 必须在脚本开头声明 $allLinks ,在任何函数之外。在 Javascript 中足以使其成为全局变量,但在 PHP 中,您似乎还必须将其声明为全局 INSIDE 函数,如下所示:

$allLinks = array();

function foo(){
    global $allLinks
    ...//stuff
}

这终于让我的代码工作了。

于 2013-02-22T22:14:24.200 回答