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

‏ • 27 ביוני, 2006

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

למדריך זה דרוש ידע בטפסים בHTML ,ידע בסיסי בPHP ושרת שתומך בPHP4 לפחות.

חלקי המדריך:

  • יצירת הטופס.
  • טיפול בקובץ בשרת.

חלק א':

הטופס:

    <form action="uploader.php" method="post" enctype="multipart/form-data">
    בחר קובץ:
    <input type="file" name="myfile" />
    <input type="submit" value="שלח קובץ" />
    </form>

הדבר ששונה מהטופס הזה מטופס רגיל זה הקוד הזה:

    enctype="multipart/form-data"
    

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


חלק ב': טיפול בקובץ בשרת.

המערך שמכיל את הפרטים של קבצים שנשלחו לשרת הוא $_FILES
וכדי לגשת לקובץ שלנו אנחנו כותבים ככה:$_FILE['myfile'] (שים
לב שהמפתח של המערכת הוא הname של האיבר file בטופס html .
במערך $_FILES['myfile'] יש 5 איברים.

האיבר תוכן

$_FILES['myfile']['name']
מכיל את שם הקובץ המלא שנשלח לשרת.

$_FILES['myfile']['type']
מכיל את סוג הקובץ.
(חלק זה נשלח מהדפדפן, ככה שאם רוצים לבדוק את סוג הקובץ לא כדאי להסתמך על זה)

$_FILES['myfile']['size']
מכיל את גודל הקובץ בביטים(אפשר לחלק ב 1048576 כדי לקבל את המספר במגה בייטים)

$_FILES['myfile']['tmp_name']
מכיל את הנתיב לקובץ שנשמר התקית הקבצים הזמניים של הPHP(למה זה הנחוץ נראה עוד מעט…)

$_FILES['myfile']['error']
אם אין שגיאה בהעלאת הקובץ אז משתנה זה מכיל 0 אם הוא מכיל מספר אחר אז יש שגיאה. טבלת
השגיאות נמצאת כאן

יופי, אז מה עושים עם זה? /=
קודם כל נבדוק שאין שום שגיאה בהעלאה של הקובץ.

	if($_FILES['myfile']['error'] != 0) { 
		echo "שגיאה בשליחת הקובץ לשרת, קוד שגיאה: {$_FILES['myfile']['error']}"; 
	} 
	

אם אין שגיאה נמשיך הלאה:
נשמור את התקיה שבה נאחסן את הקובץ בתור משתנה בשם dir(מטעמי נוחות)

	$dir='/home/bnaya/uploaded/';
	

למנוע PHP צריכה להיות הרשאה לשמור קבצים בתקיה, בדרך כלל זה אומר לתת לה הרשאה 777.

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

	if(move_uploaded_file($_FILES['myfile']['tmp_name'], $dir . $_FILES['myfile']['name'])) { 
		echo 'הקובץ הועלה בהצלחה!'; 
	} else { 
		echo 'שגיאה בשמירת הקובץ.'; 
	} 
    

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

	$url = 'http://bnaya.be/uploaded/'; //הכתובת של התקיה, רק דוגמא 
	if(move_uploaded_file($_FILES['myfile']['tmp_name'], $dir . $_FILES['myfile']['name'])) { 
		echo "הקובץ הועלה בהצלחה!! 
		:קישור לקובץ 
		<a href='{$url}{$_FILES['myfile']['name']}'>{$url}{$_FILES['myfile']['name']}<a/>"; 
	} 
	else { 
		echo 'שגיאה בהעברת הקובץ מתקיית הקבצים הזמניים בשרת למיקום הסופי.'; 
	} 
	

הקוד במלאו:
טופס הHTML:

	<html>
	<head>
	<title>העלה קובץ</title>
	</head>
	<body> <form action="uploader.php" method="post" enctype="multipart/form-data">
	בחר קובץ: <input type="file" name="myfile" /><br />
	<input type="submit" value="שלח קובץ" />
	</form>
	</body>
	</html>
	

uploader.php:

<?php 
$dir = '/home/bnaya/uploaded/'; 
$url = 'http://bnaya.net/uploaded/'; 

if($_FILES['myfile']['error'] != 0) { 
    echo "שגיאה בשליחת הקובץ לשרת, קוד שגיאה: {$_FILES['myfile']['error']}"; 
} else { 

    if(move_uploaded_file($_FILES['myfile']['tmp_name'], $dir . $_FILES['myfile']['name'])) { 
        echo "הקובץ הועלה בהצלחה!! 
        <br /> 
        :קישור לקובץ 
        <a href='{$url}{$_FILES['myfile']['name']}'>{$url}{$_FILES['myfile']['name']}<a/>"; 
    } 
    else { 
        echo 'שגיאה בהעברת הקובץ מתקיית הקבצים הזמניים בשרת למיקום הסופי.'; 
    } 

} 
?> 

זהו סימנו!
אם תמצאו שגיאה במאמר או סתם תרצו לשאול שאלה אתם יכולים לפנות אלי ל bnaya.peretz@gmail.com.

תגיות: , ,

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