以不区分大小写的方式搜索文件吗?

时间:2018-12-20 00:11:40

标签: php glob

我有以下代码以递归方式在apache服务器中查找文件:

<?php
if(isset($_GET['q'])) {
    $query = $_GET['q'];
    foreach (glob("*/*{$query}*") as $filename) {
    echo "<th class=\"icon\"><img src=\"/.res/save.png\"></th><th><a href=\"{$filename}\">{$filename}</a><th class=\"desc\"><a href=\"#open-modal\" onclick=\"loadDoc('{$filename}')\"><img src=\"/.res/info.png\"></a></th></tr>";
 }
}
?>

因此,当我在地址栏中输入以下内容:http://mywebsite.org/file.php?q=File+Name时,将获得服务器中名为“ File Name.whatever”的所有文件的列表。可悲的是,当我要求“ FILE nAme”时,它没有找到,因为它的原因是敏感的。

我还尝试了以下代码:

<?php
if(isset($_GET['q'])) {
    $query = $_GET['q'];
    $cmd2 = shell_exec("find . \( ! -regex '.*/\..*' \) -type f -iname \"*{$query}*\"");
$divide2 = explode("./", $cmd2);
 unset($divide2[0]);
    if(empty($divide2))
    echo "<center><p>No results for: \"{$query}\".</p></center>";
    else foreach( $divide2 as $path2 ) { echo "<th class=\"icon\"><img src=\"/.res/save.png\"></th><th><a href=\"{$path2}\">{$path2}</a></th></tr>";
 }
}
?>

它以不区分大小写的方式搜索文件。 (是!),但是我真的很在意安全性,因为我允许用户在shell命令中输入他们想要的任何内容...他们可以输入&& destroy-server哈哈

我仍在寻找答案,但是如果这里有人知道如何解决我的问题,那会很高兴的! 干杯。

1 个答案:

答案 0 :(得分:0)

$split=str_split($_GET['q']);//split each letter

$query='';
foreach($split as $b){ //loop
    if(ctype_alpha($b)){//check its a letter
      $query.='['.strtoupper($b).strtolower($b).']';//build upercase\lower case pair
      }else{//if not a letter use raw version
      $query.=$b;
     }
}

那么就已经拥有..

foreach (glob("{$query}") as $filename) {