php - PHP根据文件类型验证上传和转换文件
问题描述
我必须按照以下代码使用 php 上传文件:
<!DOCTYPE html>
<html>
<head>
<title>Upload your files</title>
</head>
<body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
<p>Upload your file</p>
<input type="file" name="uploaded_file"></input><br />
<input type="submit" value="Upload"></input>
</form>
</body>
</html>
<?PHP
if(!empty($_FILES['uploaded_file']))
{
$path = "uploads/";
$path = $path . basename( $_FILES['uploaded_file']['name']);
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
echo "The file ". basename( $_FILES['uploaded_file']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
}
?>
它的工作,但很好我的问题是如何添加/实现基于文件类型的安全验证并转换文件?
所有图像文件应转换为jpg 类型,所有视频文件应转换为mp4 类型。
在上传过程中,我还应该randon()
为文件添加名称。
重要提示:验证后,所有图像都应该去upload/images/
,所有视频都应该去upload/videos/
解决方案
您可以使用$_FILES["file"]["type"]
获取上传文件类型,但这可能不准确。您可以使用以下代码获取文件类型。
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $temp_name);
finfo_close($finfo);
然后你可以检查是否$mime_type
在类似的东西中,
'image/jpeg' => FILE_TYPE_JPG,
'image/jpg' => FILE_TYPE_JPG,
'image/png' => FILE_TYPE_PNG,
'image/gif' => FILE_TYPE_GIF,
'video/mp4' => FILE_TYPE_MP4,
'video/webm' => FILE_TYPE_WEBM,
从mimetype
上传的文件中,您可以过滤您想要的图像和视频并删除不需要的文件。然后将图像和视频移动到不同的目录。
要将视频传输到 mp4,您可以使用ffmpeg -i example.mov example.mp4
要将图像传输到 jpg,您可以使用convert 0000.png 0000.jpg
对于随机名称,您可以将md5_file($file_name)
其用作文件名。
请注意,当您转换视频和图像时,可能会有更多参数ffmpeg
和 imagemagick需要调整。convert
推荐阅读
- javascript - 如何在 php 中处理来自 ajax 的数组
- node.js - JSON 未定义,数据丢失在哪里?
- angular - 即使没有必要也自动滚动 onkeydown
- json - 在 Swift 中解析 Gravatar Profile JSON
- python - 将项目列表视为单个项目错误:如何在已抓取的字符串中的每个“链接”中查找链接
- java - 尝试使用 Servlet 打包 REST App 时如何修复“无法转换为 javax.servlet.Servlet”错误
- node.js - 在 MongoDB 块中返回 404
- javascript - 您可以使用 Puppeteer 在提示框的文本字段中输入内容吗?
- r - 在 R 中,有没有办法使用滞后来获取两个不同列中两次之间的时间差,但忽略所有空值?
- docker - VS BuildTools 不会安装在 windows server 2016 上的 docker 容器中