Blackhacker نشر 7 يونيو 2016 أرسل تقرير نشر 7 يونيو 2016 أريد منع رفع الملفات إلى خادمي إلا أنواع محددة مثل jpg، فهل توجد طريقة باستخدام لغة php لفعل ذلك؟ اقتباس
0 هشام رزق الله نشر 7 يونيو 2016 أرسل تقرير نشر 7 يونيو 2016 توجد عدة طرق لفعل ذلك، أسهلها وضع الإمتدادات المسموح بها في مصفوفة ومن ثم استخدام 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 E.Nourddine نشر 7 يونيو 2016 أرسل تقرير نشر 7 يونيو 2016 توفر لغة 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> اقتباس
السؤال
Blackhacker
أريد منع رفع الملفات إلى خادمي إلا أنواع محددة مثل jpg، فهل توجد طريقة باستخدام لغة php لفعل ذلك؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.