PHP警告:strpos():search.php中的空针

时间:2018-02-17 18:01:34

标签: php

我有一个php搜索文件,它在目录中搜索具有提交名称的文件并显示结果。我想在与PHP代码相同的文件中使用html表单,即在search.php中只有这样:

<form action="search.php" method="get"><input name="q"
type="text"> <input type="submit"></form>

<?php
$dir = '/www/posts'; 
$exclude = array('.','..','.htaccess'); 
$q = (isset($_GET['q']))? strtolower($_GET['q']) : ''; 
$res = opendir($dir);

while(false!== ($file = readdir($res))) { 
    if(strpos(strtolower($file),$q)!== false &&!in_array($file,$exclude)) 
    { 
        $last_dot_index = strrpos($file, ".");
        $withoutExt = substr($file, 0, $last_dot_index);
        echo "<a href='$withoutExt'>$withoutExt</a>"; 
        echo "<br>"; 
    }
}  
closedir($res); 
?>

但上面的代码给出了错误:Warning: strpos(): Empty needle in search.php on line 10

我尝试使用!empty这样的参数:

<?php
$dir = '/www/posts'; 
$exclude = array('.','..','.htaccess'); 
$q = (isset($_GET['q']))? strtolower($_GET['q']) : ''; 
$res = opendir($dir);

if (!empty($res)) {
    while(false!== ($file = readdir($res))) { 
         if(strpos(strtolower($file),$q)!== false &&!in_array($file,$exclude)) { 
             $last_dot_index = strrpos($file, ".");
             $withoutExt = substr($file, 0, $last_dot_index);
             echo "<a href='$withoutExt'>$withoutExt</a>"; 
             echo "<br>"; 
         }
         else {
             echo "";
         }
     }
}  
closedir($res); 
?>

但它仍然反映了错误。

请帮我摆脱这个错误。

2 个答案:

答案 0 :(得分:4)

您需要检查$q是否空虚。如果它是空的 - 搜索的重点是什么。如果opendir为空,则甚至无需运行$q

if (!empty($q)) {
    $res = opendir($dir);
    while(false!== ($file = readdir($res))) { 
        // more codes here

答案 1 :(得分:0)

以下是我修复错误的方法:

$dir = 'c:/wamp64/www/posts'; 
$exclude = array('.','..','.htaccess'); 
$q = (isset($_GET['q']))? strtolower($_GET['q']) : ''; 
if (!empty($q)) {
$res = opendir($dir);
while(false!== ($file = readdir($res))) { 
if(strpos(strtolower($file),$q)!== false &&!in_array($file,$exclude)) { 
$last_dot_index = strrpos($file, ".");
$withoutExt = substr($file, 0, $last_dot_index);
echo "<a href='/blog.php?post=$withoutExt'>$withoutExt</a>"; 
echo "<br>"; 
}
}
closedir($res); 
}
else {
echo "";
}