Foreach循环只迭代一次 - PHP

时间:2013-04-19 09:56:29

标签: php foreach copy domdocument explode

我正在寻找一个PHP脚本来从几个网站上抓取图像,但我找不到一个通用的,允许抓取多个页面..所以我建了一个。

它要求一个保存路径和一个网页列表来刮取图像,用逗号分隔。该脚本以逗号分解用户输入的网页,然后遍历每个网页。它总会刮掉第一个网页,但随后会跳过剩下的网页。

这是整个脚本。随意将其复制到localhost并运行它,你会明白我的意思。

<?php
error_reporting( 0 );

if(isset($_POST['doit'])){
    $scrapethese = explode(",",$_POST['website']);
    foreach($scrapethese as $scrapethis){
        $cleanit = str_replace(" ", "", $scrapethis);
        $html = file_get_contents($cleanit);
        $dom = new domDocument;
        $dom->loadHTML($html);
        $dom->preserveWhiteSpace = false;
        $imgs = $dom->getElementsByTagName('img');
        foreach($imgs as $img){
            $fullimgpath = $img->getAttribute('src');
            $slashexp = explode('/', $fullimgpath);
            $lastindex = count($slashexp)-1;
            $shortpath = $slashexp[$lastindex];
            $filename = $_POST['folder']."\\".$shortpath;
            if(copy($fullimgpath, $filename)){
                echo $slashexp[$lastindex]." Saved<br />";
            }else{
                echo "<b style='color:red;'>Could not save img: </b>".$filename."<br />";
            }
        }
    }
}else{
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="doit" value="x" />
    <label>The complete path to the page you'd like to scrape. You may enter multiple paths seperated by commas.</label><br />
    <textarea name="website" /></textarea><br />
    <label>Path to the folder you want to save images to</label><br />
    <input type="text" name="folder" /><br />
    <input type="submit" value="save all images" />
</form>
<?php
}
?>

如果有人能够提供一些见解,说明为什么脚本在提供多个网站时没有循环遍历所有网站,我会非常感激。

0 个答案:

没有答案