从上载的文件中读取时查找子字符串失败


Finding substring when reading from an uploaded file fails

为什么我不能对上传的文件执行正确的strpos函数(我首先上传文件,然后执行$site = stream_get_line($f, 4096, "'n")),并且当从服务器上手动创建的文件中将相同的内容读取到$site时,它完全可以工作。

我不知道是什么原因导致的……在这两种情况下,它似乎都能很好地读取行,但strpos在通过用户上传时与我手动创建时的工作方式不同。

这是代码:

<?php
if(!$_FILES){ 
?>
<head>
<title>Bulk Index Checker</title>
</head>
    <center>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="file" size="50" />
            <br/>
            <input type="submit" value="Check 'em!" />
        </form>
    </center>
<?php
}
else{
    echo("<center> <h1>Checking... please wait.</h1> <br><table border=1> <tr><td>Site</td><td>Indexed</td></tr>");
    $target_path = "checkupload/";
    $target_path = $target_path . basename($_FILES['file']['name']); 
    move_uploaded_file($_FILES['file']['tmp_name'], $target_path);  
    $f = fopen($target_path, "r") or exit("Unable to open file!");
    while (!feof($f))
    {
        $site = stream_get_line($f, 4096, "'n");
        $url = 'http://www.google.com/search?q=info:' . $site;
        //sleep(3);
        $contents = file_get_contents($url);
        if (strpos($contents,'<h3 class="r"><a href="/url?q='.$site)!=FALSE) {
            echo("<tr bgcolor='"Silver'"><td><a href='"".$url."'" target='"_blank'">".$site."</a></td><td>YES</td></tr>");
            echo("<br>");
        }
        else{
            echo("<tr><td><a href='"".$url."'" target='"_blank'">".$site."</a></td><td>NO</td></tr>");
        }
    }
?>
</table>
<br/>
<form>
</center>
<?php
}
?>

编辑:这是我尝试的另一种方法(使用文本区域)——基本上是一样的——只有当你只输入一个URL时,它才能正常工作。一旦你在下面输入另一个URL,当它真的是TRUE时,第一个URL就会显示FALSE。

为什么会发生这种情况?

<?php
if(!$_POST){ 
?>
<head>
<title>Bulk Index Checker</title>
</head>
    <center>
        <h1>Bulk Index Checker v1.0</h1>
        <form method="post" enctype="multipart/form-data">
            <textarea id="list" name="list" rows="10" cols="50"></textarea>
            <br/>
            <input type="submit" value="Check 'em!" />
        </form>
    </center>
<?php
}
else{
    echo("<center> <h1>Checking... please wait.</h1> <br><table border=1> <tr><td>Site</td><td>Indexed</td></tr>");
    $lines = explode("'n", $_POST['list']);
    foreach($lines as $site) {
        echo($site);
        $url = 'http://www.google.com/search?q=info:' . $site;
        sleep(3);
        $contents = file_get_contents($url);
        if (strpos($contents,'<h3 class="r"><a href="/url?q='.$site)!=FALSE) {
            echo("<tr bgcolor='"Silver'"><td><a href='"".$url."'" target='"_blank'">".$site."</a></td><td>YES</td></tr>");
            echo("<br>");
        }
        else{
            echo("<tr><td><a href='"".$url."'" target='"_blank'">".$site."</a></td><td>NO</td></tr>");
        }
    }
?>
</table>
<br/>
</center>
<?php
}
?>

尝试使用'!==='而不是"!="。

在这个阶段我没有测试的选择。看见http://php.net/manual/en/function.strpos.php(示例#2)