נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

העלאת קבצים לשרת

מחבר:
בתאריך:

מדריך זה כולל ומסביר סקריפט PHP שמאפשר העלאת קבצים לשרת. ראשית, אני מסביר כיצד ליצור את טופס ה-HTML שמיועד למטרה זו. אחר כך, נכיר את הסופר גלובאל FILES_$, שבו מאוחסן המידע על הקובץ שמועלה לשרת. כמו כן, מוצג פה קוד שמעבד את הנתונים שנשלחים מהטופס, ומעביר את הקבצים ממיקומם הזמני למיקום הקבוע בתיקייה שאליה צריכים הקבצים לעלות.

 

טופס ה-HTML שמיועד להעלאת הקבצים

הטופס שמשמש להעלאת הקבצים הוא טופס רגיל, מלבד שני דברים שצריך להקפיד עליהם:

1. לתגית הפותחת של הטופס צריך להוסיף: 

enctype = "multipart/form-data" accept-charset="UTF-8"

2. צריך להוסיף לטופס שדה מיוחד שמיועד להעלאת קבצים:

<input type="file" name="file">

 

כך נראה הקוד המלא, שכולל, נוסף לשדה העלאת הקבצים, גם כפתור שליחה:

<form action="uploading_files.php" method="POST" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="העלה">
</form>

 

וכך נראה הטופס עצמו. לחיצה על כפתור "בחר קובץ" שאותו יצר שדה file, פותח חלון שבאמצעותו ניתן לבחור את הקובץ שאנחנו מעוניינים להעלות.

טופס להעלאת קבצים

 

ה-PHP שמטפל בהעלאת הקבצים

מכיוון שאנחנו מקבלים נתונים מטופס, נפעיל את הסקריפט רק בתנאי שהטופס נשלח. בהתאם, נעטוף את הקוד בתנאי הבא:

if(isset($_FILES['file'])){
   // הקוד לביצוע
}

אנחנו למעשה שואלים האם הסופר-גלובאל FILES_$ טעון, כשזה יכול לקרות רק אם הטופס נשלח.

 

הסופר-גלובאל FILES_$

הסופר גלובאל FILES_$ הוא הדרך שבה PHP מטפל בנתונים שמועלים לשרת. נתונים אילו כוללים את שם הקובץ, סוגו, שם זמני שניתן לקובץ כשמועלה לשרת, וגודלו של הקובץ בבייטים. כדי לראות את הנתונים שמופיעים בסופר גלובאל בפעולה, ניצור את הטופס, ונצרף באזור ה-header את הקוד הבא שיציג לנו את הנתונים. 

 

if(isset($_FILES['file'])){
       $file_array = $_FILES['file'];
       echo "<div dir='ltr'><pre>";
       print_r($file_array);
}

 

כשנעלה קובץ מהמחשב, נקבל את הנתונים שמביא אתו FILES_$. לדוגמה:

Array
(
    [name] => test.js
    [type] => application/javascript 
    [tmp_name] => C:Program Files (x86)EasyPHP-12.0 mpphpF0D5.tmp 
    [error] => 0 
    [size] => 445 
)

 

הקוד שמטפל בהעלאת הקובץ לשרת

מסעיף קודם אנחנו יכולים ללמוד את הדרך לבנות את הקוד שיטפל בהעלאת הקובץ לשרת, וכך אכן נעשה. הקוד הבא לוקח את הנתונים מהסופר-גלובאל, ומאחסן אותם במשתנים שיסייעו לנו בהמשך.

if(isset($_FILES['file'])){ //האם בכלל נשלח הקובץ באמצעות הטופס
     // נאחסן כל אחד מהערכים לתוך משתנה
     //זה השם המקורי שנרצה לשמור עליו גם אחרי ההעברה
     $fname  = $_FILES['file']['name'];
     //סוג הקובץ יכול לשמש להגבלת סוגי הקבצים שאנחנו מתירים להעלות
     $ftype  = $_FILES['file']['type'];
     // מכאן נצטרך להעביר את הקובץ לתיקייה הקבועה
     $ftmp   = $_FILES['file']['tmp_name'];
     // קוד שגיאה
     $ferror = $_FILES['file']['error'];
     // גודלו של הקובץ בבייטים
     $fsize  = $_FILES['file']['size'];
}

 

נשתמש בנתונים שאספנו בסעיף קודם כדי ליצור תנאים להעלאת הקובץ. בדוגמה זו, נוודא שאין שגיאה בהעלאת הקובץ (אנחנו צריכים קוד שגיאה 0), נוודא שגודלו של הקובץ לא חורג מעבר ל-1MB שזה 1048576bytes, ונאפשר העלאת קבצים מסוג תמונה בלבד. כך זה נראה:

if($ferror == 0){// נבדוק שאין שגיאה בהעלאה
      if(!empty($fname)){// נבדוק שיש שם לקובץ
           if($fsize <= 1048576){// גודלו של הקובץ לא יחרוג מ-1 מגה בייט
               if($ftype == "image/jpg" || $ftype == "image/jpeg" || $ftype == "image/png"){ //רק קבצי תמונות
                      // העברת הקובץ למקומו הקבוע תעשה כאן
               }
           }
      }
}

 

כדי להעביר את הקובץ למקומו הקבוע נשתמש בפקודה move_uploaded_file, לפי התחביר הבא:

move_uploaded_file(השם_הקבוע, המיקום_הקבוע, השם_הזמני)

כך ייראה הקוד, כשאת השם הזמני (ftmp$) ואת השם הקבוע (fname$) אנחנו לוקחים מהסופר-גלובאל FILES_$. בנוסף, צריך ליצור תיקייה שאליה תתבצע העלאת הקובץ (location$).

 $location = "uploads/"; // מיקום התיקייה הקבועה
 if(move_uploaded_file($ftmp, $location.$fname)){// העברת הקובץ למקומו הקבוע
      echo "הקובץ הועלה בהצלחה";
 } 

 

שימו לב שאת הפונקציה move_uploaded_file עטפנו בתנאי (if), וזה מפני שהיא יכולה להחזיר true במקרה שהיא הצליחה להעביר את הקובץ למקומו הקבוע או false במידה ולא הצליחה בכך. נשתמש בתכונה זו כדי לספק חיוויים לגולש באתר שמעלה את הקובץ. באופן דומה, כדאי שנספק חיוויים לכל אותן שגיאות שעלולות לפגוע בהעלאת הקובץ. כך זה נראה:

if(isset($_FILES['file'])){
   
    $fname  = $_FILES['file']['name'];
    $ftype  = $_FILES['file']['type'];
    $ftmp   = $_FILES['file']['tmp_name'];
    $ferror = $_FILES['file']['error'];
    $fsize  = $_FILES['file']['size'];
 
if($ferror == 0){
    if(!empty($fname)){
        if($fsize <= 1048576){
             if($ftype == "image/jpg" || $ftype == "image/jpeg" || $ftype == "image/png"){ // רק קבצים מתאימים יועלו לשרת
                      $location = "uploads/"; // מיקום התיקייה הקבועה
                      if(move_uploaded_file($ftmp, $location.$fname)){// העברת הקובץ
                          echo "הקובץ הועלה בהצלחה";
                      } else { echo "שגיאה בהעלאת הקובץ לשרת.";}
              } else { echo "מותר להעלות רק קבצי תמונות.";}
          } else {echo "אסור שגודלו של הקובץ יחרוג מ-1MB";}
       } else {echo "נראה ששמו של הקובץ חסר.";}
    } else { echo "אירעה שגיאה כללית בזמן העלאת הקובץ.";}
} else {echo "אתה מוזמן להעלות את הקובץ.";}

 

לסיכום, זה הקוד המלא שמאפשר את העלאת הקבצים לשרת.

<!doctype html>
<html>
<head>
<?php
if(isset($_FILES['file'])){ //האם בכלל נשלח הקובץ באמצעות הטופס
    // נאחסן כל אחד מהערכים לתוך משתנה
   $fname  = $_FILES['file']['name'];
   $ftype  = $_FILES['file']['type'];
   $ftmp   = $_FILES['file']['tmp_name'];
   $ferror = $_FILES['file']['error'];
   $fsize  = $_FILES['file']['size'];
 
if($ferror == 0){// נבדוק שאין שגיאה בהעלאה
   if(!empty($fname)){
      if($fsize <= 1048576){
         if($ftype == "image/jpg" || $ftype == "image/jpeg" || $ftype == "image/png"){ // רק קבצים מתאימים יועלו לשרת
              $location = "uploads/"; // מיקום התיקייה הקבועה
              if(move_uploaded_file($ftmp, $location.$fname)){// ההעלאה עצמה מטופלת בשורה זו
                  echo "הקובץ הועלה בהצלחה";
              } else { echo "שגיאה בהעלאת הקובץ לשרת.";}
          } else { echo "מותר להעלות רק קבצי תמונות.";}
      } else {echo "אסור שגודלו של הקובץ יחרוג מ-1 MB";}
    } else {echo "נראה ששמו של הקובץ חסר.";}
  } else { echo "אירעה שגיאה כללית בזמן העלאת הקובץ.";}
} else {echo "אתה מוזמן להעלות את הקובץ.";}
 
?>
</head>

<body>
<form action="uploading_files.php" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
    <input type="file" name="file">
    <input type="submit" value="submit">
</form>
</body>
</html>

כל מדריכי ה-PHP

 

הוסף תגובה חדשה

 

= 6 + 8