מדריך PHP: משתני צד שרת ומשתנים סופר גלובליים
משתני super global
אני בטוח ששמתם לב שיש מכנה משותף ל- $_GET, $_POST, $_REQUEST, $_COOKIE, $_SESSION שלמדנו עליהם במאמרים הקודמים. בין כל המשתנים האלו יש דמיון, כולם מערכים אסוציאטיבים, כולם מכילים מידע חיצוני. המשתנים האלו נקראים משתנים סופר גלובאליים. משתנים אלו זמינים, בדרך כלל תמיד, ומכילים נתונים שונים שחלקם קשורים לסקריפט שלנו וחלקם קשורים לשרת.
GLOBAL
מדובר במערך שמכיל את כל המשתנים הגלובליים (אלו שמוגדרים מחוץ לפונקציה). במאמר המסביר על פונקציה דיברנו על משתנים גלובליים ומשמעותם. אם קראתם היטב, הבנתם שמשתנה גלובלי הוא משתנה שהוגדר מחוץ לפונקציה ואם אנו רוצים להשתמש בו בעולמה הסגור והמבודד של הפונקציה, אנו צריכים לכתוב לפניו global. באמצעות משתנה GLOBAL$ אנו יכולים לקבל מערך אסוציאטיבי של כל המשתנים הגלובליים.
הנה דוגמא קלה להבהרת המסר:
<?php function test() { $my_var = "local variable"; print '$my_var in global scope: ' . $GLOBALS['my_var']; print '<br />'; print '$my_var in current scope: ' . $my_var; } $my_var = "global variable"; test();
יש לנו שני משתנים בעלי שם זהה לחלוטין, אחד קיים רק בעולמה הסגור של הפונקציה test והשני חי לו בשלווה בעולם הפתוח. על מנת לקבל גישה ל-my_var החיצוני (הגלובלי) אני יכול לשלוף אותו מהמערך האסוציאטיבי של GLOBAL.
SERVER_$
מדובר במערך אסוציאטיבי עם פרטים שונים ומשונים על השרת. ואני מתכוון להמון פרטים. רוצים לדעת כמה? תבצעו print_r באופן הבא:
<?php print_r($_SERVER);
יצאו לכם המון המון פרטים, משהו בסגנון הזה (עשיתי view source על הפלט שקיבלתי, על מנת להציגו באופן קריא) :
המשתנה הזה תלוי מאד בשרת ובמידע שאותו הוא מספק, אם אתם רוצים מידע על כל פריט ופריט, אתם מוזמנים לגשת לדוקומנטציה הרשמית של PHP, בחלק העוסק במשתנה הסופר גלובלי $SERVER. שם יש פירוט מקיף על כל איברי המערך, במשתנה הזה אפשר למצוא מידע מקיף על מערכת ההפעלה, על הכונן שבו התיקיה רצה ומידע על המעבדים.
אני אציין כמה מהאיברים הרלוונטיים ביותר (לדעתי ולטעמי) של המשתנה הסופר גלובאלי הזה:
$_SERVER['OS']
בדיקה של מערכת ההפעלה שעליה הסקריפט רץ. אני מקוה שאתם זוכרים שמדובר במשתנים שרצים על צד שרת, הם לא בודקים מה מערכת ההפעלה של הגולש אלא מערכת ההפעלה של השרת. למה זה חשוב? על מנת לקבוע את כיוון הסלאשים (/ או \). במערכות לינוקס, ההפרדה בין התיקיות היא ב-/ ובחלונות היא ב-\. על מנת שהסקריפט/מערכת שלכם יעבדו בכל שרת, כדאי להשתמש במשתנה הזה בכל פעם שיש קריאה לקובץ מסוים (ועל כך בהמשך).
$_SERVER['HTTP_USER_AGENT']
מערכת ההפעלה של המשתמש (הגולש), נסו להדפיס את המשתנה הזה ולהכנס אל ה-IIS עם דפדפנים שונים:
<?php print $_SERVER['HTTP_USER_AGENT'];
עם אינטרנט אקספלורר 9:
עם פיירפוקס 3.6:
וכך הלאה והלאה, זה ישתנה בהתאם לדפדפן של הגולש. האמת היא שעם השנים משתמשים פחות במשתנה הזה, בגלל שיש טכניקות אחרות ויותר יעילות בצד הלקוח לגלות את הדפדפן.
$_SERVER['REQUEST_URI']
זה משתנה שמראה לנו את ה-URI שאותו המשתמש ביקש. ההבדל בין URI ל-URL הוא בכך ש-URI מפרט בדרך כלל את הפרוטוקול (ftp,http וכו') שבו אנו משתמשים. מבחינת השימוש היומיומי, בוודאי למתחילים, אין שום הבדל. ה-URI שאנו מבקשים הוא שם הדף + פרמטרים שונים.
אלו הפרמטרים החשובים ביותר, אבל כמובן שיש עוד ואתם מוזמנים לדוקומנטציה או סתם להדפיס את $_SERVER באמצעות print_r ולבחון אותו בעיון.
תגובות בפייסבוק