כבר מזמן לא היה לי איזה פוסט חביב על PHP… לפני מעט זמן יצא לי לדבר עם קולגה מהתחום וסיפרתי לו שאני כותב patch למערכת כלשהי ומשתמש ב-PHP על מנת לכתוב אותו.
PHP? הוא התפלא, לא עושים את זה ב-BASH?
אז זהו. לא ממש חייבים. אפשר לעבוד עם PHP גם משורת הפקודה בקלות ובמהירות וכך מרוויחים כמה דברים:
- עובדים בשפה מוכרת בלי צורך ללמוד סינטקס חדש (אפילו שללמוד את זה לוקח בערך כמה שעות, אבל ניחא)
- אפשר להשאר בסביבת הפיתוח המוכרת
- אפשר להשתמש ב-API של הפריימוורק שאתם כותבים לו את ה-patch
מתי עדיף להשתמש ב-BASH? כאשר אתם עושים דברים שרלוונטיים לסביבה ולא למערכת ספציפית שמותקנת עליה. למשל משימות רוטיניות ל-nginx או לapache ודברים דומים.
הרצת PHP משורת הפקודה ב-terminal
אז איך עובדים? על מנת להריץ PHP משורת הפקודה כותבים php ואז את שם הקובץ. למשל php mypatch.php
אם זה לא עובד, יכול להיות שהמודול של php5-cli לא מותקן על הלינוקס שלכם. התקנה מהירה נוסח
sudo apt-get install php5 php5-cli
תפתור את העניין מהר מאוד.
הדפסת מידע לקונסולה
אם יש לנו סקריפט, אנחנו מן הסתם רוצים שהוא ידפיס מידע חזרה לקונסולה במידת הצורך או לדיבוג הסקריפט. איך עושים את זה? לא באמצעות print אלא באמצעות הפקודה error_log. משהו בסגנון הזה:
<?php
error_log('Hello world!');
ומה קורה אם רוצים להדפיס מערך? גם זה מאוד פשוט:
<?php
error_log(print_r($someArray, 1));
יקיר סיטבון, קורא קבוע, מציין שאפשר להשתמש ב print\echo.
קבלת פרמטרים
הרבה פעמים אני רוצה להפעיל את הסקריפט עם משתנים על מנת להגדיר לו דברים. זה יכול להיות שם של קובץ קונפיגורציות למשל, או שם קובץ הפלט שאני רוצה שהוא יוציא או מיליון דברים אחרים. איך עושים את זה? בדיוק ככה:
php myscript.php var1 var 2 var3... varN
כאשר ה-var1 ודומיו יכולים להיות כל מחרוזת שהיא.
בסקריפט עצמו אפשר לקבל את המשתנים השונים באמצעות שימוש במערך הגלובלי argv. המערך הזה מכיל באיבר הראשון שלו את שם הקובץ שהופעל בשורת הפקודה ושאר האיברים מכילים את שאר הפרמטרים.
אם אתם צריכים לצאת עם status code שישמש סקריפט אחר שמפעיל את הסקריפט שלכם, אפשר לצאת עם exit שמקבל את הפרמטר 1 או 0. בדומה ל-BASH.
בגדול יש עוד כמה פרמטרים נחמדים שאפשר להריץ יחד עם PHP, אבל המידע לעיל הוא מה שחשוב לדעת כאשר עובדים עם PHP בשורת הפקודה. אלו דברים שבאמת חבל שלא לדעת ולא תמיד חייבים לרוץ ל-BASH על כל patch למערכת זו או אחרת.