php - 这只会允许某些扩展吗?

标签 php

我发现这个片段说将只允许某些文件类型。它会工作吗?有人可以绕过它来上传他们想要的任何文件类型吗?有人可以解释 substr 部分吗,我不明白它是如何工作的..

<?php
function CheckExt($filename, $ext) {
    $name = strtolower($filename);
    if(substr($name, strlen($name) -3, 3) == $ext)
        return true;
    else
        return false;
}
?>

最佳答案

检查扩展的更好方法

function checkExt($filename, $ext)
{
  $fnExt = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
  if(!is_array($ext)) {
    $ext = (array)$ext;
  }
  $ext = array_map('strtolower', $ext);
  return in_array($fnExt, $ext);
}

你可以这样调用它

var_dump(checkExt('test.temp', 'tmp')); // false
var_dump(checkExt('test.temp', array('tmp', 'temp'))); // true

避免使用 substr,因为扩展长度未知(您也可以使用 substr 和 strrpos,但 php 为您提供了此功能)

关于php - 这只会允许某些扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066275/

相关文章:

javascript - 从 mySql 数据库在 php 中返回 JSON

php - mysql_connect() 访问被拒绝

php - 使用 PHP 和 OOP 方法从 MySQL 生成 CSV 文件(mysqli->connect 等)

php - 从 SimpleXMLElement 到 SimpleXMLIterator

php - 使用 PHP 和 Curl 登录 Google,Cookie 关闭?

php - 如何将类别和子类别放在带有 optgroup 的选择框上,只需使用 PHP 进行一次查询?

PHP x86如何在没有外部程序的情况下获得> 2 GB文件的文件大小?

php - 登录 Joomla 平台 11 JLog

php - 限制在并发的时间段添加一行

php - Cartalyst/Sentinel 的数据库设置