刮刀函数中的PHP变量

时间:2013-02-21 23:27:04

标签: php web-scraping scraperwiki

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

这是我在的地方。 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上看到了一些答案,似乎暗示没有必要声明,这似乎很奇怪。

3 个答案:

答案 0 :(得分:1)

如果你已经显示了整个错误,那可能就像是

  

未定义的变量:$ getLinks

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

不是这样的:     $getLinks($nextUrl);

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

答案 1 :(得分: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
     }
}

另外你有一个语法Error $ getLinks($ nextUrl);应该是getLinks($ nextUrl)

答案 2 :(得分:0)

在其他答案的帮助下找到解决方案 - 必须在脚本开头声明$ allLinks,在任何函数之外。在Javascript中,它足以使它成为全局的,但在PHP中看起来你必须将它声明为全局INSIDE函数,如下所示:

$allLinks = array();

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

这终于使我的代码正常工作。