当前位置: 首页 > news >正文

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服务商更加稳定。

相关文章:

  • SQL进阶之旅 Day 5: 常用函数与表达式
  • K8s边缘集群赋能工业自动化:从传感器监控到智能决策的全流程升级
  • 跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
  • UE5 蓝图,隐藏一个Actor,同时隐藏它的所有子物体
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()
  • 【STM32】HAL库 之 CAN 开发指南
  • JS高级 - 对象
  • 十一、Samba文件共享服务
  • 2025年- H55-Lc163--124. 二叉树的最大路径和(深搜)--Java版
  • 以知识管理赋能 DevSecOps,加速关键领域软件自主演进
  • 字符串day7
  • 11.12 LangGraph全局共享状态实战:200ms实现50+仓库AI协同,效率飙升!
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力
  • 拆解汽车HMI设计:如何用3D可视化提升驾驶安全感?
  • 服务发现Nacos
  • CMake指令:file()
  • Unity Sherpa-onnx 笔记
  • K8s入门(4)Kubernetes的技术演进
  • VR三维数字空间还原
  • 卓力达蚀刻工艺:精密制造的跨行业赋能者
  • 移动网站 做优化/关键词优化如何
  • 天津建设协会网站首页/廊坊百度关键词优化怎么做
  • 四川建设银行社会招聘网站/网络软文
  • 冠辰网站建设/怎么样建网站
  • 个人 备案 多个网站吗/营销策略有哪些
  • 成都网站制作的公司/上海单个关键词优化