如何限制 PHP 文件上传的文件类型和大小?
PHP 文件上传:有效限制文件类型和大小
在 PHP 中,控制文件上传并确保特定文件类型的接受至关重要。一位用户最近遇到了现有验证代码的问题:
<code class="php">//check file extension and size $resume= ($_FILES['resume']['name']); $reference= ($_FILES['reference']['name']); $ext = strrchr($resume, "."); $ext1 = strrchr($reference, "."); if (!(($_FILES["resume"]["type"] == "application/doc") || ($_FILES["resume"]["type"] == "application/docx") || ($_FILES["resume"]["type"] == "application/pdf" )) && (($_FILES["reference"]["type"] == "application/doc") || ($_FILES["reference"]["type"] == "application/docx") || ($_FILES["reference"]["type"] == "application/pdf")) && (($ext == ".pdf") || ($ext == ".doc") || ($ext == ".docx")) && (($ext1 == ".pdf") || ($ext1 == ".doc") || ($ext1 == ".docx")) && ($_FILES["resume"]["size"] < 400000) //accept upto 500 kb && ($_FILES["reference"]["size"] < 400000)) { //stop user } else { // allow files to upload }</code>
据该用户称,此代码允许未经授权的文件类型(例如 TXT)通过,并且不强制执行大小限制。
解决方案:依靠 MIME 类型和适当的大小检查
为了解决这些问题,建议采用更强大的方法:
<code class="php">function allowed_file(){ //Allowed mime-type files $allowed = array('application/doc', 'application/pdf', 'another/type'); //Validate uploaded file type if(in_array($_FILES['resume']['type'], $allowed) AND in_array($_FILES['reference']['type'], $allowed)){ //Check file size if($_FILES["resume"]["size"] < 400000 AND $_FILES["reference"]["size"] < 400000 ){ //File types and size are accepted, proceed with file processing } } }</code>
解释:
此改进的代码使用 MIME(多用途互联网邮件扩展)类型而不是文件扩展名。 MIME 类型准确地表示文件格式并且不易被操纵。此外,它还会独立检查简历和参考文件的文件大小,确保限制得到执行。
以上是如何限制 PHP 文件上传的文件类型和大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

TosecurelyConnectToaremoteMysqlServer,Usesshtunneling,configuremysqlforremoteaccess,setFireWallrules,andConsidersSlencryption 。首先,stardansshtunnelwithssh-l3307:localhost:3306user@remote-Server-server-nandConnectViamySql-h127.0.0.0.0.1-p3307.second,editmys

ForeignkeysinMySQLensuredataintegritybyenforcingrelationshipsbetweentables.Theypreventorphanedrecords,restrictinvaliddataentry,andcancascadechangesautomatically.BothtablesmustusetheInnoDBstorageengine,andforeignkeycolumnsmustmatchthedatatypeoftherefe

mysqldump是用于执行MySQL数据库逻辑备份的常用工具,它生成包含CREATE和INSERT语句的SQL文件以重建数据库。1.它不备份原始文件,而是将数据库结构和内容转换为可移植的SQL命令;2.适用于小型数据库或选择性恢复,不适合TB级数据快速恢复;3.常用选项包括--single-transaction、--databases、--all-databases、--routines等;4.恢复时使用mysql命令导入,并可关闭外键检查以提升速度;5.建议定期测试备份、使用压缩、自动化调

开启MySQL慢查询日志并分析可定位性能问题。 1.编辑配置文件或动态设置slow_query_log和long_query_time;2.日志包含Query_time、Lock_time、Rows_examined等关键字段,辅助判断效率瓶颈;3.使用mysqldumpslow或pt-query-digest工具高效分析日志;4.优化建议包括添加索引、避免SELECT*、拆分复杂查询等。例如为user_id加索引能显着减少扫描行数,提升查询效率。

处理MySQL中的NULL值需注意:1.设计表时关键字段设为NOTNULL,可选字段允许NULL;2.查询判断必须用ISNULL或ISNOTNULL,不能用=或!=;3.可用IFNULL或COALESCE函数替换显示默认值;4.插入或更新时直接使用NULL值需谨慎,注意数据源和ORM框架处理方式。NULL表示未知值,不等于任何值,包括自身,因此查询、统计、连接表时要特别小心,避免漏数据或逻辑错误。合理使用函数和约束可以有效减少因NULL带来的干扰。

要重置MySQL的root密码,请按以下步骤操作:1.停止MySQL服务器,使用sudosystemctlstopmysql或sudosystemctlstopmysqld;2.以--skip-grant-tables模式启动MySQL,执行sudomysqld--skip-grant-tables&;3.登录MySQL并根据版本执行相应的SQL命令修改密码,如FLUSHPRIVILEGES;ALTERUSER'root'@'localhost'IDENTIFIEDBY'your_new

要查看MySQL数据库和表的大小,可直接查询information_schema或使用命令行工具。1.查看整个数据库大小:执行SQL语句SELECTtable_schemaAS'Database',SUM(data_length index_length)/1024/1024AS'Size(MB)'FROMinformation_schema.tablesGROUPBYtable_schema;可获取所有数据库的总大小,也可加WHERE条件限定具体数据库;2.查看单个表大小:通过SELECTta

字符集和排序规则问题常见于跨平台迁移或多人开发时,导致乱码或查询不一致。核心解决方法有三:一要检查并统一数据库、表、字段的字符集为utf8mb4,通过SHOWCREATEDATABASE/TABLE查看,用ALTER语句修改;二要在客户端连接时指定utf8mb4字符集,在连接参数或执行SETNAMES中设置;三要合理选择排序规则,推荐使用utf8mb4_unicode_ci以确保比较和排序准确性,并在建库建表时指定或通过ALTER修改。
