اذهب إلى المحتوى
  • 0

كيف أسمح برفع نوع معين من الملفات فقط باستخدام php؟

Blackhacker

السؤال

Recommended Posts

  • 0

توجد عدة طرق لفعل ذلك، أسهلها وضع الإمتدادات المسموح بها في مصفوفة ومن ثم استخدام in_array() كما في المثال التالي:

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

$allowed = array("image/jpeg", "image/gif", "application/pdf");
if(!in_array($file_type, $allowed)) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

إذا أردت مثال كامل لرفع ملفات محددة فإليك هذا السكربت البسيط. فلو فرضنا أنك استدعيت شيفرة رفع الملف عن طريق كود HTML التالي:

<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form>

فإن محتويات ملف upload.php ستكون كالتالي:

<?php
$target = "images/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;

//This is our size condition
if ($uploaded_size > 2097152){
echo "Your file is too large. We have a 2MB limit.<br>";
$ok=0;
}

$types = array('image/jpeg', 'image/gif', 'image/png');

if (in_array($_FILES['uploaded']['type'], $types)) {
// file is okay continue
} else {
$ok=0;
} 

//Here we check that $ok was not set to 0 by an error
if ($ok==0){
Echo "Sorry your file was not uploaded. It may be the wrong filetype. We only allow JPG, GIF, and PNG filetypes.";
}

//If everything is ok we try to upload it
else{
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)){
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else{
echo "Sorry, there was a problem uploading your file.";
}
}
?>

المصدر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

توفر لغة html هذه الامكانية عن طريق توفر الوسم input على خاصية accept والتي تتيح للمبرمج إدراج نوع الملف المسموح بتحميله إلى الخادم، أي أن التحقق يتم عبر جهاز المستخدم نفسه، وهذا مثال لذلك:

 <form action="demo_form.asp">
  <input type="file" name="pic" accept="image/*">
  <input type="submit">
</form> 

بالنسبة للعديد من الامتدادات:

<input type="file" accept=".xls,.xlsx" />

على لغة Php سنستعمل أنواع  MIME  من خلال وظيفة تتضمن أنواع الملفات التي سيُسمح بتحميلها على الخادم.

إليك المثال:

function allowed_file(){

//اضافة الملفات التي يسمح بتحميلها داخل المصفوفة التالية 
 $allowed = array('application/doc', 'application/pdf', 'another/type');

//التأكد من وجود النوع المراد تحميله داخل المصفوفة السابقة 
    if(in_array($_FILES['resume']['type'], $allowed) AND in_array($_FILES['reference']['type'], $allowed)){

   //نكمل عملية التحقق عن طريق قياس حجم الملف، هنايسمح فقط بتحميل أقل من 40000

  if($_FILES["resume"]["size"] < 400000 AND $_FILES["reference"]["size"] < 400000 ){

    //تحميل الملف يعد التحقق من الشروط السابقة
    //Begin filemove here....

    }

    }
}

كإضافة: يمكن التحقق من امتداد الملف المراد تحميله إلى الخادم عن طﻻيف javascript وأظنها أكثر الطرق استعمالًا:

كود javascript:

var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];    
function Validate(oForm) {
    var arrInputs = oForm.getElementsByTagName("input");
    for (var i = 0; i < arrInputs.length; i++) {
        var oInput = arrInputs[i];
        if (oInput.type == "file") {
            var sFileName = oInput.value;
            if (sFileName.length > 0) {
                var blnValid = false;
                for (var j = 0; j < _validFileExtensions.length; j++) {
                    var sCurExtension = _validFileExtensions[j];
                    if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
                        blnValid = true;
                        break;
                    }
                }
                
                if (!blnValid) {
                    alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));
                    return false;
                }
            }
        }
    }
  
    return true;
}

كود Html المتوفر على الحقول:

<form onsubmit="return Validate(this);">
  File: <input type="file" name="my file" /><br />
  <input type="submit" value="Submit" />
</form>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...