دورة php للمبتدئين الدرس الثامن عشر


فهاد الدرس  الثامن عشر من دورة php للمبتدئين غادي نكملوا الدورة ديالنا غادي نشوفوا كيفاش نديرو ل upload ل fichier ديالنا يعني كيفاش نرسل ونخزن واحد الصورة أولا ملف في مجلد عن طريق الفورم فغادي نشوفو:
- كيفاش نتحققوا من الحجم ديال الملف لي كيترسل.
- وايضا نحددو نوع الملف.
- ونتحققوا واش الملف كاين مسبقا.


1- إضافة فورم التحميل

فباش نتمكن من ارسال الملف خصني أولا نزيد الفورم لي كنعطيها :
- method post يعني غادي نصيفط المعلومات.
- action index.php يعني fichier غادي يترسل عبر نفس الملف لي هو index.php.
- وحاجة مهمة لي هي :
enctype="multipart/form-data"
لي كتعني بلي الفورم غادي تصيفط 
fichier.
- ول input type file لي غادي يمكنا باش نختارو ل fichier لي بغينا.  
الكود لي زدنا هو :

                                //index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Php Cours</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
    <script src="main.js"></script>
</head>
<body>
    <form action="index.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file" id="file">
        <input type="submit" value="valider">
    </form>
</body>
</html>
                            

2- إضافة كود التحميل

من بعد مزدنا الفورم ديالنا غادي نزيدو الكود لي غادي يمكن من تحميل الملف أول حاجة زيد dossier جديد سميه uploads فيه غادي يكونوا الملفات لي غادي نحملوا من بعد فالكود :
- عندي ل variable $_FILES لي فيها كنسترجع المعلومات ديال الملف لي ترسل كاين الإسم الحجم وغيرها من المعلومات. 
- عندي dir$ لي كنحدد بها المجلد لي زدنا لي هو uploads.
- عندي target$ لي كتاخد ل fonction basename ديال dir$ لي كتجمع الملف مع المجلد فين غادي يتزاد.
- عندي variable $uploaded لي غادي نحتاجوها من بعد عطيتها true.
- عندي ext$ لي كتاخد ل extension ديال ل fichier واش pdf ولا png ولا jpg...
- منبعد كنخدم بل fonction move_uploaded_file لي كتاخد ل fichier والمسار فين غادي يتزاد وكتزيدو يلا تزاد كنعرض ميساج بلي تزاد متزادش كنعرض ميساج ديال الخطأ.
الكود لي زدنا هو :

                                //index.php

<?php
if(isset($_POST['submit'])){
    $dir = "uploads/";
    $target = $dir.basename($_FILES['file']['name']);
    $uploaded = true;
    $ext = strtolower(pathinfo($target,PATHINFO_EXTENSION));
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) {
        echo "Le fichier ". basename( $_FILES["file"]["name"]). " est téléchargé.";
    } else {
        echo "Une erreur est survenue veuillez réessayer plutart";
    }
}
?>
                            

3- التحقق من حجم الملف قبل التحميل

فباش نتحقق من حجم الملف لي حملنا كيف قلنا قبل عندي ل variable FILES_$ لي هي array فيها المعلومات الخاصة بالملف لي اختارينا.
هنا كنخدم بل propriété size ديالها لي كتمكني من استرجاع الحجم ديال الملف فزدت الكود لي فيه :
- variable $message لي غادي يتعرضوا فيها رسائل الخطأ.
منبعد ب if كنتحقق واش الحجم ديال الملف مكيفوتش 300000 KO تقدر تدير الحجم لي بغيتي غير متفوتش 8 ميغا.
فيلا كان الحجم فايت la taille لي حددت كن afficher message كيقول بلي الملف راه فايت الحجم المحدد وكنعطي لل variable $uploaded false.
من بعد كنتحقق يلا كانت ال variable $uploaded كتساوي true كنحمل الملف مكنتش كنعرض الميساج.
الكود لي زدنا بعد التعديل :

                                <?php
if(isset($_POST['submit'])){
    $dir = "uploads/";
    $target = $dir.basename($_FILES['file']['name']);
    $uploaded = true;
    $message = '';
    $ext = strtolower(pathinfo($target,PATHINFO_EXTENSION));
    if ($_FILES["file"]["size"] > 300000) {
        $message  = "le fichier dépasse la taille maximale autorisée";
        $uploaded = false;
    }
    if($uploaded === true){
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) {
            echo "Le fichier ". basename( $_FILES["file"]["name"]). " est téléchargé.";
        }else{
            echo "Une erreur est survenue veuillez réessayer plutart";
        }
    }else{
        echo $message;
    }
}
?>
                            

4- التحقق واش الملف كاين من قبل

فباش نتحقق من أن الملف مكاينش فالمجلد قبل من التحميل كاين عندي ل fonction file_exists لي كتاخد المسار ديال الملف وكتحقق واش كاين.
فالكود لي زدنا كنتحقق واش الملف كاين كان كن afficher message بلي ل fichier déjà كاين مكنش كنحمل الملف الكود لي زدنا هو :

                                    //index.php

<?php
if(isset($_POST['submit'])){
    $dir = "uploads/";
    $target = $dir.basename($_FILES['file']['name']);
    $uploaded = true;
    $message = '';
    $ext = strtolower(pathinfo($target,PATHINFO_EXTENSION));
    if ($_FILES["file"]["size"] > 300000) {
        $message  = "le fichier dépasse la taille maximale autorisée";
        $uploaded = false;
    }
    if(file_exists($target)){
        $message  = "le fichier existe déja";
        $uploaded = false;
    }
    if($uploaded === true){
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) {
            echo "Le fichier ". basename( $_FILES["file"]["name"]). " est téléchargé.";
        }else{
            echo "Une erreur est survenue veuillez réessayer plutart";
        }
    }else{
        echo $message;
    }
}
?>
                                

5- التحقق من ل extension دبال الملف

فيلا بغيت مثلا الفورم ديالي نحمل بها غير الصور فكنحدد ل extension لي بغيت انا مثلا هنا فالكود كنتحقق بلي ل variable $ext لي هي ل extension ديال ل fichier مكتخالفش png,jpg,jpeg,gif ولي هما الأنواع ديال الصور لي كاينين فيلا حاول المستخدم تحميل شي ملف pdf مثلا غادي تعرض رسالة خطأ فالميساج الكود لي زدنا هو :

                                    //index.php

<?php
if(isset($_POST['submit'])){
    $dir = "uploads/";
    $target = $dir.basename($_FILES['file']['name']);
    $uploaded = true;
    $message = '';
    $ext = strtolower(pathinfo($target,PATHINFO_EXTENSION));
    if ($_FILES["file"]["size"] > 300000) {
        $message  = "le fichier dépasse la taille maximale autorisée";
        $uploaded = false;
    }
    if(file_exists($target)){
        $message  = "le fichier existe déja";
        $uploaded = false;
    }
    if($ext != "jpg" && $ext != "png" && $ext != "jpeg"
    && $ext != "gif" ) {
        echo "L'extension de fichier n'est pas autorisé";
        $uploaded = false;
    }
    if($uploaded === true){
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) {
            echo "Le fichier ". basename( $_FILES["file"]["name"]). " est téléchargé.";
        }else{
            echo "Une erreur est survenue veuillez réessayer plutart";
        }
    }else{
        echo $message;
    }
}
?>