0

我目前正在制作一个下拉列表,但在下拉列表中,假设我只想包含 .txt 扩展名文件,因此任何其他扩展名(如 .php .jpg 或任何其他扩展名)都不会出现在下拉列表中。我怎样才能尽可能简单地做到这一点?

另一个问题是如果文件夹没有任何 .txt 扩展名文件,我想发出警告,则会显示错误消息。因此,即使文件夹中有其他 .jpg .php 或任何其他文件,只要文件夹中没有 .txt 文件,就会显示警告。

谁能帮我一把?

这就是我所做的,但它只显示了一个最后没有 .txt 的下拉列表,但它仍然会在下拉列表中显示其他随机文件。

if(!(is_dir("./aaa")))
{
    die("Must create a folder first, sorry");
}

    $lists = scandir("./aaa");

    echo "<form action=\"./page2.php\" method=\"get\">";
    echo "<select>";

    foreach($lists as $list)
    {
    if(($list == ".") || ($list == ".."))
        {
        continue;
        }
    echo "<option value=\"";
    echo basename($list,".txt");
    echo "\">";
    echo basename($list,".txt");
    echo "</option>";
    }
    echo "</select>";
    echo "</form>";

编辑添加了带有 $hasTxt 的 substr

<?php
if(!(is_dir("./aaa")))
{
    die("Must create a <strong>aaa</strong> folder first, sorry");
}
echo "<form action=\"./page2.php\" method=\"get\">";
echo "<select name=\"aaa\">";
    $aaa_files = scandir("./aaa"); 
$hastxt = false; 
foreach($aaa_files as $file_list) 
{
    if(($file_list == ".") || ($file_list == ".."))
    {
    continue;
    }
    if(strlen($file_list)>4 && strtolower(substr($file_list, -4))!='.txt')
    {
    continue;
    }
    else 
    {
    $hastxt = true; 
    echo "<option value=\"";
    echo basename($file_list,".txt");  
    echo "\">";
    echo basename($file_list,".txt");
    echo "</option>";
    }
}
echo "</select>";
echo "<br/><input type=\"submit\">";
echo "</form>";

if($hastxt == false) 
{
    echo "Must create text files first, sorry";
    die();
}
?>

如果文件夹没有任何 txt 文件,这就是我现在拥有的脚本会发生的情况。

在此处输入图像描述


如果没有 txt 文件但当然没有箭头,这就是我真正想要的

在此处输入图像描述

4

3 回答 3

1

您可以使用 PHP 的 substr() 函数来测试文件名:

if(substr($filename, -3) == 'txt') {
  // show file
}

见这里: http: //php.net/manual/en/function.substr.php

于 2013-02-15T05:27:11.210 回答
1

对于第一部分,就像您继续目录一样。和..,您可以继续处理非文本文件:

if(strlen($list)>4 && strtolower(substr($list, -4))!='.txt') continue;

对于警告部分,在 foreach 之前放置一个标志

$hasTxt = false;

并将其设置为 true 每当您收到您不忽略的输入时(即在 if(unwanted) continue 之后;)

$hasTxt = true;

最后,在 foreach 之后检查 $hasTxt 的值并根据需要使用它。

于 2013-02-15T05:27:34.387 回答
1

试试这个,希望它对你有用

<?php
    if(!(is_dir("./aaa")))
    {
        die("Must create a folder first, sorry");
    }

    $lists = scandir("./aaa");
    $i =0;
    foreach($lists as $list)
    {
        if (strstr($list, '.txt')) {
        $i++;
        }
    }
    if($i == 0){
        die("the folder does not have any .txt extension files");
    }

    echo "<form action=\"./page2.php\" method=\"get\">";
    echo "<select>";

    foreach($lists as $list)
    {
        if (strstr($list, '.txt')) {
            echo "<option value=\"".substr($list,0, -4)."\">".substr($list, 0,-4)."    </option>";
        }
    }
    echo "</select>";
    echo "</form>";
?>
于 2013-02-15T05:29:03.327 回答