gpt4 book ai didi

php - Foreach glob 循环不遍历 PHP 中的所有文件

转载 作者:搜寻专家 更新时间:2023-10-30 23:35:23 24 4
gpt4 key购买 nike

我目前正在设置一个搜索引擎,并且在这个循环中遇到了一些奇怪的事情,而且它似乎没有遍历所有 200 000 个文件。

我可以在服务器上看到该文件,但是当我搜索它时,它没有显示出来。其他搜索,它工作得很好。

它搜索的文件夹还有一层文件夹,所有的文件都只存放在最后一层文件夹中。所以我正在这样搜索:

glob('database/*/*/*.txt')

这是我的代码:

if (isset($_GET['q'])){
$search = $_GET['q'];
}else{die;}

$files = array();

foreach (glob('database/*/*/*.txt', GLOB_NOCHECK) as $path) {
$title = basename($path, ".txt").PHP_EOL;
if(strripos($title,$search) != false){
array_push( $files, $path );
echo $title . '<br>';
echo $path . '<br>';
}
}

错误日志什么都不显示,访问日志给出 200 响应。

还有其他方法可以在文件夹中搜索文件吗?还是我没有看到?

最佳答案

据我了解 - 您的所有标题都被提取到 foreach 循环中,但它们不包含在 array $files 中。因此,深入研究 if 语句是有意义的:

if(strripos($title,$search) != false){

php.net 的手册指出:

Warning This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

因为您应该使用 === 来检查相等状态,所以您应该使用 !==(而不是 !=)来表示不相等。因此,我要测试的第一件事是:

if(strripos($title,$search) !== false){

如果问题仍然存在,我会尝试从以下行中删除 PHP_EOL:

 $title = basename($path, ".txt").PHP_EOL;

改成这样:

 $title = basename($path, ".txt");

我不确定您为什么要在这里使用 PHP_EOL,但我认为没有必要? (虽然不确定 - 有人 - 告诉我我是否错了)。

所以剩下的代码是这样的:

foreach (glob('database/*/*/*.txt', GLOB_NOCHECK) as $path) {
$title = basename($path, ".txt");
if(strripos($title,$search) !== false){
array_push( $files, $path );
echo $title . '<br>';
echo $path . '<br>';
}
}

关于php - Foreach glob 循环不遍历 PHP 中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com