מדריך PHP

מדריך PHP: העלאת קבצים

‏ • Internet Israel

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

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>upload a file</title>
    </head>
    <body>

<form enctype="multipart/form-data" action="uploader.php" method="POST">
        Choose a file to upload: <input name="uploadedfile" type="file" />
        <input type="submit" value="Upload File" />
</form>
    </body>
</html>

כפי שניתן לראות מדובר בטופס פשוט שבפשוטים, מה שמעניין ב-form הוא ה-method שלו (רק POST בקבצים), ה-action שלו (מוביל ל-uploader.php שיטפל בקובץ) וה-entype שלו.

ה-input הוא מסוג file עם השם uploadedfile – השם חשוב מאד! כפתור ה-submit הוא פשוט.

עכשיו ניגש לצד השרת ונראה איך אנו מקבלים את הקובץ.

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

בואו ניצור את uploader.php ונשתמש בטופס להעלות קובץ מסוים! את הטופס יצרנו תחת השם form.html, ניצור קובץ php בשם uploader.php ונכניס לתוכו את הטקסט הבא:

<?php

print_r($_FILES);

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

Array of supergloabl FILE

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

אנחנו לא רוצים רק לבחון את הקובץ אלא לשמור אותו בשרת שלנו. בואו ניצור תיקית upload בשרת שלנו:

Creating uploads directory

לתיקיה הזו אנו נעלה את הקובץ שלנו. ועכשיו בואו ונכניס את מנגנון ההעלאה ל-uploader.php:

<?php

$target_path = 'uploads/'.$_FILES['uploadedfile']['name']; 

$result = move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path);

if($result) {
    print "The file has been uploaded";
}
else {
    echo "There was an error uploading the file, please try again!";
}

ראשית אנו מגדירים את השם של הקובץ, במקרה הזה התיקיה + שם הקובץ כפי שמופיע במחשב של הגולש.

שנית, אנו משתמשים בפונקצית move_uploaded_file שמעבירה את הקובץ מהתיקיה הזמנית שלו אל התיקיה הקבועה שלנו. במידה וההעברה מצליחה, משתנה result מקבל ערך TRUE.

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

וזה הכל!

כמובן שאסור לנו בתכלית האיסור להעלות כזה קובץ לשרת שלנו, כל משתמש יכול באמצעות הקוד הזה להעלות כל קובץ לשרת! זה מסוכן מאד ויכול לגרום נזקים רציניים – מסתימת השרת ועד העלאת קבצים זדוניים ו-וירוסים.

תגיות: , ,

רן בר-זיק

מתכנת PHP מנוסה ובעל ידע רב בפיתוח לאינטרנט על בסיס LAMP. מומחה במערכות דרופל, ג'ומלה ו-וורדפרס. שולט היטב בכל מה שקשור לפרונט אנד: JavaScript: jQuery ו-MooTools,ActionScript 2/3 וכמובן HTML 5 + CSS 3.אינטרנט ישראל: www.internet-israel.com

תגובות בפייסבוק

חדש! אחסון אתרים של וובמאסטר

שירות אחסון אתרים
המקצועי של וובמאסטר!

מומחים באירוח אתרי
WordPress, Joomla, Drupal

  • שרתי לינוקס עם CloudLinux, LiteSpeed
  • 1GB דיסק SSD, 10GB תעבורה חודשית
  • ממשק ניהול cPanel, תעודת SSL חינם

עכשיו במחיר היכרות:
רק 420 ש"ח לשנה!