שאלת תם - מה כל כך נורא בPHP?
-
@צדיק-תמים אכן הרבה אתרים. לא כ"כ נוגע לאיכותה של השפה וכמה חכם להשתמש בה ב2022.
הדוגמה של var שנתת היא שינוי תחבירי, אין מאחורי זה שינוי טכנולוגי. php מפגרת טכנולוגית.
לא אכפת לי למנות דוגמאות:
א. יוצרת טריד פר בקשה
ב. היא ממוקדת לתת שליטה חזקה בHTML, לא כ"כ בתקשורת עצמה (הHTTP)
ג. אין כל דרך לשתף מידע בין בקשות בלי שמירה בדיסק.שוב, זה אכן לא חסרונות נוראים, ויש לה עדיין יתרונות. אבל כיון שהחסרנות הללו מגבילים אותה, ובפורום תכנות רוצים לעזור לאנשים לפרוץ גבולות, טבעי שיש סלידה ממקומות בהם הגבולות הם סופיים מראש.
נ.ב. הדוגמה של וורדפרס לא הכי טובה, כי לטעמי PHP מתביישת ביצירה הזו.
וורדפרס היא במקור הייתה מאוד פופולרית למשתמשים בה כבלוג. היא פשוט הייתה פה, והיא הייתה טובה בתור מוצר בלוג עבור משתמשיה (שלא היה אכפת להם בדיוק איך היא בנויה) אז כולם הלכו עליה.
כל זה גרם למפתחים להוסיף יכולות לסל הכלים שלה ולשפר את יכולת הגמישות (שני הדברים רק מזיקים כשהם בנויים על דבר גרוע).
המעגל הזה הביא את וורדפרס לאיפה שהיא. -
@צדיק-תמים
עוד חסרון שהציק לי בPHP שלא מכריזים על משתנה (אולי קיים בעוד שפות)
אז אפשר להשתמש בטעות באותו משתנה בקוד ארוך
אפשר להשתמש בטעות במשתנה שלא קיים בכלל (יש הזהרה בקובץ שגיאות אבל לא בודקים שם כל הזמן)
כך למשל בקוד הזה<?php $foo1 = "a"; $foo1 = "b"; echo "$foo2"; ?>
יהיה שגיאה של
PHP Notice: Undefined variable: foo2 in main.php on line 4
אבל הקוד ירוץ למרות השגיאה.עוד פרצת אבטחה נפוצה זה שאתה לא צריך להפעיל מחדש את השרת כדי להוסיף קוד
רק לזרוק קובץ PHP בתיקיה זה פיצ'ר נחמד אבל גם מתכון לצרות בפרט אם מישהו מצליח להעלות קובץ לשרת שלך (וזה קרה הרבה פעמים בתוספי וורדפרס שונים).בנוסף נתקלתי במפתחי PHP (כולל את עצמי בעבר) שבכלל לא מבינים מה זה HTTP ומבחינתם אתה זורק קובץ והקסם נוצר.
-
@צדיק-תמים
אתה שם קובץ ונכנס לדפדפן והקוד רץ
ואתה לא מקבל את התמונה שיש שרת HTTP שמקבל את הבקשה ומעבד אותה ומריץ קוד ומחזיר תגובה.
אני לא זוכר כרגע מה היה הבורות של המפתח PHP שנתקלתי בו, אבל היה חסר לו משהו בהבנה של איך הבקשות עובדות (זה יכול להיות במפתח בכל שפה שלא מנסה לחשוב איך זה עובד אבל בPHP זה קל יותר ליפול בזה) -
@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
עוד פרצת אבטחה נפוצה זה שאתה לא צריך להפעיל מחדש את השרת כדי להוסיף קוד
נראה לי עלוב לכנות את זה פרצת אבטחה.
גם השרת אינטרנט הוא 'פרצת אבטחה' שמאזין לכל בקשה ברשת בלי שום אימות.
בכל מקרה הפיצ'ר הזה זה המעלה של PHP...@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
אפשר להשתמש בטעות במשתנה שלא קיים בכלל (יש הזהרה בקובץ שגיאות אבל לא בודקים שם כל הזמן)
כל מתכנת נורמלי יודע לנטר שגיאות, אם לא, זה כבר בעיה במתכנת וזה קשור לזה שהתוכנה קלה מאד ללמידה ונכנסים לזה המון חובבנים.
-
@www אמר בשאלת תם - מה כל כך נורא בPHP?:
@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
עוד פרצת אבטחה נפוצה זה שאתה לא צריך להפעיל מחדש את השרת כדי להוסיף קוד
נראה לי עלוב לכנות את זה פרצת אבטחה.
גם השרת אינטרנט הוא 'פרצת אבטחה' שמאזין לכל בקשה ברשת בלי שום אימות.
בכל מקרה הפיצ'ר הזה זה המעלה של PHP...המציאות היא שזה גרם להרבה פרצות אבטחה באתרים שונים וזה לא היה קורה בשפות אחרות
זה גם באג וגם פיצ'ר אבל אי אפשר להתעלם מהחסרונות.@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
אפשר להשתמש בטעות במשתנה שלא קיים בכלל (יש הזהרה בקובץ שגיאות אבל לא בודקים שם כל הזמן)
כל מתכנת נורמלי יודע לנטר שגיאות, אם לא, זה כבר בעיה במתכנת וזה קשור לזה שהתוכנה קלה מאד ללמידה ונכנסים לזה המון חובבנים.
אני כנראה לא מתכנת נורמלי כי היה לי קשה לנטר שגיאות בPHP.
-
@www אמר בשאלת תם - מה כל כך נורא בPHP?:
נראה לי עלוב לכנות את זה פרצת אבטחה.
גם השרת אינטרנט הוא 'פרצת אבטחה' שמאזין לכל בקשה ברשת בלי שום אימות.
בכל מקרה הפיצ'ר הזה זה המעלה של PHP...אולי זה לא פרצת אבטחה, אבל זה מתכון בטוח (שהוכחה היעילות שלו) לפרצות אבטחה מהזן המסוכן יותר.
הדוגמה הפשוטה ביותר היא מנגנון העלאת קבצים ב-PHP. כל עוד המתכנת לא בודק בצורה המחמירה ביותר את הקבצים, ניתן לקבוע כמעט בוודאות שתיווצר אפשרות להריץ קוד מרוחק על המערכת שלו. קח דוגמא את הקוד הזה שהשתמשתי בו פעם (באיזה אתגר של Remote execution שמצאתי):system($_GET["shell"]);
מה שעשיתי היה די פשוט. הכנסתי את הקוד הזה לקובץ, העליתי את הקובץ לשרת, ולאחר מכן ביצעתי קריאת GET לשרת (לנתיב שהעליתי אליו את הקובץ) עם הפרמטר
shell
שמכיל את הערך של פקודה כלשהי, והוא בהחלט רץ על השרת. אם אני זוכר נכון, את אותה פגיעות בדיוק מצאו בתוסף וורדפרס הפופולארי 'ווקומרס' לפני כשנתיים. פרצה המבוססת על חוסר בבדיקת הקבצים המועלים לשרת. -
@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
הציק לי בPHP שלא מכריזים על משתנה (אולי קיים בעוד שפות)
אני משער שאתה מתכוין 'מצהירים' declare.
בהרבה שפות לא מצהירים על משתנה. הדוגמא הראשונה כנראה היא פייתון.בפייתון אם אתה משתמש במשתנה שלא הוצהר, זה מחזיר
None
(זה סוג שלnull
בפייתון. לא מדויק..) -
@nigun זה לא נכון, לרוב היוזקייסים, לזרוק שגיאה על עצם השימוש במשתנה שהערך שלו הוא
None
(בפייתון, אוundefined
ב-JS וכו').
שגיאה תיזרק לך אם יש איזו פרוצדורה שאתה מנסה לבצע מתוך הערך של המשתנה. לדוגמא אם אתה מנסה להוציא מפתח מתוך אובייקט שבעצם לא קיים, כמובן ייזרוק לך שגיאה (בפייתון/JS וכו').
אבל בהחלט יש מצבים שדווקא כן תנסה להשתמש בערך של המשתנה - גם אם הואNone
.
זה יהיה תנאים על פי הערך של המשתנה הזה, אם הוא קיים תעשה X אם לא תעשה Y וכדו' -
-
@dovid
אני מנסה להבין מה פיצ'ר בכך שאפשר להעביר משתנה שלא קיים לתוך פונקציה
למה זה לא מחזיר שגיאה שעוצרת את הקוד.
בכל אופן הכרזה על משתנה זה ביורוקרטיה קטנה שעושה הרבה סדר, אני יכול להבין את המעלה בפיצ'ר הזה (של שימוש בלי הכרזה) אבל בפועל זה נראה שהנזק רב על התועלת. -
-
עוד כאב ראש זה התאימות לאחור בין הגרסאות
אם בפייתון צריך להתמודד רק עם השינויים בין גרסא 2 ל 3
מPHP זכור לי שיש יותר כאבי ראש ויותר מעברים בין גרסאות (נראה לי שעכשיו זה אוחז ב8.1 כשיש לך שרתים שרצים רק על 5.6)
ואם אתה רוצה להריץ סקריפטים מגרסאות שונות זה כאב ראש רציני. -
@nigun אתה הופך כל תסכול שהיה לך לטענה של ממש על השפה,
זה טענות שבמקרה הטוב נכונות ל"למה אני מעדיף X" ולא לטענות למה PHP לא טוב.
מי שמחליט רציני לפתח בPHP צולח בתחילת דרכו את הטענות שלך (ודי בקלות) והם הופכים די מהר ללא רלוונטיים, הכל די מוגדר וקל לפחות מהבחינות שהעלית. -
@dovid
אני לא חושב שיש נקודה אחת שגורמת לאנשים לא לאהוב את PHP
אלא מכלול של פרטים שמציקים לכל אחד בפינה אחרת
ואני לא אומר שPHP זה שפה גרועה/רעה, אלא פשוט שפה ישנה שעדיף ללמוד שפות אחרות ולא להיכנס לפינות של השפה הזו, ומי שיש לו 10 שנות ניסיון בPHP אולי כדאי לו להישאר שם (אני אישית שמח שלא נשארתי שם, אבל זה היה טוב לשפה ראשונה). -
@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
עוד כאב ראש זה התאימות לאחור בין הגרסאות
אם בפייתון צריך להתמודד רק אם השינויים בין גרסא 2 ל 3
מPHP זכור לי שיש יותר כאבי ראש ויותר מעברים בין גרסאות (נראה לי שעכשיו זה אוחז ב8.1 כשיש לך שרתים שרצים רק על 5.6)
ואם אתה רוצה להריץ סקריפטים מגרסאות שונות זה כאב ראש רציני.דווקא בזה אני ממש חולק עליך.
ב PHP אם אתה מפתח בגרסה נמוכה יחסית, אין לך שום כאב ראש.
כאבי הראש מתחילים, כשאתה רוצה להתקין ספריה שמעודכנת לגרסה 8 ולך יש 5.6 בשרת. (אתה מכיר את זה כי עבדת עם אסטריסק, ו-FREEPBX היו בזמנו תקועים ב 5.6, זה לא מקרה סטנדרטי, כל שרתי האחסון מעדכנים מיד לגרסה האחרונה).@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
ואיך שכחתי את הקובץ PHP.INI שרוב האנשים לא מכירים את כל ההגדרות שלו
וכך יש לך הבדלים בין סביבת פיתוח לפרודקשן שזה מתכון לצרות.
(בפרט שלא ברור איפה הקובץ הזה יושב ובכל שרת אפשר למצוא אותו במקום אחר, אולי יש בזה כללים אבל אני זוכר שהיה בזה כאב ראש)זה נכון, זה קשור לזה שההגדרות חלות על שרת האינטרנט, וגם לזה שלפעמים יש 5 גרסאות PHP מותקנות על השרת (הבעיה הזאת קיימת בעוד שפות אני חושב).
-
@www אמר בשאלת תם - מה כל כך נורא בPHP?:
ב PHP אם אתה מפתח בגרסה נמוכה יחסית, אין לך שום כאב ראש.
מה אתה עושה אם יש פיצ'ר חדש ב8 שאתה ממש רוצה להשתמש בו ויש לך ספריה אחרת על השרת שתואמת רק ל5.6? גם אם זה פרוייקטים נפרדים זה כאב ראש להפריד ביניהם (אולי אני טועה וזה ממש קל להגדיר לכל פרוייקט גרסה שונה) אבל באותו פרוייקט זה נראה לי בלתי אפשרי.
-
@nigun אמר בשאלת תם - מה כל כך נורא בPHP?:
@www אמר בשאלת תם - מה כל כך נורא בPHP?:
ב PHP אם אתה מפתח בגרסה נמוכה יחסית, אין לך שום כאב ראש.
מה אתה עושה אם יש פיצ'ר חדש ב8 שאתה ממש רוצה להשתמש בו ויש לך ספריה אחרת על השרת שתואמת רק ל5.6? גם אם זה פרוייקטים נפרדים זה כאב ראש להפריד ביניהם (אולי אני טועה וזה ממש קל להגדיר לכל פרוייקט גרסה שונה) אבל באותו פרוייקט זה נראה לי בלתי אפשרי.
אני לא יודע באיזה מבנה היישום שלך בנוי, אבל יש את התחביר הזה:
if (version_compare(phpversion(), '5', '>=')) { // act accordintly }
וורדפרס למשל היא דוגמא לקוד PHP שנועד לעבוד עם טווח גרסאות אפשרי.