PHP If Else不适用于比较文件内容
我正在尝试制作一个PHP应用程序,它搜索当前目录的文件,并在每个名为email.txt的子目录中查找一个文件,然后获取文件的内容,将email.txt中的内容与给定查询进行比较,并用给定查询回显所有匹配的目录。但是它不起作用,而且问题似乎出在脚本的if-else部分,因为它没有给出任何输出PHP If Else不适用于比较文件内容,php,file,if-statement,Php,File,If Statement,我正在尝试制作一个PHP应用程序,它搜索当前目录的文件,并在每个名为email.txt的子目录中查找一个文件,然后获取文件的内容,将email.txt中的内容与给定查询进行比较,并用给定查询回显所有匹配的目录。但是它不起作用,而且问题似乎出在脚本的if-else部分,因为它没有给出任何输出 <?php // pulling query from link $query = $_GET["q"]; echo($query); echo("<br>"); // listing a
<?php
// pulling query from link
$query = $_GET["q"];
echo($query);
echo("<br>");
// listing all files in doc directory
$files = scandir(".");
// searching trough array for unwanted files
$downloader = array_search("downloader.php", $files);
$viewer = array_search("viewer.php", $files);
$search = array_search("search.php", $files);
$editor = array_search("editor.php", $files);
$index = array_search("index.php", $files);
$error_log = array_search("error_log", $files);
$images = array_search("images", $files);
$parsedown = array_search("Parsedown.php", $files);
// deleting unwanted files from array
unset($files[$downloader]);
unset($files[$viewer]);
unset($files[$search]);
unset($files[$editor]);
unset($files[$index]);
unset($files[$error_log]);
unset($files[$images]);
unset($files[$parsedown]);
// counting folders
$folderamount = count($files);
// defining loop variables
$loopnum = 0;
// loop
while ($loopnum <= $folderamount + 10) {
$loopnum = $loopnum + 1;
// gets the emails from every folder
$dirname = $files[$loopnum];
$email = file_get_contents("$dirname/email.txt");
//checks if the email matches
if ($stremail == $query) {
echo($dirname);
}
}
//print_r($files);
//echo("<br><br>");
?>
有人能给我解释一下/修理一下吗?我真的不知道它是什么,我已经调试了很多。这将是非常亲切和感激的
亲切问候,,
Bluppie05此代码存在一些问题,可能会妨碍您获得正确的输出 如果测试没有得到任何输出,主要原因是(可能)使用了错误的变量名
//带有文件数据的变量称为$email
$email=file_get_contents($dirname/email.txt);
//测试正在检查从未给定值的$stremail
如果($stremail==$query){
echo($dirname);
}
您的scandir()
和unset()
组合也存在问题。正如您所发现的那样,scandir()
基本上提供了dir
或ls
在命令行上所能提供的一切。使用unset()
删除特定文件是有问题的,因为您必须维护硬编码的文件列表。但是,unset()
也会在数组中留下漏洞,计数会更改,但原始索引不会更改。这可能就是为什么在循环中使用$folderamount+10
。关于这个问题的更多讨论,请看一下这个堆栈溢出问题
我建议您阅读glob()
函数上的PHP手册页面,因为它将大大简化获取目录内容的过程。特别是查看GLOB_ONLYDIR
标志
最后,当使用计数器从数组中读取元素时,不要在循环的开头增加循环计数器。查看PHP手册页面中的foreach
循环,了解一种更简洁的数组迭代方法
开始调试,例如,将电子邮件内容和查询输出到屏幕。。你可能想检查一下,如果搜索词包含在电子邮件中(不相等!)我知道$stremail从来没有被赋予值,这是另一个测试的错误,但如果我使用$email,它仍然不想工作。谢谢你的回答,它不工作,但我已经用另一种方式重写了我的整个脚本,现在它完全工作了。