返回包含字符串文件的文件名的数组的Php代码

时间:2016-07-20 03:05:56

标签: php json

我试图创建一个不接收任何内容的Php文件并检查文件夹上的每个文件,在其中搜索一个字符串。它回显了一个里面有字符串的文件名数组。有没有办法,可能内存使用率低?

非常感谢你。

2 个答案:

答案 0 :(得分:0)

要实现这样的目标,建议您阅读PHP中的DirectoryIterator课程,file_get_contentsstrings

以下示例说明如何读取给定目录($ dir)的内容并使用strstr在每个文件的内容中搜索特定的字符串($ contents):

<?php

$dir = '.';

if (substr($dir, -1) !== '/') {
    $dir .= '/';
}

$matchedFiles = [];

$dirIterator = new \DirectoryIterator($dir);

foreach ($dirIterator as $item) {
    if ($item->isDot() || $item->isDir()) {
        continue;
    }

    $file = realpath($dir . $item->getFilename());

    // Skip this PHP file.
    if ($file === __FILE__) {
        continue;
    }

    $contents = file_get_contents($file);

    // Seach $contents for what you're looking for.
    if (strstr($contents, 'this is what I am looking for')) {
        echo 'Found something in ' . $file . PHP_EOL;
        $matchedFiles[] = $file;
    }
}

var_dump($matchedFiles);

此示例中有一些额外的代码(向$ dir添加尾部斜杠,跳过点文件和目录,跳过自身等等),我鼓励您阅读和了解。

答案 1 :(得分:-1)

<?php
$folderPath = '/htdocs/stock/tae';
$searchString = 'php';
$cmd = "grep -r '$searchString' $folderPath";
$output = array();
$files = array();
$res = exec($cmd, $output);
foreach ($output as $line) {
    $files[] = substr($line, 0, strpos($line, ':'));
}
print_r($files);