11
تشکر

چک کردن نوع فایل در PHP

نحوه آپلود فایل در PHP

نحوه آپلود فایل در PHP

در مطلب “آپلود مطمئن فایل در PHP” به کارهایی که باید در هنگام آپلود فایل انجام شود اشاره کردیم. یکی از این کارها چک کردن پسوند فایل آپلود شده بود. که به راحتی میتوانیم از طریق مشخصه type فایل نوع پسوند را مشخص کنیم. اما این را هم گفتیم که که این کار به تنهایی سودی ندارد و باید نوع Mime هم مشخص شود. در این مطلب در مورد این دو کار آموزش هایی داده خواهد شد.

البته پیش از این نحوه کار با تابع exif_imagetype برای چک کردن Mime در مطلب “نحوه آپلود فایل در PHP” داده شده بود. اما در این مطلب به صورت مشخص تری با تابع کارآمد finfo_file این کار را انجام میدهیم.

در ادامه با ما باشید…

در ابتدا یک صفحه به نام index.php درست کرده و کدهای زیر را در آن قرار میدهیم.

<!DOCTYPE html>
<html>
<head>
  <title>Check Mime Type</title>
</head>
<body>
  <h1>Upload a file and see Mime type</h1>
  <form action="result.php" enctype="multipart/form-data" method="post">
    <label>File:</label>
    <input type="file" name="myFile" required />
    <br />
    <input type="submit" value="Send" />
  </form>
</body>
</html>

در صفحه index.php ما میتوانیم یک فایل را آپلود کنیم که action فرم آن برابر result.php است. خب در کنار همین صفحه یک فایل دیگر به نام result.php درست کرده و کدهای زیر را درون آن قرار میدهیم.

<?php
  $myFile = $_FILES&#91;"myFile"&#93;;
  
  echo "<b>File type is: </b>" . $myFile["type"];

در کدهای بالا در خط دوم ابتدا مشخصات فایلی که آپلود شده است را درون متغیر myFile قرار میدهیم و در خط بعد type آن را چاپ میکنیم. اما گفتیم این کار قابل اعتماد نیست.

برای مثال یک فایل را انتخاب کنید و به صورت دستی پسوند آن را به png تغییر دهید. برای مثال من فایل  feed.xml را به feed.png تغییر دادم و آن را آپلود کردم نتیجه ای که من گرفتم این بود:

File type is: image/png

در حالی که کاملا اشتباه است. و فرمت فایل xml است و فقط پسوند آن به png تغییر کرده است.

برای تشخیص فرمت صحیح فایل از Mime برای اینکار استفاده میکنیم. برای تشخیص Mime راه های مختلفی وجود دارد. یکی از رایجترین راه ها استفاده از تابع finfo_file است که ما هم از این روش استفاده میکنیم. پس کدهای داخل فایل result.php را به صورت زیر تغییر میدهیم:

<?php

  $myFile = $_FILES&#91;"myFile"&#93;;

  //Echo Type
  echo "<b>File type is: </b>" . $myFile["type"] . "<br />";
  
  //Echo Mime
  $finfo = new finfo(FILEINFO_MIME_TYPE);
  $mime = $finfo->file($myFile["tmp_name"]);
  echo "<b>Mime type is: </b>" . $mime;

همانطور که میبینید خطوط 9 تا 11 برای چک کردن Mime است. که از روش شی گرایی استفاده شده است.

حالا من فایل feed.xml را که به feed.png تغییر داده بودم دوباره آپلود میکنم و نتیجه برابر زیر میشود:

File type is: image/png
Mime type is: application/xml

همانطور که میبینید مقداری که در خط دوم چاپ شده است صحیح است. به این ترتیب شما هم میتوانید فایل های آپلود شده در سایتتان را به این روش چک کنید.

ولی حتما از نکات دیگری که در مطلب “آپلود مطمئن فایل در PHP” ذکر شده نیز استفاده کنید.

همچنین لیست کاملی از Mime Typeها را میتوانید در اینجا ببینید.

نکته: این روش متاسفانه در نسخه wamp 2.2 من با PHP 5.4.3 در Window 7 خطا میدهد. اما مطمئن باشید که در سرور بدرستی کار میکند (چک شده است).

 


نظرات این مطلب بسته است.