Поиск файлов без учета регистра? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть следующий код, который рекурсивно находит файлы на моем сервере 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», он не находит его, так как его CASE SenSItiVe.

Я также попробовал следующий код:

<?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>";
 }
}
?>

Он ищет файлы в случаенечувствительным образом.(Да!), Но я действительно обеспокоен безопасностью, так как я позволяю пользователям вводить все, что они хотят, внутри команды оболочки ... Они могут вводить && destroy-server хаха

Я все еще ищу ответ, но есликто-то здесь знает, как решить мою проблему, я буду более чем счастлив!Приветствия.

1 Ответ

0 голосов
/ 20 декабря 2018
$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) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...