猿问

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/


Helenr
浏览 138回答 2
2回答

慕娘9325324

您可以使用$_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和 imagemagickconvert需要调整。

HUWWW

您将必须编写一个阻止原始文件类型的 switch 语句,然后使用多个库将原始文件类型转换为首选文件类型。switch ($originalfiletype){case '.png'://Process image through a .png to .jpg librarybreak;case '.pdf'://Process image through a .pdf to .jpg librarybreak;case '.webm'://Process video through .webm to .mp4 librarybreak;default:echo "Your file type is not supported";break;}这个过程非常不方便和乏味,但很遗憾,没有其他办法。PHP 没有内置的库可以转换所有文件类型。
随时随地看视频慕课网APP
我要回答