0

私はScraperWikiを使用して、オンラインストアからリンクを取得する単純なスクリーンスクレイパーを構築しています。ストアには複数のページがあるので、最初のページからすべてのリンクを取得し、ポケットベルで[次へ]ボタンを見つけ、そのURLに移動し、そこからすべてのリンクを検索し、次のページに移動します。など。

これが私がいるところです。ScraperWikiは、単純なHTMLDOMおよび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

他の回答の助けを借りて自分で解決策を見つけました-スクリプトの開始時に関数の外で $allLinks を宣言する必要がありました。Javascript ではグローバルにするのに十分ですが、PHP では、次のようにグローバルな INSIDE 関数としても宣言する必要があるようです。

$allLinks = array();

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

これでようやくコードが機能するようになりました。

于 2013-02-22T22:14:24.200 に答える
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) にする必要があります

于 2013-02-21T23:38:39.767 に答える