تحميل ملفات PHP

باستخدام PHP، يمكنك تحميل الملفات إلى الخادم.

إنشاء نموذج تحميل ملف

سماح للمستخدمين بتحميل الملفات من النموذج مفيد للغاية.

انظر إلى النموذج التالي لتحميل الملفات HTML:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">اسم الملف:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

يرجى الانتباه إلى المعلومات التالية حول هذا النموذج:

يحدد خاصية enctype في علامة <form> النوع الذي سيتم استخدامه عند تقديم النموذج. عند الحاجة إلى بيانات ثنائية في النموذج، مثل محتويات الملف، استخدم "multipart/form-data".

يحدد خاصية type="file" في علامة <input> كيفية معالجة المدخلات كملف. على سبيل المثال، عند عرضها في المتصفح، ستشاهد زر التصفح بجانب مربع الإدخال.

注释:سماح للمستخدمين بتحميل الملفات يمثل خطراً أمنياً كبيراً. يرجى السماح فقط للمستخدمين المعتادين بتنفيذ عملية تحميل الملفات.

إنشاء سكربت التحميل

ملف "upload_file.php" يحتوي على كود لتحميل الملفات:

<?php
إذا كان ($_FILES["file"]["error"] > 0)
  {
  إذن "خطأ: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  إذن "مخزن في: " . $_FILES["file"]["tmp_name"];
  }
?>

من خلال استخدام مصفوفة PHP العالمية $_FILES، يمكنك تحميل ملفات من جهاز المستخدم إلى الخادم البعيد.

الخطأ الأول هو اسم input في النموذج، والخطأ الثاني يمكن أن يكون "name", "type", "size", "tmp_name" أو "error". مثل هذا:

  • $_FILES["file"]["name"] - اسم الملف المرسل
  • $_FILES["file"]["type"] - نوع الملف المرسل
  • $_FILES["file"]["size"] - حجم الملف المرسل، بالبايت
  • $_FILES["file"]["tmp_name"] - اسم النسخة المؤقتة للملف المخزن على الخادم
  • $_FILES["file"]["error"] - رمز الخطأ الناتج عن تحميل الملف

هذا طريقة تحميل ملفات بسيطة للغاية. بناءً على اعتبارات الأمان، يجب أن تضيف تحديدات حول من يمكنه تحميل الملفات.

تحديد تحميل الملف

في هذا السكربت، قمنا بإضافة تحديدات لتحميل الملفات. يمكن للمستخدمين فقط تحميل ملفات .gif أو .jpeg، ويجب أن تكون حجم الملفات أقل من 20 كيلوبايت:

<?php
إذا كان ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  إذا كان ($_FILES["file"]["error"] > 0)
    {
    إذن "خطأ: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    إذن "مخزن في: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

注释:لـ IE، يجب أن يكون نوع ملف jpg هو pjpeg، ولـ FireFox يجب أن يكون jpeg.

تحديد ملف تم تحميله

أمثلة أعلاه قامت بإنشاء نسخة مؤقتة من الملف المرسل إلى مجلد مؤقت PHP على الخادم.

سيختفي هذا الملف المؤقت عند انتهاء سكربت. لتحديد ملف تم تحميله، يجب نسخه إلى موقع آخر:

<?php
إذا كان ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  إذا كان ($_FILES["file"]["error"] > 0)
    {
    إذن "كود العودة: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

注释:这个例子把文件保存到了名为 "upload" 的新文件夹。