2015-11-17 3 views
1

Что происходит, так это то, что все файлы в каталоге извлекаются, а затем выходят на страницу через PHP. Файлы, содержащиеся в $blacklist, являются теми, которые не отражены.Как предотвратить появление слов, содержащих определенные буквы, на PHP?

Однако, как я могу изменить это так, чтобы, если имя файла (которое должно быть эхом) содержит буквы .txt все вместе в строке в конце слова, оно затем помещается в черный список, так что это не повторилось.

Имеет ли это смысл?

<?php 

    $blacklist = array("one.jps", "two.txt", "four.html" , ".txt"); 
    $files = array_diff(glob("*.*"), $blacklist); 

    foreach($files as $file) 
     echo "<div class='post'><a href='" . $_SERVER['PHP_SELF'] . "?file=" . $file . "'><p>" . $file . "</p></a></div>"; 


    if(!empty($_GET["file"]) && !in_array($_GET["file"], $blacklist) && file_exists($_GET["file"])) 
     $thesource = htmlentities(file_get_contents($_GET["file"])); 

?> 
+2

Помимо проблемы, с которой вы сталкиваетесь, ваш код открыт для множества серьезных угроз безопасности .... file_get_contents ($ _ GET ["file"]) чрезвычайно опасен ... – Shujaat

ответ

0

Вы можете использовать регулярное выражение. Не играли с синтаксисом, поэтому вам придется работать над этим.

preg_match('.txt', $string) 

http://php.net/manual/en/function.preg-match.php

+0

Недействительное регулярное выражение. – AbraCadaver

+0

Вы правы, но я не хотел делать всю работу для OP. Просто укажите ему в правильном направлении. –

1

Предполагая, что вы хотите сохранить $blacklist для дальнейшего использования:

$blacklist = preg_grep("/\b.txt\b/", $files); 

foreach (array_diff($files, $blacklist) as $whiteListedFile) { 

    // do your things 
} 

preg_grep является то, что вам нужно здесь. Имейте в виду, что в приведенном выше примере черные списки «file.txt», но не «file.txts» или «file.stxt». Отрегулируйте шаблон для ваших нужд. This является хорошим онлайн-тестером для PHP.

Смежные вопросы