משתנים מחוץ ל-PHP

טפסי HTML (GET ו POST)

כאשר נשלח טופס לסקריפט PHP , כל המשתנים מטופס זה יהיו זמינים בסקריפט. אם ההגדרה של track_vars מאופשרת, משתנים אלו ימוקמו במערכים האסוציאטיבים $HTTP_POST_VARS, $HTTP_GET_VARS, ו\או $HTTP_POST_FILES, בהתאמה למקור המשתנים.

למידע נוסף בנושא יש לעיין בפרק משתנים מוגדרים מראש.

דוגמה 7-1. משתנה פשוט בטופס

<form action="foo.php" method="post">
    Name: <input type="text" name="username"><br>
    <input type="submit">
</form>

כאר הטופס הנ"ל נשלח, הערך שמכיל שדה הטקסט בטופס יהיה זמין במשתנה $HTTP_POST_VARS['username']. אם אופציית register_globals מאופשרת, המשתנה יוגדר גם כמשתנה $username שמוגדר בטווח המשתנים הגלובלי.

הערה: כאשר הוראת הקונפיגורציה magic_quotes_gpc מאופשרת, מושפעים ערכי משתנים של GET, POST וערכי עוגיות באופן שערך כמו (It's "PHP!") ישתנה בצורה אוטומטית ל (It\'s \"PHP!\"). תהליך זה נדרש לצורך הכנסת מידע לבסיס נתונים. יש לעיין גם במידע על addslashes(), stripslashes() ו- magic_quotes_sybase.

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

דוגמה 7-2. משתני טופס מורכבים

<form action="array.php" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        <option value="stuttgarter">Stuttgarter Schwabenbr&auml;u
        </select>
    <input type="submit">
</form>

ב- PHP 3 קיימת הגבלה למימד אחד בלבד במערכי הטפסים. ב- PHP 4 לא קיימת הגבלה כזו.

משתני טופס של כפתור שליחה גרפי

ניתן להגדיר תמונה ככפתור שליחה של טופס במקום כפתור שליחה סטנדרטי:

<input type="image" src="image.gif" name="sub">

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

עוגיות HTTP

PHP תומכת בצורה שקופה בעוגיות HTTP לפי הגדרתן ב- Netscape's Spec. עוגיות הן מנגנון המאפשר אגירת מידע בדפדפן ועל ידי-כך מאפשרות מעקב או זיהוי המשתמשים. ניתן להגדיר עוגיה בעזרת הפונקציה setcookie(). עוגיות הן חלק מכותר ה- (HTTP header) HTTP ולכן קריאה לפונקציה setcookie() חייבת להתבצע לפני שנשלח פלט כלשהו לדפדפן. הגבלה זהה חלה גם על הפונקציה header(). כל עוגיה שנשלחת מהלקוח הופכת באופן אוטומטי למשתנה PHP בדומה לאופן הפעולה בשימוש ב שיטות GET ו- POST.

ניתן לקבוע לעוגיה אחת מספר ערכים על-ידי הוספת [] לשם העוגיה. לדוגמה:

setcookie("MyCookie[]", "Testing", time()+3600);

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

דוגמה 7-3. דוגמת SetCookie

$Count++;
setcookie("Count", $Count, time()+3600);
setcookie("Cart[$Count]", $item, time()+3600);

משתני סביבה

PHP מגדירה באופן אוטומטי משתני סביבה כמשתני PHP רגילים.

echo $HOME;  /* Shows the HOME environment variable, if set. */

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

נקודות בשמות משתנים נקלטים

בדרך-כלל PHP לא תשנה את שם המשתנה המועבר לסקריפט. אולם, יש לציין כי תו הנקודה אינו תו תקין בשם משתנה. מסיבה זו הדוגמה הבאה לא תקינה:
$varname.ext;  /* invalid variable name */
במקרה זה המפרש יראה משתנה בשם $varname, שאחריו אופורטור לחיבור מחרוזות ואחריו המילה 'ext' שאינה מוכרת כמילה שמורה וחסרת הגדרה כלשהי.

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

הבחנה בין סוגי משתנים

ב- PHP אין הפרדה בין סוגי משתנים ובדרך-כלל התבצעות המרות לפי הצורך ולכן לא תמיד ברור מהו סוג המשתנה בכל זמן נתון. ב- PHP מספר פונקציות למציאת סוג המשתנה: gettype(), is_long(), is_double(), is_string(), is_array(), ו- is_object().