שימושון php | שימושון למתקדמים - לתועלת הציבור
-
קודם כל תודה ל @011371 שכתב את זה בפורום הישן.
וכן תודה ל @חנון-המרבה ול @עידן שנתנו את הקישור.
בשרשור זה תמצאו הסברים על פקודות ופונקציות שימושיים הנוגעים לשימוש בapi בשפה פשוטה וברורה המובנת גם למתחילים
והתחלנו:
בהתחלה זה הכותרות ואח"כ הפירוט.
פתיח לקוד php<?php
סיומת לקוד php
?>
מפריד בין פקודות
;
משתנה
$
פקודת הפֶּלֶט: הַדְפֶּס!
print
GET - הקובץ מקבל נתונים מהעולם שבחוץ
$_GET['ערך']
מתמטיקה בapi ←כולל הדגמה מפורטת איך לעשות שלוחת מחשבון api
+ - * /
משפטי תנאי בשפת php ←המשך מחשבון api
if(תנאי) {פקודה; } else {פקודה; } //סימנים לוגיים לשימוש בתנאים == שווה ערך ל… < קטן מ… > גדול מ… ! שונה מ... === שווה בדיוק לתוים
פתיח לקוד php
<?php
כל קוד php תקני חייב להתחיל בסימון זה
סימון זה "מסביר" למעבד של המחשב שלפניו הוראות בשפת php
וכך המעבד "יודע" להשתמש בתוכנת הphp המותקנת במחשב כדי לפענח את משמעות הקוד ולבצע את הפעולות המופיעות בו(אנו נוטים לפעמים לומר שהקוד php "מבצע" פעולה זו או אחרת , למעשה כמובן שהקוד הוא לא יותר מטקסט של הוראות שאותם המעבד מבצע)
סיומת לקוד php
?>
זה אומר למעבד: סיימנו! אתה יכול קצת לנוח עד שנקרא לך שוב…
הקוד php יעבוד גם אם לא נציין את הסיומת ובכל זאת נוהגים לציינו למנוע בלבולים
★במקרה של קוד php המשולב בתוך קובץ המכיל קודים נוספים דוגמת html הסיומת עלולה להיות קריטית לפעולתו התקינה של הקובץ!
מפריד בין פקודות
;
"נקודה פסיק"
זה השם של התו הקריטי ביותר בשפה
יצרתם קוד, אבל משהו לא עובד?
דבר ראשון תחפשו איפה שכחתם לשים ;חובה לסגור כל פקודה בסימן הזה , אחרת זה פשוט לא יעבוד!
משתנה
$
הסמל של הדולר נבחר להיות הסמל של לב ליבה של שפת php המשתנה
מה זה משתנה?
בדרך כלל אנו משתמשים בנתונים שונים מעבדים אותם ומחזירים תשובה ללקוח
הנתון שמשתנה בכל פעם נקרא כמובן בשם "משתנה"★להדגמה נציין כאן לקוד של חוקר המדגים איך אפשר לבנות קוד שיקריא את מספר המערכת אליה מחוברים
הנתון המשתנה בדוגמא הוא מספר המערכת , שחוקר בחר לציין אותו בתור
$ApiDID
בתחילת הקובץ כתוב מה אומר המשתנה
$ApiDID=הערך שהתקבל מהשלוחה במערכת שלכם*;
(*בהמשך נלמד איך כותבים את זה בשפת php.. כרגע זה בעברית רק להדגמה)
ובהמשך הקוד ניתן לראות את המשתנה חוזר על עצמו כמה פעמים כאשר נותנים הוראות :תבדוק האם אכן יש כזה ערך וכו' עד שלבסוף המשתנה משולב בתשובה שמוחזרת לapi "מספר המערכת שאליה אתם מחוברים הוא $ApiDID"
←לתשומת ליבכם השם של המשתנה הוא עניין לטעמך האישי והקוד היה עובד מצוין אם היינו קוראים למשתנה בכל שם אחר כגון $aaa למשל ומחליפים כמובן את כל המקומות שבהם מופיע המשתנה לאותו שם, כמובן שרצוי לקרוא שמות המובנים וקשורים לפעולה אותה המשתנה מייצג כדי שלא תתבלבלו אח"כ
(אז איך קראתי לכתובת? ואיך לגיל?)≈כמובן שבקובץ אחד יכול להיות יותר ממשתנה אחד עד אין סוף
לדוגמא אפשר להגדיר
$c=$a*$b;
בשביל שהמעבד יכפיל את משתנה a במשתנה b ולתוצאה הוא יקרא בשם משתנה c
(הסימן* מציין פעולת כפל)הַדְפֶּס! :פקודת הביצוע
print
זוהי הפקודה שתאפשר לבני האדם לקרוא את המסקנה אליה הגיע php בחישוביו
פקודה זו "מדפיסה" את התשובה באותיות קריאות (אם לא הייתה לנו שגיאה בקידוד… ) ל"פֶּלֶט" בצורת קובץ html
כולם אוהבים להדגים כך
<?php print 'שלום, עולם'; ?>
(הגֶרֶֹש ' שבתחילת וסוף המשפט מסמנים שמדובר ב"מחרוזת טקסט"
כך שרווח או סימן אחר לא יקטעו את הפקודה)תיקחו את הקוד הזה, תשמרו בשם כלשהוא בסיומת php , תעלו לשרת שלכם , היכנסו מהדפדפן ומיד תיראו על המסך את המילים "שלום ,עולם"
להדגמה , שמרתי את הקובץ הנ"ל בשם helo.php בחינמון , והנה הקישור לצפייה בתוצאה:
https://011371php.000webhostapp.com/helo.phpאם ניקח את הדוגמא של פעולת הכפל מהמאמר הקודם בנושא "משתנה" נוכל כעת להוסיף פקודה
print $c;
כדי שאנחנו נוכל לראות את התוצאה שלa×b כזכור
GET : קבלת משתנה באמצעות כתובת הURL
$_GET['ערך']
פקודה זו אומרת למעבד: תקבל את 'ערך' מכתובת ה url שהזין המשתמש
הסבר:
עכשיו הגיע הזמן להסביר את הנקודה:
אז איך אני כלקוח מספק לקוד שבנית את הנתונים המשתנים הדרושים לו כדי לענות לי את התשובה?יש כמה דרכים וכרגע נעסוק ב GET מפני שהיא הצורה השימושית ששלוחת הapi שולחת לקובץ שלנו(עריכה: כמה שעות אחר כתיבת מאמר זה התבשרנו שאפשר לשלוח ערכים גם ב POST, על כך בהמשך… )
צורת השליחה עובדת כך
נניח ויש לנו כתובת של הקובץ print.php
הקובץ מכיל את הקוד הבא<?php $dugma=$_GET['PRINT']; print $dugma; ?>
הקובץ בעצם אמור להדפיס את הערך 'PRINT' שאני ישלח אליו
איך אני שולח לו את הערך?
נניח והכתובת המלאה שלו היא: https://011371php.000webhostapp.com/print.php
כל שעלי לעשות הוא להוסיף לכתובת את הסימן ? ואחרי זה את שם הערך = מה שאני רוצה שיודפס
לדוגמא אם אני רוצה שידפיס לי את המלה "שלום" צריך להוסיף לכתובת את המחרוזת הבאה?PRINT=שלום
סך הכל תראה כך כתובת הurl שתדפיס את המילה 'שלום'
https://011371php.000webhostapp.com/print.php?PRINT=שלוםאתם יכולים לשחק עם הכתובת כאוות נפשכם , כל מילה שתכתבו אחרי סימן ה = תופיע על המסך
ואם יש לי שתי משתנים או יותר שאני צריך לשלוח?
אין פשוט מכך: בין ערך לערך מוסיפים את הסימן "&"כך שאם לדוגמא בקובץ הקודם הוספתי פקודות:
<?php $dugma=$_GET['PRINT']; $od=$_GET['PRINT2']; print $dugma; print " "; print $od; ?>
(השורה שבין שתי המשתנים מדפיסה "רווח" כי אחרת המילים יצאו צמודות)
אז אני צריך להוסיף לurl
?PRINT=שלום&PRINT2=לידידי
סך הכל תראה כך כתובת הurl שתדפיס את המילים 'שלום' 'לידידי'
https://011371php.000webhostapp.com/print.php?PRINT=שלום&PRINT2=לידידיושוב, אתם יכולים לשחק עם הכתובת כאוות נפשכם
מתמטיקה ב php
להלן הסימנים המשמשים לפעולות מתמטיות
+ חיבור - חיסור * כפל / חילוק
טוב, הגיע הזמן לתת הדגמה מעשית פשוטה איך לבנות במערכת שלי תקשור עם קובץ php חיצוני
אז מה דעתכם שנדגים את זה על מחשבון api ?
אז התחלנו:
ניקח לדוגמא קובץ בשם plus.php
תוכן הקובץ:<?php $a=$_GET['a']; $b=$_GET['b']; $c=$a+$b; print "id_list_message=t-התוצאה היא.n- $c:"; ?>
מה אנחנו רואים פה ?
שורה הראשונה היא הפתיח
אח"כ שתי שורות שמציבות את הקלט של הערכים 'a' ו 'b' שהשלוחה תשלח לנו בתוך משתנים בשם $a ו $b בהתאמה (בהמשך תראו מה צריך לכתוב בשלוחה כדי שהיא אכן תשלח )
אח"כ שורה שאומרת משתנה $c הוא משתנה $a ועוד משתנה $b
ולבסוף פקודה "הדפס: " את התשובה שהשלוחה תקבל , אנחנו כמובן צריכים להדפיס את התשובה בפורמט שהשלוחה תבין מה היא צריכה לעשות לפי האפשרויות שימות המשיח נתנו לנו בהסבר על המודול
במקרה שלנו אנו נותנים הוראה להדפיס את המשפט הבאid_list_message=
שזה אומר בשפת ימות המשיח: הודעה אישית ללקוח המורכבת מהפרמטרים הבאים
t-התוצאה היא. :n-$c. (כאשר בתור $c תודפס התוצאה של התרגיל)
שזה אומר לשלוחה : להקריא בצורת טקסט את המילים "התוצאה היא"
ובצורת מספר את התוצאה (המסומנת ב $c)עכשיו אם לדוגמא נשלח סטרינג אם הערכים
?a=100&b=200
התוצאה שהקובץ תדפיס תהיה
id_list_message=t-התוצאה היא.n- 300:
להדגמה צפו בקישור הבא:
http://011371php.dx.am/plus.php?a=100&b=200
תוכלו לשחק אם הערכים a ו b כרצונכםאם תשלחו את זה דרך שלוחת api
מה שתשמעו יהיה פשוט
"התוצאה היא 300"ועכשיו נסביר מה צריך לעשות בשלוחה כדי שהיא תשלח לנו את הערכים שנקיש
בקובץ הexr.ini נגדיר
type=api api_link=http://011371php.dx.am/plus.php api_000=a,no,,1,7,Number,yes api_001=b,no,,1,7,Number,yes api_phone_send=no api_did_send=no api_extension_send=no api_enter_id_send=no api_enter_id_name_send=no api_hangup_send=no
בנוסף צריך להשים בשלוחה 2 קבצי שמע או tts
בשמות 000 , 001
כאשר תוכנם הוא "נא להקיש את המספר הראשון וסולמית לסיום" ו "נא להקיש את המספר השני וסולמית לסיום"הסבר על מה שהולך ב ext.ini
שורה ראשונה זה סוג השלוחה= api
שורה שניה זה הלינק המסתיים בשם הקובץ (מי שרוצה יכול להשתמש בלינק המופיע בדוגמא)
שורה שלישית זה הוראות לשלוחה כיצד להתנהג עם הקובץ 000 ששמנו בשלוחה כאשר בין הוראה להוראה יש פסיק
ומופיע בו כך:a >כלומר אנו רוצים לקבל כאן ערך בשם 'a'
הערך הזה ריק , פה ניתן להגביל את סך המספרים להקשה
1 >כלומר מינימום ספרה אחת צריך להקיש
7 >שניות המתנה אם לא הוקש # או כלום
Number >כלומר שהמערכת תחזור על מה שהלקוח הקיש בצורת מספר ( למשל , שאם הקיש 100 שהמערכת תקריא לו "מאה" ולא "אחת אפס אפס") אם רוצים לקצר את התהליך אפשר לכתוב "No" כדי שהמערכת תתקדם ישר לשלב הבא (001) בלי לחזור על מה שהלקוח הקיש
yes >חוסם את מקש * כדי שלא נקבל ערכים שגויים כשמישהו יקיש *השורה הבאה היא כמו השורה הקודמת עבור קובץ 001 , רק שכאן הערך הוא b
השורות הבאות אינם חיוניות לפעולת המערכת ותפקידם הוא לבטל את הערכים האוטומטיים שימות שולחת בסטרינג כברירת מחדל
מפני שהמחשבון שלנו לא זקוק לערכים האלו הגדרנו לבטלם כדי למנוע צריכת נתונים מיותרתהמשך מחשבון api : כפל וחיסור
נמשיך בהסבר על המחשבון:
ועכשיו :
כיצד לעשות כפל
אז נניח שהקובץ שלי שמו double.phpתוכנו זהה לקובץ plus.php מהמאמר הקודם רק שעכשיו במקום הסימן + שסימן חיבור נכתוב את הסימן* שמציין כפל
וכך זה יראה<?php $a=$_GET['a']; $b=$_GET['b']; $c=$a*$b; print "id_list_message=t-התוצאה היא.n- $c:"; ?>
להדגמה כיצד הקובץ יענה על השאלה : כמה זה 5×3 צפו בקישור הבא:
http://011371php.dx.am/double.php?a=3&b=5
שחקו אם הערכים a , b כאוות נפשכם ותראו את התוצאות.כדי לתקשר עם הקובץ דרך ה api יש להשים בשלוחה את אותם הגדרות שרשמנו במאמר הקודם על חיבור (למעט סיומת הלינק שצריך לשנות לשם הקובץ הנוכחי double.php )
נמשיך לשלב הבא
כיצד לעשות חיסור
אז כמובן תוכן הקובץ הוא אותו תוכן חוץ מסימן ה* שהפעם נחליף ל -
כצפוי קראתי לקובץ בשם minus.php ולהדגמה כיצד הקובץ עושה 25-7 הקליקו על הקישור:
http://011371php.dx.am/minus.php?a=25&b=7
כאשר שוב תוכלו לשחק כאוות נפשכם אם הערכים a,b
קובץ הext.ini בשלוחה ללא שינוי מלבד שם הקובץ כנ"לעכשיו נציג בעיה קטנה;
מה יקרה אם התוצאה תהיה שלילית
לדוגמא משתמש חכמולוג בשלוחה יהיה דחוף לו לדעת כמה זה 9-50 התוצאה היא כמובן ,מינוס 41
בוא נראה איך הקובץ יענה על זה
http://011371php.dx.am/minus.php?a=9&b=50
אז בדפדפן זה נראה לא רע , רואים ברור את הסימן - ליד המספר , אז יודעים שזה מינוס
כמו זהid_list_message=t-התוצאה היא.n- -41:
אבל בשלוחה במערכת משום מה זה לא ילך…
ולמה?
כי ימות המשיח כתבו אזהרה לגבי האפשרויות של id_list_message שהיות והסימנים "." "-" (נקודה ומקף אמצעי ) משמשים כמפרידים בין פקודה לפקודה ובין הפקודה לטקסט אסור להשתמש בהם בגוף הטקסט וזה יגרום לתקיעת המערכת,
אי לכך הסימן " - " שבא לציין את המינוס יגרום לנו רק לבאג!
מה הפתרון? בהמשך אי"המשפטי תנאי בשפת php
ככה נראה תנאי:
if ( "תנאי" ) {תעשה כך וכך; } else {ואם לא אז תעשה כך}
כמו שניתן לראות "if" פותח את המשפט [תרגום מילולי לעברית= "אם"]
בתוך הסוגריים העגולות נכתוב את התנאי
ובתוך הסוגריים המסולסלות את הפקודה/פקודות לביצוע
אחרי זה (לא חובה) ניתן לכתוב את המילה "else" [תרגום= "אחרת"] ושוב פקודה/פקודות בתוך סוגריים מסולסלות
סימנים לוגיים לשימוש בתנאים:== שווה ערך ל… < קטן מ… > גדול מ… ! שונה מ... === שווה בדיוק לתוים
הכי טוב להסביר עם דוגמא
זוכרים את הבעיה אם המחשבון מינוס מהשיעור הקודם ?
<דיברנו שם כזכור על ניסיון להפחית מ 9 50 כשהתוצאה היא מינוס 41 ,אבל הסימן "-" תוקע את השלוחה>
בא נפתור את הבעיה באמצעות שימוש בתנאי;
אז לקובץ שלנו קוראים הפעם minusa.php
ותוכנו כדלהלן<?php $a=$_GET['a']; $b=$_GET['b']; $c=$a-$b; if ($c<0) {$d= 0-$c; print "id_list_message=t-התוצאה היא מינוס.n- $d:"; } else { print "id_list_message=t-התוצאה היא.n- $c:"; } ?>
אז ההתחלה היא בעצם אותו דבר כמו אז:
a,b מתקבלים מהשלוחה, c זה התוצאה של a-b ,
עכשיו הוספנו תנאי :
אם ($c קטן מ 0 כלומר: הוא מינוס) {אז דבר ראשון נהפוך אותו למספר חיובי ע"י התרגיל d=0-c זה כלל ידוע במתמטיקה שמינוס פחות מינוס שווה פלוס , <בדוגמא שלנו 0 פחות מינוס 41 =
41> ;
אחרי זה ניתן הוראה להדפיס את המשפט
"id_list_message=t-התוצאה היא מינוס.n- $d:";
שפשוט מכיל בתוכו את המילה "מינוס" לפני המספר הרגיל שהתקבל ב d כך שהתוצאה תהיה אמינה ומדויקת}
עכשיו הוספנו "else" כלומר אם התנאי לא מתקיים דהיינו ש c שווה לאפס או גדול ממנו {אז תדפיס כרגיל
"id_list_message=t-התוצאה היא.n- $c:";
}
ניתן לצפות בקישור הבא איך הקובץ יגיב לתרגיל רגיל של 35-17
http://011371php.dx.am/minusa.php?a=35&b=17
ובקישור הבא כיצד הוא יתנהג בתרגיל שהתוצאה היא מינוס 23-79
http://011371php.dx.am/minusa.php?a=23&b=79
תוכלו לשחק עם הקישור כאוות נפשכםלשימוש עם הסקריפט בשלוחה ראו במאמר הקודם זה אותם הגדרות למעט שם הקובץ בסוף הלינק minusa.php
ההבדל בין == ל === בהמשך למשפטי תנאי
הסבר קצר על ההבדל בין הביטוי
==
לבין הביטוי
===
הביטוי הראשון בודק האם נתוןx שווה ערך לנתוןy
השני לעומתו בודק האם נתוןx זהה במאת האחוזים לנתוןyלדוגמא: האם "כלום"* שווה ל"אפס"?
תלוי את מי שואלים !
אם נשאל את אדון "==" , הוא יענה שבטח! כי אם אין לי כלום זה נקרא שיש לי אפס!אבל כשנשאל את מיסטר "===" את אותה השאלה , הוא יענה שמה פתאום?! , כלום זה "כ" "ל" "ו" "ם" ,ואילו אפס זה "א" "פ" "ס", אז מה הקשר?
- כך כותבים "כלום" בשפת php
NULL
דוגמא נוספת לתנאי.
המטרה של התנאי היא לבטל את ההתייחסות לפניה בניתוק
(המערכת פונה פעמיים לשרת, פעם בכניסה לשלוחה, ובפעם השניה כאשר המשתמש מנתק את השיחה, בד"כ אין צורך בפניה כפולה לשרת ולכן עושים את התנאי בתחילת הקוד)if (isset($_REQUEST['hangup'])) {exit();}
פירוש התנאי: (אם המשתנה $_REQUEST מכיל משתנה בשם hangup ){תצא מהקוד בלי לענות כלום;}
בכדי לקבל את מספר הקובץ נקי מהנתיב המלא ניתן לכתוב
//דוגמא לנתיב //$what = "ivr2:/1/2/000.wav" $mikum_slesh = strrpos($what,"/"); $file_name = substr($what,$mikum_slesh+1,-4);
בהצלחה רבה!!
-
-
-
-
-
-
-
-
מכיון ש @dudu u ו @011371 לא המשיך את שימושון PHP אכתוב אני שימושון למתקדמים
פניית API$url=file_get_contents("https://ivrphone.online");
התשובה תיכנס למשתנה URL
פנייה בCURL (העלת קובץ)$uploadUrl = "https://www.call2all.co.il/ym/api/UploadFile?token=$did2:$pass2&path=$path/$fileName&convertAudio=0&autoNumbering=false&tts=$ty"; // הכנת נתוני הקובץ $data = [ 'file' => curl_file_create($filePath, 'audio/mpeg', $fileName), ]; $ch = curl_init($uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); curl_close($ch);
שם הקובץ נמצא במשתנה $filePath בדוגמה שולח לימות המשיח
מחיקת קובץ מהשרתunlink($filePath);
שם הקובץ נמצא במשתנה $filePath
הורדת התגובה כקובץ לשרת
$downloadUrl = "https://www.call2all.co.il/ym/api/DownloadFile?token=$did:$pass&what=$what"; $ch = curl_init($downloadUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch); $fileName = basename($what); $filePath = "$path/$fileName"; file_put_contents($filePath, $response);
שם הקובץ נמצא במשתנה $filePath
הפיכת משתנה לגייסון
$data = json_decode($response, true);
שם המשתנה $response הגייסון יכנס למשתנה data
פרוק ערך מגייסון
$ini = $data['did'];
הערך מפרק יכנס למשתנה ini הגיסון נמצא במשתנה data הערך לפרוק הוא did
בהצלחה!