首页 > 解决方案 > 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/

标签: phpvalidationfile-uploaduploadtype-conversion

解决方案


您可以使用$_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


推荐阅读