Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止包含特定字母的单词在PHP中出现回声?_Php_Arrays_Directory_Echo_Glob - Fatal编程技术网

如何防止包含特定字母的单词在PHP中出现回声?

如何防止包含特定字母的单词在PHP中出现回声?,php,arrays,directory,echo,glob,Php,Arrays,Directory,Echo,Glob,这里发生的事情是检索目录中的所有文件,然后通过PHP将其回送到页面上。$blacklist中包含的文件是未被回显的文件 但是,我如何更改此设置,以便如果文件名(即要回显的文件名)包含单词末尾的一行字母.txt,那么它将被放入黑名单中,以便不会回显 这有什么意义吗 <?php $blacklist = array("one.jps", "two.txt", "four.html" , ".txt"); $files = array_diff(glob("*.*"), $bl

这里发生的事情是检索目录中的所有文件,然后通过PHP将其回送到页面上。
$blacklist
中包含的文件是未被回显的文件

但是,我如何更改此设置,以便如果文件名(即要回显的文件名)包含单词末尾的一行字母
.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"]));

?>

您可以使用正则表达式。还没有玩过语法,所以你必须在这方面下功夫

preg_match('.txt', $string)

假设您想保留
$blacklist
以供进一步使用:

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

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

    // do your things
}

这就是你需要的。请记住,上面的示例将黑名单“file.txt”,而不是“file.txts”或“file.stxt”。根据您的需要调整模式。是一个很好的PHP在线正则表达式测试工具。

除了您面临的问题外,您的代码还面临各种严重的安全风险。。。。文件内容($\u get[“file”])非常危险……你是对的,但我不想为OP做所有的工作。只要给他指出正确的方向就行了。