【问题标题】:PHP file txt upload content validationPHP文件txt上传内容验证
【发布时间】:2014-01-12 00:00:38
【问题描述】:

我写了一个 PHP 脚本来上传一个 .txt 文件,它可以部分工作:

<?php
    $allowedExts = array("txt");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    $dest = "/etc/squid/squid.conf";
    if ((($_FILES["file"]["type"] == "text/plain")
    && ($_FILES["file"]["size"] < 170000)
    && in_array($extension, $allowedExts)))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "<div style='text-align: center'>";
            echo "Upload File Success!!<br><br>";
            echo "FIle : " . $_FILES["file"]["name"] . "<br>";
            echo "Type : " . $_FILES["file"]["type"] . "<br>";
            echo "Size : " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            
            echo "</div>";

            move_uploaded_file($_FILES["file"]["tmp_name"],
            "/var/www/squid_proxy/upload/" . $_FILES["file"]["name"]);
            copy("/var/www/squid_proxy/upload/" . $_FILES["file"]["name"],
                $dest);
        }
    }
    else
    {
        echo "<div style='text-align: center'>";
        echo "Error, File upload only .txt";
        echo "</div>";
    }
?>

文件类型和 MIME 验证都运行良好,但我想要验证文件的内容。该文件由标题构成。看这个例子:

#ADVANCED

#WIZARD

在文件上传到服务器之前,必须检查文件在第一行包含#ADVANCED,在第三行包含#WIZARD。 如果缺少标头或文件为空,则应显示错误消息。

如何验证上传文件的内容?

【问题讨论】:

    标签: php file validation upload


    【解决方案1】:

    这里$line[0] 是第 1 行,$line[2] 是第 3 行。file() 将整个文件读入一个数组。

    $lines = file($myFile); //file lines into an array
    
    if (strip($lines[0]) == '#ADVANCED' && strip($lines[2]) == '#WIZARD'){
    //success
    }
    

    编辑(由@barmar 建议)

    strip() 添加到变量$lines[0]$lines[2] 以修剪/n 字符。

    【讨论】:

    • 您需要标志FILE_IGNORE_NEW_LINES,或致电strip($lines[0])strip($lines[2])
    • @Barmar 这有必要吗?如果是,那为什么?
    • 默认情况下,每个字符串都以换行符结尾,例如"#ADVANCED\n"。这将不等于没有换行符的字符串。
    【解决方案2】:

    使用file 函数。它将返回您的 txt 文件的行数组。

    $lines = file($filename);
    // Then you can check if 
    if ($lines[0] == '#ADVANCED' && $lines[2] == '#WIZARD') {
        // do some stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2011-04-01
      • 1970-01-01
      • 2013-03-13
      • 2017-03-26
      • 2015-10-31
      • 2018-07-19
      相关资源
      最近更新 更多