DCSIMG
June 2010 - Posts - קוד פתוח במיקרוסופט

June 2010 - Posts

פורסם בתאריך Saturday, June 26, 2010 3:17 PM על ידי Guy Burstein

MSSQL דרייבר PHPבפוסט הזה אדבר על איך להשתמש ב- MSSQL Server באפליקציית PHP, ע”י שימוש ב- SQL Server Driver for PHP. במהלך הפוסט אני אדגים אפליקציית PHP שקוראת נתונים וכותבת נתונים לתוך SQL Server Express שהוא מסד נתונים חינמי. בדוגמא אכסה את אופן ההתחברות למסד הנתונים, קריאה וכתיבה של נתונים וכן טיפול בשגיאות.

התקנת הדרייבר SQL Server Driver for PHP

אם עדיין לא התקנת את SQL Server Express, מסד הנתונים החינמי של מיקרוסופט על המחשב שלך, לחץ כאן כדי להתקין אותו.

הדרך הפשוטה להתקנת הדרייבר ל- MSSQL עבור PHP היא כמובן ע”י שימוש ב- Web Platform Installer (לחיצה על כפתור ההתקנה שבתחילת הפוסט יפתח את ההתקנה).

MSSQL דרייבר PHP

לאחר אישור ההתקנה, ה- Web Platform Installer יוריד ויתקין את הדרייבר, ויקנפג אותו לשימוש באפליקציות ה- PHP, ע”י הוספת ה- extension המתאים לתוך ה- php.ini.

extension=php_sqlsrv.dll

יצירת מסד נתונים לדוגמא

צור קובץ טקסט חדש בשם Customers.sql ושמור אותו בספרייה c:\temp. העתק לתוכו את קוד ה- SQL הבא שיוצר מסד נתונים חדש עבור הדוגמא שבהמשך. מסד הנתונים ישמור טבלת אחת ובה פרטי לקוחות הכוללים מזהה לקוח, כתובת אימייל, שם ותאריך רישום.

create database CustomersDB

go

 

use CustomersDB

go

 

create table Customers

(

    ID int not null primary key identity(1,1),

    Email nvarchar(50) not null unique,

    LastName nvarchar(50) not null,

    FirstName nvarchar(50) not null,

    RegDate datetime not null,

)

go

 

הרץ את הפקודה הבאה מתוך חלון Command Prompt כדי להריץ את סקריפט ה- SQL שכתבת וליצור את מסד הנתונים.

c:\temp> Osql -S .\SqlExpress -E  -n -i "Customers.Sql"

בניית דף PHP לדוגמא

הדף מתחיל עם הקוד הפשוט הבא, המכיל טופס בו המשתמש יזין את השם הפרטי, שם המשפחה וכתובת האימייל לצורך הרישום.

<html>

    <head>

        <Title>Example Web Form</Title>

    </head>

<body>

  <form method="post" action="?action=add" enctype="multipart/form-data" >

    Last name <input type="text" name="lastName" id="lastName"/></br>

    First name <input type="text" name="firstName" id="firstName"/></br>

    E-mail address <input type="text" name="emailAddress" id="emailAddress"/></br>

    <input type="submit" name="submit" value="Submit" />

  </form>

<?php

    /* כאן יכנס הקוד בהמשך המדריך. */

?>

</body>

</html>

 

התחברות ל- MS SQL Server מ- PHP

לפני שניגשים להכניס נתונים למסד הנתונים, עלינו להתחבר אליו, ונשתמש בפונקציה sqlsrv_connect כדי לעשות זאת. הפונקציה מקבלת כפרמטר את שם השרת להתחבר אליו (serverName$) ופרמטר אופציונאלי נוסף (connectionOptions$) לפרטי התחברות נוספים כגון שם מסד הנתונים, שם המשתמש והסיסמא להתחברות וכו’. ראו מידע נוסף על הפונקציה sqlsrv_connect.
בדוגמא שלנו, אכתוב את הקוד הבא כדי להתחבר למסד הנתונים.

 

  $serverName = ".\sqlexpress";

 

  $connectionOptions = array(

        "Database"=>"CustomersDB");

 

  $conn = sqlsrv_connect($serverName, $connectionOptions);

 

  if($conn === false)

  {

      die(print_r(sqlsrv_errors(), true));

  }

 

בקוד הנ”ל אני מתחבר לשרת ששמו “sqlexpress\.” – הנקודה היא סתם קיצור כדי לציין שהחיבור מתבצע לשרת המקומי. ניתן לכתוב גם “local)\sqlexpress)” או בעת פניה לשרת אחר – “Servername)\sqlexpress)”.

הכנסת נתונים (INSERT) ל- MS SQL Server מ- PHP

כדי להכניס רשומות חדשות למסד הנתונים, נקח את הפרמטרים שמועברים אלינו בטופס ע”י המשתמש ונפעיל פקודת INSERT למסד הנתונים ע”י שימוש בפונקציה sqlsrv_query.

  if(isset($_GET['action']))

  {

    if($_GET['action'] == 'add')

    {

      /*Insert data.*/

      $insertSql = "INSERT INTO Customers (LastName, FirstName, Email, RegDate)

                    VALUES (?,?,?,?)";

      $params = array(&$_POST['lastName'],

                      &$_POST['firstName'],

                      &$_POST['emailAddress'],

                      date("Y-m-d"));

 

      $stmt = sqlsrv_query($conn, $insertSql, $params);

      if($stmt === false)

      {

        /*Handle the case of a duplicte e-mail address.*/

        $errors = sqlsrv_errors();

        if($errors[0]['code'] == 2601)

        {

          echo "The e-mail address you entered has already been used.</br>";

        }

        /*Die if other errors occurred.*/

        else

        {

          die(print_r($errors, true));

        }

      }

      else

      {

        echo "Registration complete.</br>";

      }

  }

}

בדוגמא למעלה, מוגדר משתנה בשם insertSql$ שמכיל את פקודת ה- SQL שנרצה לבצע. כדאי לשים לב שהפקודה מכילה מקום לפרמטרים שיועברו אליה ע”י סימני שאלה. הפקודה הבאה יוצרת מערכת של הערכים שנרצה לשלב בפקודה בעת שליחתה למסד הנתונים – גם כאן 4 פרמטרים: 3 מהם מגיעים מתוך נתוני הטופס והרביעי הוא הזמן הנוכחי. לבסוף, נשלחת הפקודה למסד הנתונים לצורך הרצה.

שליפת נתונים (SELECT) מתוך MS SQL Server מ- PHP

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

$sql = "SELECT * FROM Customers ORDER BY LastName";

$stmt = sqlsrv_query($conn, $sql);

if($stmt === false)

{

  die(print_r(sqlsrv_errors(), true));

}

if(sqlsrv_has_rows($stmt))

{

  print("<table border='1px'>");

  print("<tr><td>Last Name</td>");

  print("<td>First Name</td>");

  print("<td>E-mail Address</td>");

  print("<td>Registration Date</td></tr>");

 

  while($row = sqlsrv_fetch_array($stmt))

  {

    $regDate = date_format($row['RegDate'], 'Y-m-d');

    print("<tr><td>".$row['LastName']."</td>");

    print("<td>".$row['FirstName']."</td>");

    print("<td>".$row['Email']."</td>");

    print("<td>".$regDate."</td></tr>");

  }

  print("</table>");

}

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

טיפול בשגיאות

הפונקציה sqlsrv_errors מחזירה מידע על השגיאה האחרונה שארעה בעת ניסיון לגשת למסד הנתונים. ברוב המקרים, נשתמש בפונקציה die ונדפיס את הודעת השגיאה. במקרים בהם נרצה לתת הודעה יותר משמעותית למשתמש, למשל בעת ניסיון להכניס כתובת אימייל שכבר קיימת במאגר, נראה לזהות קוד שגיאה ספציפי (במקרה שלנו, לאחר הניסיון להכניס לקוח חדש, אני בודק האם הייתה שגיאה עם קוד 2601 שמציינת שנעשה ניסיון להכניס ערך לשדה שכבר קיים בטבלה. נשים לב כי בהגדרת הטבלה ציינו ששדה האימייל הוא ייחודי ולכן הכנסת לקוח עם כתובת אימייל שכבר קיימת אצל לקוח אחר תגרור שגיאה).

לסיכום

בפוסט זה הראיתי איך לעבוד עם MSSQL ב- PHP. ראינו איך להוריד ולהתקין את ה- SQL Server Driver for PHP באמצעות ה- Web Platform Installer, וכתבנו דף שמכניס לקוחות חדשים ומציג אותם.

תהנו!

נספח – הקוד המלא של הדף

<html>

    <head>

        <Title>Example Web Form</Title>

    </head>

<body>

  <form method="post" action="?action=add" enctype="multipart/form-data" >

    Last name <input type="text" name="lastName" id="lastName"/></br>

    First name <input type="text" name="firstName" id="firstName"/></br>

    E-mail address <input type="text" name="emailAddress" id="emailAddress"/></br>

    <input type="submit" name="submit" value="Submit" />

  </form>

<?php

 

  $serverName = ".\sqlexpress";

 

  $connectionOptions = array(

        "Database"=>"CustomersDB");

 

  $conn = sqlsrv_connect($serverName, $connectionOptions);

 

  if($conn === false)

  {

      die(print_r(sqlsrv_errors(), true));

  }

 

  if(isset($_GET['action']))

  {

    if($_GET['action'] == 'add')

    {

      /*Insert data.*/

      $insertSql = "INSERT INTO Customers (LastName, FirstName, Email, RegDate)

                    VALUES (?,?,?,?)";

      $params = array(&$_POST['lastName'],

                      &$_POST['firstName'],

                      &$_POST['emailAddress'],

                      date("Y-m-d"));

 

      $stmt = sqlsrv_query($conn, $insertSql, $params);

      if($stmt === false)

      {

        /*Handle the case of a duplicte e-mail address.*/

        $errors = sqlsrv_errors();

        if($errors[0]['code'] == 2601)

        {

          echo "The e-mail address you entered has already been used.</br>";

        }

        /*Die if other errors occurred.*/

        else

        {

          die(print_r($errors, true));

        }

      }

      else

      {

        echo "Registration complete.</br>";

      }

  }

}

 

$sql = "SELECT * FROM Customers ORDER BY LastName";

$stmt = sqlsrv_query($conn, $sql);

if($stmt === false)

{

  die(print_r(sqlsrv_errors(), true));

}

if(sqlsrv_has_rows($stmt))

{

  print("<table border='1px'>");

  print("<tr><td>Last Name</td>");

  print("<td>First Name</td>");

  print("<td>E-mail Address</td>");

  print("<td>Registration Date</td></tr>");

 

  while($row = sqlsrv_fetch_array($stmt))

  {

    $regDate = date_format($row['RegDate'], 'Y-m-d');

    print("<tr><td>".$row['LastName']."</td>");

    print("<td>".$row['FirstName']."</td>");

    print("<td>".$row['Email']."</td>");

    print("<td>".$regDate."</td></tr>");

  }

  print("</table>");

}

?>

</body>

</html>

פורסם בתאריך Saturday, June 26, 2010 10:47 AM על ידי Guy Burstein

התקנת WinCache

Windows Cache Extension for PHP הוא PHP Accelerator לסביבת Windows לשימוש בעת הרצת PHP על IIS, ומאפשר לשפר ביצועים של אתרי PHP בכ- 50%-70% ע”י קיצור משמעותי של זמן הטיפול בכל בקשה.
הרכיב עושה זאת ע”י במספר דרכים, אותן אסביר בפוסט זה.

שמירת ה- PHP Bytecode ב- Cache

PHP שיפור ביצועיםPHP, בתור שפה דינמית, אינה עוברת תהליך הידור (קומפילציה), אלא מפורשת בזמן ריצה ע”י מהדר (Interperter), וכמו כל דבר בחיים, יש לכך יתרונות וחסרונות.
העובדה שתהליך הפיתוח לא מצליך הידור של קבצי PHP, מאפשר לכתוב קבצי PHP בכל עורך טקסט, אפילו Notepad, אך מצד שני, בעת הרצת סקריפט של PHP, ה- Interperter מפענח שורה שורה, מבין אותה, מעביר אותה לאוסף פקודות ברמת מערכת ההפעלה (Bytecode) ומבצע אותן. התהליך הזה עלול לפגוע בביצועי תוכניות PHP, במיוחד באתרי אינטרנט שחייבים לעמוד בסטנדרטים גבוהים של ביצועים.

Windows Cache Extension for PHP שומר בזיכרון את ה- Bytecode שנוצר ע”י המפרש של PHP לשימוש חוזר. כך, כאשר מריצים את אותו דף יותר מפעם אחת, ה- Interperter יכול לדלג על שלב פיענוח הקוד ופשוט להריץ את ה- Bytecode ששמור בזיכרון.

שמירת תכני קבצים ב- Cache

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

Windows Cache Extensions for PHP משפר ביצועים של אתרי PHP גם ע”י שמירת תכנים של קבצים בתוך ה- Cache.  כאשר קובץ נפתח לראשונה, התוכן שלו נשמר בזיכרון, וכאשר נפתח שוב, תוכנו נקרא מהזיכרון ולא מהדיסק הפיזי.
בבדיקות על באפליקציות פופולריות, ביניהן וורדפרס, ג’ומלה, דרופל ועוד אפליקציות מבין אלו שבגלריית אפליקציות הקוד הפתוח, נראה שיפור של 80%-90% בזמני התגובה.

שמירת נתיבים יחסיים (Relative Paths) ב- Cache

ל- PHP יש לוגיקה די מורכבת לתרגום נתיב יחסי (כגון: about/) לנתיב מפורש (כגון: www.microsoft.com/about). לאור העובדה שרוב האפליקציות הפופולריות באינטרנט משתמשות בנתיבים יחסיים, יש כאן מקום שבו ניתן לשפר ביצועים של אתרי PHP.

Windows Cache Extensions for PHP שומר מיפוי בין נתיבים יחסיים לכתובות מפורשות, וחוסך זמן יקר בעת פניה לכתובות האלה, ומבטיח הגעה לדף הרצוי.

הורדה והתקנה של WinCache

התקנת WinCache

הדרך הפשוטה להתקנת Windows Cache Extensions for PHP היא כמובן ע”י שימוש ב- Web Platform Installer (לחיצה על הכפתור משמאל לטקסט יפתח את ההתקנה).

הורדה והתקנה של WinCache

ה- Web Platform Installer יוריד את הרכיב, יתקין אותו ויגדיר אותו ב- php.ini:

[PHP_WINCACHE]
extension=php_wincache.dll

אם נריץ דף עם הפקודה ()phpinfo, נוכל לראות כי הרכיב נטען ומציג את המידע הרלוונטי.

התקנת Win Cache

תהנו!

פורסם בתאריך Thursday, June 24, 2010 10:32 PM על ידי Guy Burstein

PHP על IISהאם אפשר להריץ PHP על IIS? האם PHP ב  IIS עובד? ממתי? ואיך זה עובד בכלל? כל התשובות בפוסט הזה.

אתחיל דווקא בסיכום…

PHP על IIS עובד מאז ומתמיד, אך עם FastCGI משיגים את הביצועים והיציבות הדרושה!

התקנת PHP על IIS

איך זה עובד כיום ולמה זה לא עבד כמו שצריך פעם?

קצת רקע… הרצת PHP עם CGI

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

c:\php\php.exe MyPhpProgram.php

בשרתי Web, כאשר מגיעה בקשה לדף PHP עלינו להפעיל את התוכנית php.exe ולהעביר לה את דף ה- php כדי להריץ ולהחזיר את התשובה למשתמש. מודל הפעלה זה, שעבור כל בקשה מפעיל תוכנית חיצונית, נקרא CGI (ראשי תיבות של Common Gateway Interface) והוא נמצא בשימוש ע”י מגוון שרתי Web, ביניהם IIS ו- Apache מזה זמן רב.

העובדה שעבור כל בקשה נוצר Process נפרד של php.exe מאפשר הפרדה בשטחי הזיכרון של כל בקשה, ומונע משתי בקשות לשנות בטעות נתונים אחת של השניה. לכן, ב- PHP אין צורך להגן על שטחי זיכרון בין Threads שונים (PHP היא non-thread safe), ולכן זוכה לביצועים גבוהים.

בעיות שהיו בעבר

אחד ההבדלים בין לינוקס ל- Windows הוא באופן שבו מנוהלים ה- Processים וה- Threads וכמות המשאבים שנדרשת כדי ליצור כאלה חדשים.

  • בלינוקס, כמות המשאבים הנדרשת להפעלת Process חדש היא נמוכה לעומת יצירת Thread חדש. לכן, שימוש ב- CGI לטיפול בבקשות לדפי PHP בשרתי לינוקס לא פוגע בביצועי המערכת, למרות שנדרש להפעיל את תוכנית ה- php.exe עבור כל בקשה מחדש.
  • ב- Windows, לגמרי By Design, יש הבדל משמעותי בין Threads ל- Process. יצירת Thread היא פעולה מאד אופטימלית מבחינת משאבי מערכת, לעומת יצירת Process חדש שזו פעולה כבדה יותר. לכן, שימוש במודול CGI כדי להריץ PHP על IIS הביא לפגישה בביצועים.

בעבר ניסו לפתור את סוגיית הרצת PHP על IIS ע”י יצירת Thread Safe PHP – יצרו גירסא מקבילה של PHP שהיא thread safe והשתמשו ב- ISAPI Filter, שעבור כל בקשה יצר Thread חדש במקום Process כדי להריץ את הדפים. כלומר, מצד אחד חסכו את זמני יצירת Process עבור כל בקשה, אך מצד שני יצרו גירסת PHP איטית יותר, שלא תואמת להרבה חבילות והרחבות לשפה ולכן היו בעיות יציבות בדרך הזאת.

להריץ PHP על IIS עם FastCGI

PHP על IISאחרי שמיקרוסופט הבינה ששתי הדרכים הנ”ל לא נותנות פיתרון הולם להרצת PHP על IIS, היא חברה לחברת Zend והן מצאו את הפיתרון המושלם להרצת PHP על IIS: ע”י FastCGI.

FastCGI מנהל Pool של Processים לטיפול בבקשות PHP, ולפי הצורך מנתב בקשה לדף PHP על Process פנוי. באופן הזה, לא נדרשת יצירה של Processים חדשים, ועדיין ישנה הפרדה מוחלטת בין שטחי הזיכרון של כל בקשה ובקשה. מכאן, שגם משיגים ביצועים גבוהים וגם יציבות גבוהה בעת הרצת PHP על IIS.

אין שפק שכיום PHP רץ על IIS בצורה אופטימלית וכל מה שנשאר לעשות הוא לצאת לדרך ולהתקין PHP על IIS.

תהנו!

 


פורסם בתאריך Sunday, June 13, 2010 7:36 PM על ידי Guy Burstein

מיקרוסופט תורמת קוד ל- jQueryלספריית jQuery יש קהילת מפתחים משגשגת והיא נחשבת כיום לספריית ה- javascript שבשימוש הרחב ביותר באינטרנט.

כבר לפני שנתיים הכריזה מיקרוסופט שהיא רואה ב- jQuery מרכיב חשוב בפיתוח ל- Web ומציעה תמיכה בכלי הפיתוח שלה Visual Studio 2008 לפיתוח עם jQuery. ב- Visual Studio 2010 הגדילה מיקרוסופט לעשות וכל פרוייקט חדש מכיל כבר שימוש ב- jQuery כברירת מחדל.

בכנס MIX 2010 שהתקיים במרץ השנה, הרכיזה מיקרוסופט על הצטרפות לקהילת תורמי הקוד ל- jQuery, ותרומתה הראשונה היא מנוע תבניות להצגת מידע בצד הלקוח.

מעט רקע על jQuery

jQuery החלה כספריית javascript עם שני דגשים עיקריים - משקל קל (24k) והיכולת לטפל באופן כוללני באתגרי javascript של דפדפנים שונים. אם בעבר, על מנת לבצע פעולות בסיסיות נדרשנו לכתוב קוד שונה עבור כל דפדפן - jQuery מספקת מעטפת אשר מסתירה את המורכבות של תמיכה בריבוי דפדפנים ב- javascript.
חלק מהפופלריות הרבה לה זוכה הספרייה היא מתוך האימוץ שלה בתוך מערכות ניהול תוכן כגון דרופל ובתוך פלטפורמות הפיתוח למובייל של נוקיה, אנדרואיד ואייפון.

ובצד הישראלי...

גם בארץ אנו רואים שימוש גואה בשימוש ב- jQuery כטכנולוגיה נבחרת לעבודה בצד הלקוח, ליישומי AJAX וחווית משתמש עשירה בדפדפן. ארגונים כמו הממשלה ואתרי אקדמיה רבים משתמשים בטכנולוגיה כבר היום בהצלחה.
אתר הבית של jQuery ישראל נמצא בכתובת http://jQuery.org.il.

 

תרומת קוד לפרוייקט jQuery

כמו כל תורם קוד לפרוייקט, עברה מיקרוסופט את התהליך הבא:

  1. ניסוח הצעה עבור מנוע התבניות ופרסום בפורום המפתחים (http://forum.jquery.com/topic/jquery-templates-proposal ו- http://forum.jquery.com/topic/templating-syntax)
  2. אחרי קבלת פידבק על גבי הפורומים, צוות ה- jQuery יצר אבטיפוס של מנוע התבניות ופרסם אותו ב- Github של הפרוייקט (http://github.com/jquery/jquery-tmpl)
  3. בוצעו איטרציות על האבטיפוס בהתבסס על הפידבק שהתקבל מהקהילה.

מנוע התבניות להצגת מידע בצד לקוח

מנוע התבנית מאפשר למפתחי jQuery לייצר HTML בהתבסס על אובייקטי מידע. הסינטקס מאד פשוט ומאפשר להגדיר את תבנית המידע בצורה דקלרטיבית. בזמן ריצה, בהינתן מידע, הוא יוצג בהתאם לתבנית.

תבניות צד לקוח

ניתן ליצור תבניות מידע בצד הלקוח ע”י שילוב סקריפט מסוג text/html, וכתיבת התבנית בתוכו. בדוגמא הבאה ישנו div המשמש כ- container ותבנית צד לקוח בשם contactTemplate. הביטויים בתוך הסוגריים המסולסלים הם חלק מהתבנית ומציינים את השדות מתוך אובייקט המידע שיש להציג כאן.

image

ע”י שימוש בתבניות ניתן להציג אובייקט javascript או מערך של נתונים. הקוד הבא מעביר מערך של אובייקטים בשם contacts לפונקציה ששמה render שפועלת על התבנית ואת ה- HTML שנוצר מוסיפה ל- div העליון.

image

כאשר הדף נטען, מוצגת רשימת אנשי הקשר לפי התבנית, כאשר כל פעולת חילול ה- HTML מתבצע אך ורק בצד הלקוח ע”י הדפדפן.

image

יכולות נוספות

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

תהנו!

פורסם בתאריך Saturday, June 05, 2010 1:21 PM על ידי Guy Burstein

תוסף לוורדפרס עמוד 404 עם תוצאות מתוך Bing

בהמשך להודעה האחרונה על שחרור ספריית קוד לחיפוש ב- Bing מתוך אפליקציית PHP, משחררת היום מיקרוסופט, ביחד עם המפתח Cal Evans את התוסף Bing 404 for WordPress המאפשר להציג עמוד 404 עם תוצאות חיפוש מתוך Bing כאשר גולש מגיע לדף שאינו קיים. התוסף עושה שימוש בספריית הקוד הנ”ל.

כאשר מוסיפים את התוסף לאתר מבוסס וורדפרס, הזמין בגלריית התוספים של וורדפרס, הוא מוודא שכאשר גולש מנסה לגשת לעמוד שאינו קיים באתר, הוא יקבל עמוד 404 ידידותי עם תוצאות חיפוש דינאמיות מתוך מנוע החיפוש Bing עם המידע שהוא חיפש.

Carl Evans פרסם מדריך לשילוב התוסף לוורדפרס עבור עמוד 404 עם תוצאות מתוך Bing, וניתן גם לצפות בסרטון הבא המסביר את השלבים הנדרשים על מנת לעשות זאת.

קישורים נוספים:

תהנו!

פורסם בתאריך Wednesday, June 02, 2010 5:01 PM על ידי Guy Burstein

חיפוש ב- Bing באפליקציית PHP

Bing, מנוע החיפוש וקבלת ההחלטות, חושף API המאפשר למפתחים לבצע שאילתות ולקבל תוצאות בקלות. מיקרוסופט שחררה היום את ספריית הקוד לחיפוש ב- Bing מאפליקציית PHP, פרוייקט הזמין באתר CodePlex, אתר פרוייקטי הקוד הפתוח של מיקרוסופט. הפרוייקט שוחרר תחת רשיון BSD.

לצורך פרוייקט זה, עבדה מיקרוסופט עם Cal Evans, מפתח PHP ותיק, במטרה לספק ספריית קוד שמתאימה לסגנון הפיתוח המקובל בעולם ה- PHP. לאחר שחרור החבילה, פרסם Carl Evans מדריך לשימוש בחבילה עם דוגמאות קוד רלוונטיות.

מתוך המדריך:

 
<html>
    <head>
        <title> Cal's Bing Search QuickTest</title>
    <body>
<?PHP
function __autoload($className)
{
    $fileName = strtr($className,'_',DIRECTORY_SEPARATOR).".php";
    include $fileName;
    return;
}   

$apiKey = '';

$o = new Msft_Bing_Search($apiKey); $o->setQuery('zend framework') ->setWebCount(10) ->setSite('calevans.com') ->setSource('Web') ->setSource('Image') ->setAdult('Off') ;  
$raw = $o->search();
echo "<h2>Raw</h2>"; echo "<textarea cols='100' >".$o->getUrl()."</textarea><br />";
if ($o->getFormat()=='json') { $result = json_decode($raw); } else { $result = htmlspecialchars($raw); }   echo "<h2>Images</h2>";



foreach
($result->SearchResponse->Image->Results as $value) { printf('<a href="%s"><img src="%s" /></a>',$value->Url,$value->MediaUrl); }

echo
"<br />"; echo "<h2>Links</h2>"; foreach($result->SearchResponse->Web->Results as $value) { printf('<a href="%s">%s</a><br />',$value->Url,$value->Title); }   ?> </body> </html>
 
חבילת ה- Bing Search Library for PHP היא עטיפה (Wrapper) ל- Bing API שמאפשר למפתחים לעבוד עם Bing (לשלוח שאילתות ולקבל ממנו תוצאות), במגוון פרוטוקולים כמו JSON, ב- SOAP וב- XML נקי. ב- API הזה נעשה שימוש כבר בעבר עבור מפתחי PHP כאשר שוחרר פרוייקט עמודי שגיאה מסוג 404 עבור אתרי PHP, שמאפשר להציג תוצאות חיפוש מתוך Bing בעת ניסיון לגלוש לדף שאינו קיים באתר.
 
תהנו!