改进这个404 Checker PHP脚本?

时间:2015-06-14 14:41:32

标签: php

它的主要目的是检查URLS。你必须创建一个404.txt和sites.txt,把你想要的URL放在sites.txt中并运行下面名为grab.php的脚本,在sites.txt中404的任何url都将进入404.txt。请记住,这必须位于相同的文件夹404.txt,sites.txt和grab.php中。

你看到这个PHP脚本不能一直工作,它无法处理数千个URL。它有时可以使用数百或更少,你能帮助改善吗?

 <?php
error_reporting(0);
$error_404 = "Not Found";
$list_404 = array();
$sites = file('sites.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($sites as $site)
{
        $response = get_headers($site);
        if (strpos($response[0], $error_404))
        {
                $list_404[]=$site."
";
        }
}

file_put_contents('404.txt',$list_404);
?>

2 个答案:

答案 0 :(得分:1)

你可以试试这个,看看你哪里出错:

<?php

// Display Errors
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

// Open File
$siteFile = fopen("sites.txt", "r");
// Create Array to Store 404 Error Sites
$errorList = array();

// Reading the File Line by Line
while(!feof($siteFile)){
    // Get the Site
    $site = (string)trim(fgets($siteFile));
    // Get the Headers
    $headers = get_headers($site);
    // Parse the Status Code from the Header
    $status = substr($headers[0], 9, 3);
    // If the Status Code is a 404, Push it into the Array
    if(intval($status) == 404){
        array_push($errorList, $site);
        echo "<li><b>{$site} {$headers[0]}</b></li>";
    }
    // Output the Status Code (Just so you can See it)
    else {
        echo "<li>{$site} {$headers[0]}</li>";
    }
}

// Do File Writing Here

// Close the Sites File
fclose($siteFile);

至少通过这种方式,您可以查看列表中网站的错误和状态。此外,请确保站点文件中的所有URL都使用HTTP格式化

sites.txt:

http://www.google.com
http://www.facebook.com
http://www.gmail.com
http://hotdot.pro/en/404/

HTML输出:

HTTP/1.0 200 OK
HTTP/1.1 302 Found
HTTP/1.0 301 Moved Permanently
HTTP/1.1 404 Not Found

答案 1 :(得分:0)

我通过添加&#34; ini_set(&#39; max_execution_time&#39;,300)修复了上一个脚本;&#34;

<?php
error_reporting(0);
$error_404 = "Not Found";
$list_404 = array();
$sites = file('sites.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($sites as $site)
{
        $response = get_headers($site);
        ini_set('max_execution_time', 300);
        if (strpos($response[0], $error_404))
        {
                $list_404[]=$site."
";
        }
}

file_put_contents('404.txt',$list_404);
?>