PHP实战:安全实现文件上传功能教程

HTML部分:

<form action="upload.php" method="post" enctype="multipart/form-data">

<input type="file" name="userfile">

<input type="submit" value="上传">

</form>

PHP部分:

<?php

$upload_dir = 'uploads/';

$max_size = 1024 * 1024; //1MB

$allowed_types = ['image/jpeg', 'image/png'];

if($_FILES['userfile']['error'] !== UPLOAD_ERR_OK){

die('上传错误:'.$_FILES['userfile']['error']);

}

if(_FILES\['userfile'\]\['size'\] \> max_size){

die('文件大小超过限制');

}

$finfo = finfo_open(FILEINFO_MIME_TYPE);

detected_type = finfo_file(finfo, $_FILES['userfile']['tmp_name']);

if(!in_array(detected_type, allowed_types)){

die('不允许的文件类型');

}

extension = pathinfo(_FILES['userfile']['name'], PATHINFO_EXTENSION);

safe_name = uniqid('file_', true).'.'.extension;

target_path = upload_dir.$safe_name;

if(!move_uploaded_file(_FILES\['userfile'\]\['tmp_name'\], target_path)){

die('文件保存失败');

}

echo '文件上传成功,保存为:'.$safe_name;

?>

另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

相关推荐
睡美人的小仙女1271 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
rayufo1 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
STCNXPARM1 小时前
Android camera之硬件架构
android·硬件架构·camera
RANCE_atttackkk1 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向2 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
一起养小猫2 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9962 小时前
Java 所有关键字及规范分类
java·开发语言
java1234_小锋3 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
2501_944525543 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
qq_417129253 小时前
C++中的桥接模式变体
开发语言·c++·算法