0

HTMLパーサーを使用して、サードパーティのサイトからデータをスクレイピングする練習をしています。指定されたタグをループしている間に、mkdir() 関数を使用して、ループで使用されている変数の 1 つにちなんで名付けられた新しいフォルダーを作成します。私のコードは次のとおりです。

foreach($s->find('a') as $t)
{
    $inner = $t->plaintext;
    if(!is_dir("img/ncaa/".$team."")
    && !file_exists("/img/ncaa/".$team."/".substr($inner, 0, 4).".png"))
    {
        foreach($t->find('img') as $l)
        {
               $url = $l->src;
        }   

        mkdir("img/ncaa/".$team."");

        $img = "/img/ncaa/".$team."/".substr($inner, 0, 4).".png";
        file_put_contents($img, file_get_contents($url));
    }   
}

次のようなエラー メッセージが表示されます:警告: mkdir() [function.mkdir]: Invalid argument in

上記のコードをすべてコメントアウトして、単純に書くと

mkdir("img/ncaa/Boston Celtics");

それはうまくいくようです。権限と関係があるのではないかと少し考えましたが、そうではありませんでした。

助言がありますか?

4

3 に答える 3

0

foreachループの前に、$team値を出力します。値が空の場合は、for-eachループの前に$ team = "Boston Celtics"を使用して明示的に設定し、機能するかどうかを確認します。

于 2012-10-03T07:39:25.287 に答える
0

代わりにこれを実行してください:

foreach($s->find('a') as $t)
{
    $inner = $t->plaintext;
    if(!is_dir("img/ncaa/".$team."")
    && !file_exists("/img/ncaa/".$team."/".substr($inner, 0, 4).".png"))
    {
        foreach($t->find('img') as $l)
        {
               $url = $l->src;
        }   

        $theDir = "img/ncaa/".$team."";
        var_dump($theDir);
        mkdir($theDir);

        $img = "/img/ncaa/".$team."/".substr($inner, 0, 4).".png";
        file_put_contents($img, file_get_contents($url));
    }   
}

そして出力を調べると、おそらくエラーが明らかになるでしょう

于 2012-10-03T07:14:10.807 に答える
0

たとえば、一部の手順で相対パスを使用する理由が不思議です。

$theDir = "img/ncaa/".$team."";

そして、他のものでは、次のような絶対パスを使用しています:

$img = "/img/ncaa/".$team."/".substr($inner, 0, 4).".png";

絶対パスまたは相対パスの 1 つの戦略を選択する必要があります。両方のアプローチを混在させると、プログラムが混乱します。これが、mkdir が機能しない理由だと思います。

于 2012-10-03T07:17:24.747 に答える