PHP

PHP (ראשי תיבות רקורסיביים של PHP Hypertext Preprocessor, שבמקור התבססו על Personal Home Page) היא שפת תסריט המיועדת בעיקר לתכנות יישומי אינטרנט בצד השרת, אך יכולה לרוץ על המחשב האישי באמצעות מפרש. התחביר של השפה דומה לזה של C והסמנטיקה דומה לזו של Perl. שפת PHP נוצרה במקור על ידי רזמוס לרדורף, אך בצורתה הנוכחית נכתבה על ידי זאב סורסקי ואנדי גוטמנס. PHP היא אחת משפות התכנות הנפוצות ביותר.

== תולדות השפה ==
רזמוס לרדורף (Rasmus Lerdorf) חיפש דרך קלה להכניס נתוני קורות חיים דרך האינטרנט באמצעות מפענח שפה שירוץ בצד השרת. בשנת 1994/5 הוא יצר את מפענח השפה PHP/FI (כלומר Personal Home Page tools / Forms Interpreter) שנועד בעיקר לטיפול בטפסים. לרדורף פיתח גם את הגרסה השנייה, PHP/FI 2.

השפה שבנה לרדורף הייתה מסורבלת במקצת ושונה מהשפה המוכרת כיום. זאב סורסקי ואנדי גוטמנס, שני מפתחים ישראליים מהטכניון, פיתחו מהיסוד את שפת PHP המוכרת לנו כיום, והעניקו ל-PHP את הפירוש הרקורסיבי: PHP Hypertext Preprocessor. לאחר שלרדורף הסכים להפסיק את הפיתוח של PHP/FI, החליטו סורסקי וגוטמנס להוציא את השפה שפיתחו כגרסה השלישית, PHP3, כהמשך לגרסה השנייה של לרדורף וכדי להבהיר ש-PHP3 מחליפה את PHP/FI 2. שפת PHP3 הייתה הגרסה הראשונה שהייתה מלאה, איפשרה הרחבה לתמיכה בבסיסי נתונים ובפרוטוקולים שונים, והיא השפה המוכרת כיום. סורסקי וגוטמנס ממשיכים בפיתוח השפה בעזרת חברת Zend Technologies שהקימו יחדיו, הוציאו את PHP4 ולאחריה את PHP5, וב-2015 הוכרזה PHP7. בסימון הגרסאות דילגו על המספר 6: לאחר 13 שנים של עבודה על הגרסה הוחלט לדלג מספר.

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

כשפה לתכנות יישומי אינטרנט בצד השרת, PHP אינה עוסקת במשימות שמתבצעות בצד הלקוח, כלומר בדפדפן. בהתאם לכך, PHP יוצרת תוכן, דף HTML, XML, תמונה או כל אובייקט אחר, ושולחת אותם אל הדפדפן, אך היא אינה מפענחת אותם – זו מלאכתו של הדפדפן. באופן דומה, שפת PHP משלבת בדפים, במידת הצורך, תסריטי JavaScript או VBScript ורכיבי Flash, לביצוע במחשב הלקוח (קוד PHP אינו מגיע אל מחשב הלקוח, אלא רק הפלט שיצר קוד זה).

PHP היא אחת השפות הראשונות שנבנו במיוחד לתכנות אתרים דינמיים באינטרנט. בין הכלים המקבילים לה ניתן למנות את Ruby on Rails ו-JSP (של Sun, מפתחת Java) וכן את ASP (של Microsoft). ל-PHP מספר יתרונות:
* השפה קלה להבנה וללמידה. במבנה השפה ניכרת השפעת שפת C, ובמידה מסוימת, גם Java. היכרות מוקדמת עם שפות אלו ללא ספק מסייעת לתהליך ההתאקלמות.
* בשימוש ותכנות נכון, שפת PHP מספקת אבטחה גבוהה מאוד וחוסמת כניסה של מחשבים אחרים למערכת.
* ניתן להריץ את מנוע PHP על מגוון רחב של מערכות הפעלה ושרתים, כך ש-PHP אינה מוגבלת לשרתים או למערכות הפעלה מסוימות.
* שפת PHP מותאמת בעיקר לעבודה עם אתרים ברשת. למעשה, ניתן לבנות אתר שלם עם קובץ PHP אחד. אתר ויקיפדיה, למשל, בנוי כולו באמצעות PHP.
* שפת PHP היא שפת "קוד פתוח" (open source), ולכן כמעט כל אחד יכול לפתח את השפה, והיא מופצת בחינם.

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

== דוגמאות קוד ==
זאת דוגמה לתוכנית Hello World טיפוסית:

<div style="direction: ltr;">
<syntaxhighlight lang="php">
<?php
 echo "Hello World";
?>
</syntaxhighlight>
</div>

<div style="direction: ltr;">
<syntaxhighlight lang="php">
<?php
 print "Hello World";
?>
</syntaxhighlight>
</div>
(שתי הפעולות הנ"ל יעשו את אותה עבודה, אך נהוג להשתמש בדוגמה הראשונה)

הקוד שלהלן ידגים כיצד ניתן להדפיס את כתובת ה-IP של המחשב שצפה בקוד זה.

<div style="direction: ltr;">
<syntaxhighlight lang="php">
<?php
 echo $_SERVER["REMOTE_ADDR"];
?>
</syntaxhighlight>
</div>

שפת PHP תומכת בקבלת משתנים מהכתובת (טפסים בשיטת GET) הקוד הבא מדגים שימוש באפשרות זאת.
<div style="direction: ltr;">
<syntaxhighlight lang="php">
<?php
echo "Your name is: {$_GET['name']}";
?>
</syntaxhighlight>
</div>
אם מידע מהטופס נשלח באמצעות HTTP POST, נוכל לגשת למידע באמצעות המשתנה הגלובלי <code>POST_$</code>.

אם ניכנס לכתובת http://localhost/file.php?name=Bob (כאשר localhost/file.php מייצג את מיקום ושם הקובץ) נקבל את הפלט:
<div style="direction: ltr;">
 Your name is: Bob
</div>

הקוד הבא מדגים התחברות למסד נתונים מסוג MySQL וביצוע שאילתא.
<div style="direction: ltr;">
<syntaxhighlight lang="php">
<?php
mysql_connect("HostName", "UserName", "Password") //התחברות למסד הנתונים
 or die(mysql_error()); //אם ההתחברות נכשלה, הפסק את ריצת הקוד
mysql_select_db("DataBaseName") //בחירת מסד נתונים
 or die(mysql_error()); //אם בחירת המסד נכשלה (מסד לא קיים או שם שגוי, לדוגמה), הפסק את ריצת הקוד
$result = mysql_query("SELECT * FROM `students` WHERE `Fname` = 'David' and `Lname` = 'Robinson' LIMIT 1;") //בחירת נתונים מטבלה
 or die(mysql_error()); //או הפסקת ריצת הקוד, במקרה של שגיאה
$row = mysql_fetch_assoc($result); //המרת התוצאות למערך אסוציאטיבי
echo "Personal Information\n"; //הדפסת פלט שהתקבל מהשאילתה
echo "First Name: {$row['Fname']}\n";
echo "Last Name: {$row['Lname']}\n";
echo "Grade: {$row['grade']}\n";
echo "Age: {$row['age']}";
?>
</syntaxhighlight>
</div>

וכאשר ניכנס לדף, הפלט שיתקבל הוא:
<div style="direction: ltr;">
<syntaxhighlight lang="text">
Personal Information
First Name: David
Last Name: Robinson
Grade: 7th
Age: 13
</syntaxhighlight>
</div>

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

<div style="direction: ltr;">
<syntaxhighlight lang="php">ֿ
<?php
class Car
{
 /**
 * The car color
 * @var String
 */
 private $color;

 /**
 * Initialize a new car
 * @param String $color - the car color
 */
 public function __construct($color)
 {
 $this->color = $color;
 }

 /**
 * Get the car color
 * @return String
 */
 public function getCarColor() {
 return $this->color;
 }

 /**
 * Set the car color
 * @param String $color - the car new color
 * @return Void
 */
 public function setCarColor($color) {
 $this->color = $color;
 }
}

$myRedCar = new Car("Red");
$myBlueCar = new Car("Blue");
print( "I have two cars, one of them is " . $myRedCar->getCarColor() . " And the other is " . $myBlueCar->getCarColor() );
$myBlueCar->setCarColor("Yellow");
print( "<br />Tomorrow, I will replace my blue car color to " . $myBlueCar->getCarColor() );
?>
</syntaxhighlight>
</div>

== גרסאות ==
{| class="wikitable"
|+ מקרא
|-
! צבע
! זמן
|-
| style="background:salmon;"| אדום
| גרסה ישנה
|-
| style="background:#FCED77;"| צהוב
| גרסה ישנה שעדיין נתמכת
|-
| style="background:#a0e75a;"| ירוק
| גרסה נוכחית
|-
| style="background:#FED1A0;"| כתום
|גרסת בטא
|-
| style="background:skyBlue;"| כחול
| גרסה עתידית
|}

{| class="wikitable"
|-
! style="width:70px;"| גרסה
! style="width:70px;"| תאריך שחרור
! style="width:70px;"| תאריך סופי לתמיכה בגרסא
! הערות
|-
| style="background:salmon;"| 1.0
| 1995-06-08
|
| השם הראשון בשחרור הגרסה הראשונה הרשמית היה Personal Home Page.
|-
| style="background:salmon;"| 2.0
| 1997-11-01
|
|
|-
| style="background:salmon;"| 3.0
| 1998-06-06
| 2000-10-20
| הגרסה הראשונה שפותחה על ידי יותר ממפתח אחד, בגרסה זו הבסיס של מפרש השפה נכתב מחדש על ידי המפתחים החדשים.
|-
| style="background:salmon;"| 4.0
| 2000-05-22
| 2001-01-23
| בגרסה זו יצא לראשונה מנוע הזנד, מפרש נוסף לשפה שפותח על ידי מתכנתים ישראלים.
|-
| style="background:salmon;"| 4.1
| 2001-12-10
| 2002-03-12
| בגרסה זו הופיעו לראשונה משתנים גלובליים מיוחדים במבנה של מערך. (<code> $_SESSION </code>, <code> $_GET </code>, <code> $_POST </code>)
|-
| style="background:salmon;"| 4.2
| 2002-04-22
| 2002-09-06
|
|-
| style="background:salmon;"| 4.3
| 2002-12-27
| 2005-03-31
| בגרסה זו נעשה לראשונה שימוש בממשק שורת פקודה.
|-
| style="background:salmon;"| 4.4
| 2005-07-11
| 2008-08-07
|
|-
| style="background:salmon;"| 5.0
| 2004-07-13
| 2005-09-05
| עם גרסה זו שוחררה הגרסה השנייה של מנוע הזנד.
|-
| style="background:salmon;"| 5.1
| 2005-11-24
| 2006-08-24
| נוסף PHP Data Objects לשפה כדרך להתחברות וטיפול במסדי נתונים.
|-
| style="background:salmon;"| 5.2
| 2006-11-02
| 2011-01-06
| בגרסה זו התווספה לראשונה תמיכה ב-JSON.
|-
| style="background:salmon;"| 5.3
| 2009-06-30
| 2014-07
| שיפור התמיכה בWindows נוספה ספרייה ייחודית לטיפול וניהול של מסדי נתונים מסוג .MySQL
|-
| style="background:salmon;"| 5.4
| 2012-03-01
|2015-09
| תמיכה בסינטקס מקוצר במערכים, הסרה של פונקציות הקשורות לסשנים מטעמי אבטחה, צריכה יעילה יותר של זיכרון, שיפור בביצועים.
|-
| style="background:salmon;"| 5.5
| 2013-06-20
|2016-06
| Generators.
|-
| style="background:#FCED77;" | 5.6
|2014-08-28
|2017-08
| שדרוגים מינוריים ותיקוני באגים.
|-
|6.0
|לא שוחררה
|
|שחרור הגרסה בוטל.
|-
| style="background:salmon;" | 7.0
|2015-12-03
|2018-12-03
| גרסה שלישית של Zend Engine, הכוללת שיפור בביצועים ותיקוני באגים.
|-
| style="background:#FCED77;" | 7.1
|2016-12-01
|2019-12-01
| טיפוס החזרה ריקה (void return), כימוס קבועים במחלקות
|-
| style="background:#FCED77;" | 7.2
|2017-11-30
|2020-11-30
|
|-
| style="background:#FCED77;" | 7.3
|2018-12-06
|2021-12-06
|
|-
| style="background:#a0e75a;" | 7.4
|2019-11-28
|2022-11-28
|
|-
| style="background:#FED1A0;" | 8.0
|26 בנובמבר 2020
|26 בנובמבר 2023
|מהדר ה- JIT – Just In Time (ריצה בזמן אמת). מערכים המתחילים במספר שלילי<ref></ref>. תמיכה בהוספת תכונות (Attributes) לחלקי מסוימים בקוד<ref></ref><ref></ref><ref></ref><ref></ref>. התאמה לביטוי (Match Expression)<ref></ref>. הצהרה על משתנים שיקבלו סוגי תוכן מסוימים (<ref></ref>union types).
|-
| style="background:skyBlue;" | 8.1
|?? נובמבר 2021
|?? נובמבר 2024
|
|}

== ראו גם ==
* מונחים בתוכנה
* XAMPP

== קישורים חיצוניים ==

* 

== הערות שוליים ==

קטגוריה:שפות תכנות
קטגוריה:תוכנה חופשית
קטגוריה:טכנולוגיות צד-שרת
קטגוריה:עיצוב אתרי אינטרנט
קטגוריה:פיתוח יישומי ווב