מחשביםסוגי קבצים

PHP: העלאת קובץ לשרת

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

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

בטיחות

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

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

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

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

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

יצירת טופס PHP

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

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

אבל שימו לב כי הנתונים בצורה שאתה צריך להוסיף את התכונה Enctype.

אחרת, נתונים על מטפל קובץ לא ישודרו.

איך זה אמור לעבוד?

כאשר אתה לוחץ על כפתור העיון אתה צריך תיבה שבה התבקשה לבחור קובץ.

אחרי שהוא יידרש לקבל נתיב שבו ממוקם הקובץ.

אם הנתיב אינו מופיע, לבצע את הפעולה שוב.

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

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

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

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

התאמה

בשנת העלאת קובץ PHP לשרת דורש הגדרות מסוימות, אשר אמור להיעשות בקובץ php.ini. קובץ זה מכיל הרבה הגדרות. כולם אנחנו לא צריכים. אנחנו מעוניינים שלושה קווים: file_uploads, upload_tmp_dir ו upload_max_filesize.

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

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

אתה יכול לעשות את זה במסוף על ידי חיבור דרך SSH לשרת. כל שעליך לעשות הוא להזין את ההפעלה מחדש httpd שירות הפקוד, ולאחר מכן את ההגדרות תיכנסנה לתוקף.

שיטה נוספת - הפעלה מחדש באמצעות פאנל ISP או באמצעות ספק פאנל החיוב.

קובץ Array

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

כדי לראות איזה מידע הכלול המערך, מספיק לכתוב את מטפל הקובץ הבא.

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

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

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

תחום השגיאה מכיל קוד שגיאה. זה היה קצת יותר רחוק. גודל - הגודל בבתים.

שגיאות

הנעשה באמצעות העלאת קובץ PHP תמיד מלווה קוד שגיאה. הודעת שגיאה שהוזנה "השגיאה". שגיאת המסך היא אפס.

קח למשל את הערך של כל השגיאות:

זה שנאמר לעיל לגבי פרמטר זה ניתן לציין את ה- HTML הרגיל.

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

PHP: תסריט העלאת קובץ

כמו כל בוצע בפועל? בשנת PHP העלאת קובץ מתרחשת פקודת העותק. אם אתם מעוניינים בשאלה כיצד להוריד קובץ, התשובה היא פשוט copy-, אשר עושה שימוש בשני פרמטרים - את קובץ המקור ואת קובץ היעד.

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

נניח שאתה רוצה לאפשר למשתמשים להעלות תמונה עם רזולוציה של רק GIF, JPEG או PNG. ציין שזה יכול להיות ככה.

אם ($ _ FILES [ 'file_upload'] [ 'סוג']! = "image / gif") {
הד "מצטערים, אנחנו תומכים בהורדת Gif-Files בלבד";
יציאה;
}

אם אתה רוצה לשלוח את כל 3 סוגים, פשוט להוסיף תנאי נוסף לסוג תמונה האחר.

העתקה נעשתה ככה: עותק (תמונה 1, תמונה 2).

במקרה שלנו, כאשר העבודה מתבצעת הורדה מהמחשב לשרת, אתה יכול לעשות זאת

עותק ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")

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

נקבע את התוסף יכול להיות בדרכים שונות. הכל תלוי המפתחים של למדנות. אחת הדרכים המהירות ביותר (הבדל של עשיריות השניים) לקבוע את הסיומת - זהו הקוד הבא.

PATH_INFO $ = pathinfo ($ _ FILES [ 'photo1'] [ "שם"]);

$ שלוחה = $ PATH_INFO [ 'הרחבה'];

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

כדי להוריד את הקוד יהיה כדלקמן.

/// עם תמונה

אם ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)

{

הד ( "

קובץ לא ידוע.

חזרה ... ");

יציאה;

}

///. אגיד לך על כל פרויקט בשרת מותר לטעון קבצים גדולים (וידאו), אבל יש רק תמונות, ומשתמשים צריכים להגביל

אם (($ _FILES [ "photo1"] [ "גודל"]> 1024 * 1024 * 2)

{

?>

הגודל המרבי המותר של 2 מגה

חזרה ...

יציאה;

}

// ליצור תיקיות

// ליצור תיקייה של החודש הנוכחי

אם (! file_exists ( "img /". מועד ( "M")))

{

mkdir ( "img /" מועד ( "M").);

}

// ליצור תיקייה של היום הנוכחי

אם (! file_exists ( "img /". מועד ( "M"). "/". מועד ( "ד")))

{

mkdir ( "img /" מועד ( "M") "/" מועד ( "ד") ...);

}

/// סיומת הקובץ

PATH_INFO $ = pathinfo ($ _ FILES [ 'photo1'] [ "שם"]);

$ שלוחה = $ PATH_INFO [ 'הרחבה'];

/// ליצור קובץ

$ Id = md5 (תאריך ( "YMd"));

אם (עותק ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". מועד ( "M"). "/". מועד ( "ד"). "/". $ id. שלוחה $) )

{

הד ( "קובץ הועלה בהצלחה");

}

/// כל פעולה נוספת (כניסה במסד הנתונים, וכן הלאה. נ)

}

מספר קבצים

העלאת קבצים מרובים (PHP) מתרחשת באמצעות שדות נוספים בטופס.

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

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

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

שים לב בנוסף המרובה של המילה, ואת השם ניתן כמערך []. במקרה זה, מערך $ _FILES יהיה שונה מעט. אתם תקבלו מערך של המערך.

כדי לבחון יכולים שוב להשתמש var_dump ($ _ קבצים);

כל הקבצים שלכם יוצב במערך כזה:

  1. $ _FILES [ "file1"] [ "שם"] [0]
  2. $ _FILES [ "file1"] [ "שם"] [1]
  3. וכך הלאה.

בסוגריים כתוב את מספר התיק במערך. ספירת מאפס. אנחנו מתייחסים אליהם באותו אופן, פשוט לשאול את המחזור על ידי פנייה ישירה הקוד המתואר לעיל בסוף מדד הוספת [$ i].

I = 0 $;

בעוד ($ _FILES [ "file1"] [ "שם"] [$ i] <> '')

{

/// להדביק את הקוד למעלה

}

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

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 iw.birmiss.com. Theme powered by WordPress.