0

首先请原谅我的英语不好。

我正在尝试构建一个 php 脚本来从 .txt 文件中搜索多个网页以查找特定单词。

更详细:

我有一个 .txt 文件,其中存储了许多 url(每个 url 都在一行上,所以如果我有 10 个 url,则文件有 10 行),我希望脚本检查每个 url 的网页内容中的特定单词。因此,如果在网页上找到该词,脚本将返回 ONLINE,否则将返回 DOWN。

我构建了脚本,但问题是即使文件中的 url 在其网页内容中没有特定单词,它也总是返回 ONLINE。

<?php  
$allads = file("phpelist.txt");  
print("Checking urls: <br><br><br><strong>");  
for($index = 0; $index <count($allads); $index++)  
{  
$allads[$index] = ereg_replace("\n", "", $allads[$index]);  
$data = file_get_contents('$allads[$index]');  
$regex = '/save/';  
if (preg_match($regex, $data)) {  
echo "$allads[$index]</strong>...ONLINE<br><strong>";  
} else {  
echo "$allads[$index]</strong>...DOWN<br><strong>";  
}  
}  
print("</strong><br><br><br>I verified all urls from file!");  
?
4

1 回答 1

0

要在特定网页中搜索给定的字符串,我会使用stripos()(不区分大小写) 或strpos()(区分大小写) 而不是正则表达式:

if( stripos(haystack, needle) !== FALSE ) {
   //the webpage contains the word
}

一个例子:

$str = 'sky is blue';
$wordToSearchFor = 'sky';

if (strpos($str, $wordToSearchFor) !== false) {
    echo 'true';
}
else {
    echo 'Uh oh.';
}

演示!

虽然,以编程方式浏览网页并不被认为是一种好的做法,除非绝对必要,否则不应这样做。

更新:

在您的file_get_contents通话中,您正在执行以下操作:

$data = file_get_contents('$allads[$index]');  

您正在使用单引号,并且变量值不会被替换。您必须使用双引号来file_get_contents获取实际的 URL。将其替换为:

$data = file_get_contents("$allads[$index]");  

我注意到的另一件事是您ereg_replace()在代码中使用了不推荐使用的函数。看到红框了吗?强烈建议不要依赖已弃用的函数。

经过上述所有更正后,您的代码应如下所示:

$allads = file("phpelist.txt");  
print("Checking urls: <br><br><br><strong>");  

for($index = 0; $index <count($allads); $index++)  
{  
    $allads[$index] = str_replace("\n", "", $allads[$index]);  
    $data = file_get_contents("$allads[$index]");  

    $searchTerm = 'the';  

    if (stripos($data, $searchTerm) !== false) {
        echo "$allads[$index]</strong>...ONLINE<br><strong>";  
    } 
    else 
    {  
        echo "$allads[$index]</strong>...DOWN<br><strong>";  
    }  
}  

print("</strong><br><br><br>I verified all urls from file!");  
?>
于 2013-09-14T02:43:59.003 回答