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

相关推荐
勿忘,瞬间4 分钟前
多线程之进阶修炼
java·开发语言
hoiii18733 分钟前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
炘爚1 小时前
C++ 右值引用与程序优化
开发语言·c++
si莉亚1 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
清心歌1 小时前
CopyOnWriteArrayList 实现原理
java·开发语言
良木生香2 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++
忘梓.2 小时前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u2 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
星河耀银海2 小时前
C++ 模板进阶:特化、萃取与可变参数模板
java·开发语言·c++
cccccc语言我来了2 小时前
【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。
开发语言·c++·哈希算法