מידע מורחב

  • תאריך
  • שעה 13:52
  • ע"י
  • צפיות 1730
  • תגובות 0
  • דירוג 0 /5

החידושים החדשים של PHP 5.5 והפתעה קטנה !

Dec25
ואה ואה לא הספקנו למצמץ עברה עלינו שנה מהירה...! גרסא 5.5 יוצאת לדרך ובקרוב כנראה תשוחרר בגרסא מספיק יציבה שנוכל להשתמש בה למטרות הפרודקשן שלנו.. : )
גרסא 5.5 עומדת להיות הגרסא המזעזעת - אם לא המרעישה שהולכת להציק לכל אלה שניסו לכתוב פרוצדואלי כל הזמן ולהשאר תקועים עם MySQL.
כמובן בסוף הפוסט מחכה לכם הפתעה מטורפת של חבר תותח שלי בשם אלכס רסקין שעומד להפתיע אתכם... מוכנים? לא לגלול למטה !

אוקי עכשיו נוכל להמשיך...

אז מה בעצם ה"מכה" בגרסא הזו?
כמו החשש הגדול שהיה ברשת לקראת גרסאת PHP6 סוף סוף השימוש ב-MySQL ירד לאלתר.
אולם עדיין חיבורים ישנים המבוצעים באמצעותו ימשיכו לתפקד אך הגיע העת לעבור להרחבות הטובות MySQLi או PDO.
(המלצה אישית: לעבור ל-PDO כי הוא נותן גמישות ויציבות יותר מ-MySQLi אבל זה כל אחד והנוחות שלו..)
לכן, אין טעם ללמוד, להתנסות ולעבוד עם פונקציות Mysql_* כמו ()mysql_query ו-()mysql_fetch_assoc ודומיו...זה כבר לא יהיה פעיל.

מה הרווחנו כאן?
* ביצועי מהירות ושיפורים באגים משמעותיים שלקחו זכרון ואף גרמו להאטת התוכניות שלנו
* ייעול הפונקציה empty ו-isset לבדיקה גם של פונקציות, הפיכתן לביטוי שרירותי (arbitrary expression)
* שיפור הרחבת CURL הקיימת במגוון אפשרויות נוספות, כמו אפשרות להתחבר לשרת מייל, שרת מאובטח SSL וSSH ועוד
* הוסרה האפשרות בMYSQLI לבצע שאילתאת LOAD DATA LOCAL INFILE שגרם ללא מעט בעיות יציבות
* תיקונים באגים במספר הרחבות חשובות כמו DateTime,ZIP,SPL ועוד.

בתכל'ס מה מעניין בחידוש הזה?...

בין הדברים החדשים בגרסא:
אפשרות הצפנה חדשה של סיסמא הנקרא password_hash
נוספה יכולת finally לשפה למי שהתגעגע אליה משפות כמו JAVA
אפשרות לבדוק תוכן ריק שמוחזר בפונקציה באמצעות Isset ו-empty
פוקנצייה להמרת ערך לבוליאני ()boolvar
התווספות תמיכה בlist בלולאת ()foreach

כעת בואו נפרט על הדברים אחד אחד : )

אפשרות הצפנה חדשה הנקראת password_hash


אופציה זו מאפשרת לנו ליצור סיסמאת Hash מוצפנת בצורה חזקה שמקשה באופן משמעותי על תהליך הפריצה שלה (Brute Forece Attack) ותהליך החזרת האלגוריתם לאחור באמצעות נוסחאות ידועות כמו MD5 המבוססות טבלאות רינבו ואלגורתימים נפוצים.
הצפנה זו מאפשרת לנו אפשרות יותר יציבה וחזרה כמו שנאמר מקודם על החזרה לאחור (Revese Engneiring) של התוכן המקורי שלה.
יכולתיה מאפשרות לנו שני דבירם מרכזיים: אפשרות לשלב SALT (מחרוזת המתווספת להצפנה שלנו) ואפשרות COST או במילים אחרות - חוזק הסיסמא.
היא נתמכת החל מגרסא 5.5 בלבד, למי שבכל זאת רוצה להשתמש בפונקציה הממשת דבר דומה יכול להשתמש בפונקציה "דומה" של יוצר בשם ircmaxell מכאן https://github.com/ircmaxell/password_compat

כאשר הארגומנטים שהיא מקבלת:
string - המחרוזת אותה היא תרצה להצפין
algo - אלגוריתם בו היא תשתמש בהצפנה, אם לא יצויין היא תשתמש באלגוריתם PASSWORD_DEFAULT
array - מערך אסוסאצטיבי שמקבל cost (חוזק הסיסמא מ1 עד 10) ו-salt (תוספת המקשה לפענוח של הסיסמא)

המימוש שלה נעשה כך: (נלקח מהאתר הרשמי)
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."n";

$options = [
    'cost' => 7,
    'salt' => 'BCryptRequires22Chrcts',
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."n";


עכשיו המחרוזת שאנו מקבלים היא לא מובנת בעליל : ) כך צריך להיות !
כעת, איך אנו בודקים את הסיסמא לדוגמא בהתחברות?... אנו נשתמש בפונקציה ה"מלווה" שלה שנקראת ()password_verify.
הפונקציה הזו מקבלת בארגומנט הראשון שלה את הסיסמא כמחרוזת תווים רגילה ומשווה אל מול ה-hash שלנו במסד.
לדוגמא בבדיקה בהתחברות:
$fetch = mysqli_query("SELECT * FROM `users` WHERE `user` = 'idev'");
 $row = mysqli_fetch_assoc($fetch);
 if(password_verify('rasmuslerdorf', $row['hash'])) {
	echo 'Password is valid!';
 }else{
	echo 'Invalid password.';
 }

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

התווספות יכולת finally למנגנון TRY & CATCH

מי שהתעסק עם JAVA בעיקר מכיר את הסיפור הזה של לתפוס שגיאות במהלך ריצת התוכנית ולנסות לפענח מאיפה השגיאה הגיעה,
לשם כך יש לנו את השימוש הידוע של בלוק TRY & CATCH. לרענון הינה דוגמא קצרצרה:
try { 
  dummy_function();
 }catch(Exception $e){
  echo $e->getMessage();
 }


אז מטרת הfinally שלנו היא בעצם לעשות את הקוד שלנו יותר קצר ומאורגן כשזה נוגע לתפיסת שגיאות בתוכנית שלנו במקום לבצע הדפסה, עצירה, או שבירה של התוכנית שלנו אנחנו פשוט נותנים לו להגיע למקום "סופי" אליו היא מגיעה גם כאשר התוכנית נופלת בגלל שגיאה כזו או אחרת.
לדוגמא להמחשה:
try { 
  dummy_function();
 }finally{
  echo "I love I-Dev";
 }


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

בדיקת תוכן פונקציה באמצעות isset ו-empty

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

לדוגמא מימוש נחמד:
function dummy(){
  return null;
 }
 
 if(empty(dummy())){
   echo "It's work !";
 }

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

פונקציה להמרת ערך לבוליאני - ()boolvar
טריק נחמד, שימושי כשצריך - מחזיר עבורנו את הערך הבוליאני (TRUE או FALSE) אודות טיפוס מסוים שהוא מקבל.
דוגמאת מימוש נחמדה:
$string = "string";
 if(boolval($string)){
  echo "1 = TRUE";
 }else{
  echo "0 = FALSE";
 }

התווספות תמיכה ב-List באיטרציה על מערכים (foreach)

אחד הדברים השימושיים לדעתי, מאפשר חילוץ של מערך של מערך בתוך לולאה באמצעות list. לדוגמא:
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
    // $a contains the first element of the nested array,
    // and $b contains the second element.
    echo "A: $a; B: $bn";
}

ו...זהו ....


אה... כמובן שלא שחכתי, זה עוד היה על קצה המזלג וטעימה קטנה על הדברים החדשים שנכנסים לשפה : )
כמו שאמרתי אלכס רסקין (מי שלא מכיר שיגגל ... מהשורש GOOGLE), כיוון שהוא מרים וובינר חד-פעמי!
הוובינר הזה הולך להיות מטורף והולכים להיות בו חומרים שלא הזכרתי כאן בכוונה כמו getters & setters ו-generetors ועוד !
אה וכמובן שחכתי לציין... ישנם מספר מקומות אחרונים ! הרשמו כעת: http://phpguide.co.il/webinar+PHP+55.htm
הרשמה וההרצאה בחינם ! כולל הדגמות !
ההרצאה מתחילה במוצאי שבת, 29.12.2012 בשעה 19:00 - נא לשריין מקומות מראש, ההרצאות של אלכס מתמלאות תמיד עד אפס מקום.

בנוסף מי שמעונין ללמוד את השפה מהבסיס / את האנטומיה מההתחלה מוזמן להרשם לפרויקט הישראלי ל-PHP שנקרא www.iphp.co.il
שיהיה המון בהצלחה לכולנו !
עדיין לא נרשמת לאתר ? לחץ כאן להרשמה מהירה
נא המתן...
דירוג


עליך להתחבר כדי להגיב. לחץ כאן להתחברות.