Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP If Else不适用于比较文件内容_Php_File_If Statement - Fatal编程技术网

PHP 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应用程序,它搜索当前目录的文件,并在每个名为email.txt的子目录中查找一个文件,然后获取文件的内容,将email.txt中的内容与给定查询进行比较,并用给定查询回显所有匹配的目录。但是它不起作用,而且问题似乎出在脚本的if-else部分,因为它没有给出任何输出

<?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,它仍然不想工作。谢谢你的回答,它不工作,但我已经用另一种方式重写了我的整个脚本,现在它完全工作了。