php文件上传(CentOS+apache+php)
Posted ExASIC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php文件上传(CentOS+apache+php)相关的知识,希望对你有一定的参考价值。
php文件上传看起来简单,真的操作起来却有很多细节要注意。
前端
注意以下几点:
1. method用post
2. enctype设
multipart/form-data
3. input的name随意设, 会作为后端的关键字, 比如
file
<form action="handle.php" method="post" enctype="multipart/form-data">
<div>
<label>文件: </label>
<input type="file" name="file" id="file">
</div>
<div>
<button type="submit">确定</button>
</div>
</div>
后端
前端选择文件并点击"确定"后, 后台会收到后把文件保存在临时目录里, 我们需要对这个临时文件进行判断和过滤, 确认没有问题在移动到指定位置. 在PHP里$_FILES['file']
里保存着这个临时文件的信息. 例如:
Array (
[name] => gvt21_centos7.tar.gz
[type] => application/x-gzip
[tmp_name] => /tmp/php1WOE4G
[error] => 0
[size] => 6524910
)
首先, 判断$_FILES['file']['error']
, 如果不等于零就说明发生了错误. 出错值为1, 表示文件大小超了. 需要去php.ini里修改post_max_size
和upload_max_filesize
. 默认值是2M, 很容易超了.
再做过滤, 就是文件类型不符或大小超出限制时, 提示出错.
第3步把临时文件移动到指定目录, 比如/upload/
.
需要说明的是,
/tmp/php1W0E4G
就是完整的文件名./tmp
其实不是linux操作系统的/tmp, PHP默认是有安全保护的, 真实保存在/tmp/systemd-private-xxx-chronyd.service-TFl06N/tmp/php1WOE4G
, post请求处理结束后会自动删除.
# get target file name
$file_full_name = $_SERVER["DOCUMENT_ROOT"] . "/upload/" . $_FILES['file']['name'];
# delete first, if already exists
if(file_exists($file_full_name)){
unlink($file_full_name);
}
$file_tmp_name = $_FILES['file']['tmp_name'];
if(move_uploaded_file($_FILES['file']['tmp_name'], $file_full_name) == false){
echo "Error: upload file failed";
die;
}
# other handle ...
注意: 要确保目标文件夹有写权限. 由于apache+PHP默认是以deamon的身份运行的, 所以需要提前用chmod
设置.
欢迎关注ExASIC
分享数字集成电路设计中的经验和方法
分享让工作更轻松
以上是关于php文件上传(CentOS+apache+php)的主要内容,如果未能解决你的问题,请参考以下文章
上传 900MB(或更大)文件:PHP、Apache、本地网络
上传 900MB(或更大)文件:PHP、Apache、本地网络
在腾讯云服务器centos7.5系统中lamp(centos7.5+apache+mysql+php)环境中安装ssl证书