مع PHP، فمن السهل لتحميل الملفات إلى الخادم.
ومع ذلك، مع سهولة تأتي خطر، لذا يجب دائما الحذر عند السماح تحميل الملفات!
تكوين و "php.ini" الملف
أولا، تأكد من أن يتم تكوين PHP للسماح تحميل الملف.
في الخاص بك "php.ini" ملف، ابحث عن التوجيه file_uploads، وحدد لها في:
file_uploads = On
إنشاء النموذج HTML
بعد ذلك، إنشاء نموذج HTML التي تسمح للمستخدمين لاختيار ملف الصورة التي تريد تحميلها:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
Select
image to upload:
<input type="file" name="fileToUpload"
id="fileToUpload">
<input
type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
بعض القواعد الواجب اتباعها للنموذج HTML أعلاه:
- تأكد من أن النموذج يستخدم أسلوب = "آخر"
- يحتاج النموذج أيضا following السمة: enctype = "متعدد الأجزاء / شكل بيانات". وهي تحدد نوع المحتوى لاستخدامها عند تقديم النموذج
دون شروط أعلاه، فإن تحميل ملف لا يعمل.
أشياء أخرى لاحظ:
- و type="file" سمة من <input> العلامة يظهر حقل إدخال كعنصر تحكم ملف حدد، مع "Browse" زر بجانب مراقبة المدخلات
النموذج أعلاه يرسل البيانات إلى ملف يسمى "upload.php" ، وهو ما سيخلق المقبل.
إنشاء وتحميل ملف PHP سيناريو
و "upload.php" يحتوي الملف على التعليمات البرمجية لتحميل الملف:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a
actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo
"File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
وأوضح PHP النصي:
- $ target_dir = "uploads/" - تحدد الدليل حيث الملف هو الذهاب الى وضعها
- يحدد $ target_file مسار الملف المراد تحميله
- $ uploadOk = 1 لا تستخدم حتى الآن (will be used later)
- $ imageFileType يحمل امتداد الملف من ملف
- بعد ذلك، معرفة ما اذا كان ملف الصورة هو الصورة الفعلية أو صورة وهمية
ملاحظة: سوف تحتاج إلى إنشاء دليل جديد يسمى "uploads" في الدليل حيث "upload.php" يقيم الملف. سيتم حفظ الملفات التي تم تحميلها هناك.
معرفة ما اذا كان موجود الملف إذا
الآن يمكننا أن نضيف بعض القيود.
أولا، فإننا سوف تحقق إذا كان الملف موجود بالفعل في "uploads" المجلد. إذا كان كذلك، يتم عرض رسالة خطأ، ويتم تعيين $ uploadOk إلى 0:
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
حد حجم الملف
يدعى حقل الإدخال الملف في شكل HTML اعلاه "fileToUpload" .
الآن، ونحن نريد للتحقق من حجم الملف. إذا كان الملف أكبر من 500KB، يتم عرض رسالة خطأ، ويتم تعيين $ uploadOk إلى 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
نوع الملف الحد
رمز أدناه فقط يسمح للمستخدمين بتحميل JPG، JPEG، PNG، GIF وملفات. جميع أنواع الملفات الأخرى يعطي رسالة خطأ قبل وضع $ uploadOk إلى 0:
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType
!= "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
كامل تحميل ملف PHP سيناريو
الكامل "upload.php" ملف تبدو الآن مثل هذا:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a
actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo
"File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already
exists
if (file_exists($target_file)) {
echo
"Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType
!= "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if
($uploadOk == 0) {
echo "Sorry, your file was not
uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been
uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
استكمال PHP نظام الملفات المرجعي
للإشارة كاملة من وظائف نظام الملفات، انتقل إلى لدينا كامل PHP نظام الملفات المرجعي .