تتمثل المهمة على جانب الخادم عادةً في إجراء عمليات منطقية بناءً على طلب العميل وإرجاع الاستجابة للنتيجة. تكون هذه الاستجابة عادةً بتنسيق XML (لذا يحتاج جانب الخادم إلى استخدام PHP's DOM لإنشاء استجابة XML)
1. يستخدم PHP DOM لإنشاء استجابة XML، والتي يتم تحليلها بواسطة JS الخاص بالعميل ثم عرضها على الصفحة (لذا؛ يجب أن تكون بارعًا في PHP's DOM API)
في الواقع، هناك طريقتان لإنشاء XML في PHP:
استخدم واجهة برمجة تطبيقات DOM (الطريقة الأولى)
والآخر هو تكرار محتوى XML مباشرة (الطريقة الثانية)
انظر المثال:
صفحة HTML (تحتوي على ثلاث وظائف تشغيل JS: onmouseover، onmouseout، onclick؛ تشغيل وظائفها الخاصة على التوالي)
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<أتش تي أم أل>
<الرأس>
<title> خادم PHP اياكس </title>
<script type="text/javascript" src="js.js"></script>
</الرأس>
<الجسم>
<span onmouseover="PHPechoXML()" onmouseout="PHPDOMXML()">الكلمات الافتراضية</span>
<div id="show"></div>
قسّم <نوع الإدخال = "نص" id = "الرقم الأول"/> على
<نوع الإدخال = "نص" معرف = "الرقم الثاني"/>
<input type = "button" value = "إرسال" عند النقر = "CSparameter ()"/>
<div id="result"></div>
</الجسم>
</html>
صفحة JS (حدد ثلاث وظائف تشغيل JS على التوالي: PHPechoXML، PHPDOMXML، وCSparameter)
هناك وظائف إنشاء كائن XMLHttpRequest ووظائف معالجة استجابة الخادم المعنية.
///////1.إنشاء كائن XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject()
;
...{
فار
xmlHttp;
...{
// حاول إنشاء كائن XMLHttpRequest
xmlHttp = new XMLHttpRequest();
}
قبض (ه)
...{
// افترض IE6 أو أقدم
فار XmlHttpVersions = مصفوفة جديدة ('MSXML2.XMLHTTP.6.0'،
"MSXML2.XMLHTTP.5.0"،
"MSXML2.XMLHTTP.4.0"،
"MSXML2.XMLHTTP.3.0"،
"MSXML2.XMLHTTP"،
"Microsoft.XMLHTTP")؛
لـ (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
يحاول
...{
// حاول إنشاء كائن XMLHttpRequest
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
أمسك (هـ) ...{}
}
}
إذا (!xmlHttp)
تنبيه ("حدث خطأ أثناء إنشاء كائن XMLHttpRequest.")؛
آخر
إرجاع xmlHttp;
}
///////2. وظيفة الاستجابة لحدث JavaScript (مشغل onmouseover)
// قراءة ملف من الخادم
الدالة PHPichoXML()
...{
// تابع فقط إذا لم يكن xmlHttp فارغًا
إذا (xmlHttp)
...{
// حاول الاتصال بالخادم
يحاول
...{
// البدء في قراءة ملف من الخادم
// أرسل طلبًا غير متزامن إلى ملف PHPechoXML.php على جانب الخادم
xmlHttp.open("GET", "PHPechoXML.php", true);
xmlHttp.onreadystatechange = HandleRequestStateChange;
xmlHttp.send(null);
}
// عرض الخطأ في حالة الفشل
قبض (ه)
...{
تنبيه("لا يمكن الاتصال بالخادم:" + e.toString());
}
}
}
///////3. وظيفة الاستجابة لحدث JavaScript (مشغل onmouseout)
الدالةPHPDOMXML()
...{
// تابع فقط إذا لم يكن xmlHttp فارغًا
إذا (xmlHttp)
...{
// حاول الاتصال بالخادم
يحاول
...{
// البدء في قراءة ملف من الخادم
// أرسل طلبًا غير متزامن إلى ملف PHPDOMXML.php على جانب الخادم
xmlHttp.open("GET", "PHPDOMXML.php", true);
xmlHttp.onreadystatechange = HandleRequestStateChange;
xmlHttp.send(null);
}
// عرض الخطأ في حالة الفشل
قبض (ه)
...{
تنبيه("لا يمكن الاتصال بالخادم:" + e.toString());
}
}
}
// يعالج الاستجابة المستلمة من الخادم، ووظيفة رد اتصال الحالة من جانب الخادم
الدالة HandleRequestStateChange()
...{
إذا (xmlHttp.readyState == 4)
...{
// تابع فقط إذا كانت حالة HTTP "موافق"
إذا (xmlHttp.status == 200)
...{
يحاول
...{
// اقرأ الرسالة من الخادم
var xmlResponse = xmlHttp.responseXML;
// التقط الأخطاء المحتملة في IE وOpera
إذا (!xmlResponse||!xmlResponse.documentElement)
...{
throw("بنية XML غير صالحة:"+xmlHttp.responseText);
}
// التقط الأخطاء المحتملة في FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
إذا (rootNodeName = = "خطأ المحلل")
...{
throw("بنية XML غير صالحة:"+xmlHttp.responseText);
}
// احصل على استجابة XML من الخادم، وقم بتحليلها وعرضها على صفحة الويب
// الحصول على عنصر مستند XML
xmlRoot = xmlResponse.documentElement;
// الحصول على صفائف تحتوي على عناوين الكتب وأرقام ISBN
cityArray=xmlRoot.getElementsByTagName("city");
// إنشاء إخراج HTML
فار html = "";
// التكرار عبر المصفوفات وإنشاء بنية HTML
لـ (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// احصل على مرجع للعنصر <div> الموجود في الصفحة
myDiv = document.getElementById("show");
// عرض مخرجات HTML
myDiv.innerHTML = "يقول الخادم: <br />" + html;
}
قبض (ه)
...{
// عرض رسالة الخطأ
تنبيه("خطأ في قراءة الرد:" + e.toString());
}
}
آخر
...{
// عرض رسالة الحالة
تنبيه ("حدثت مشكلة في استرداد البيانات:" +
xmlHttp.statusText);
}
}
}
///////4. وظيفة الاستجابة لحدث JavaScript (مشغل عند النقر)
الدالة CSparameter()
...{
// تابع فقط إذا لم يكن xmlHttp فارغًا
إذا (xmlHttp)
...{
// حاول الاتصال بالخادم
يحاول
...{
// احصل على القيمة في النموذج
var firstNumber=document.getElementById("firstNumber").value;
var SecondNumber=document.getElementById(" SecondNumber").value;
// قم بتعيين كمعلمة لتقديم طلب غير متزامن إلى CSparameter.php على جانب الخادم
var param = "firstNumber = "+firstNumber+"& SecondNumber = "+ SecondNumber؛
// ابدأ في قراءة الملف من الخادم
xmlHttp.open("GET", "CSparameter.php؟"+param, true);
xmlHttp.onreadystatechange = HandleRequestStateChangePara;
xmlHttp.send(null);
}
// عرض الخطأ في حالة الفشل
قبض (ه)
...{
تنبيه("لا يمكن الاتصال بالخادم:" + e.toString());
}
}
}
// وظيفة رد الاتصال لتغيير حالة الخادم (يقبل الخادم المعلمات من العميل ويعيد استجابة XML بعد الحساب المنطقي. يقوم العميل بتحليل XML وإرجاع التحديثات إلى الصفحة)
// يعالج الاستجابة المستلمة من الخادم
الدالة HandleRequestStateChangePara()
...{
إذا (xmlHttp.readyState == 4)
...{
// تابع فقط إذا كانت حالة HTTP "موافق"
إذا (xmlHttp.status == 200)
...{
يحاول
...{
// اقرأ الرسالة من الخادم
var xmlResponse = xmlHttp.responseXML;
// التقط الأخطاء المحتملة في IE وOpera
إذا (!xmlResponse||!xmlResponse.documentElement)
...{
throw("بنية XML غير صالحة:"+xmlHttp.responseText);
}
// التقط الأخطاء المحتملة في FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
إذا (rootNodeName = = "خطأ المحلل")
...{
throw("بنية XML غير صالحة:"+xmlHttp.responseText);
}
// احصل على عنصر مستند XML
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("result");
// إنشاء إخراج HTML
فار html = "";
// التكرار عبر المصفوفات وإنشاء بنية HTML
لـ (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// احصل على مرجع للعنصر <div> الموجود في الصفحة
myDiv = document.getElementById("result");
// عرض مخرجات HTML
myDiv.innerHTML = "يقول الخادم: <br />" + html;
}
قبض (ه)
...{
// عرض رسالة الخطأ
تنبيه("خطأ في قراءة الرد:" + e.toString());
}
}
آخر
...{
// عرض رسالة الحالة
تنبيه ("حدثت مشكلة في استرداد البيانات:" +
xmlHttp.statusText);
}
}
}
برنامج PHP النصي من جانب الخادم (المسؤول عن قبول الطلبات غير المتزامنة من العميل، والرد عليها، وإعادتها إلى العميل بتنسيق XML)
PHEchoXML.php (الطريقة الأولى لـ PHP لإنشاء استجابة XML، ومخرجات الصدى لمحتوى XML)
<?php
// الطريقة الأولى لـ PHP من جانب الخادم لإنشاء ملفات XML هي تكرار XML مباشرة.
header('نوع المحتوى: نص/xml');
// إنشاء رأس XML
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
echo '<cities>';
$cityArray=array('Paris','London','NewYork','Beijing','Tokoy');
foreach ($cityArray كـ $city)
{
صدى '<city>'.$city.'</city>';
}
echo '</cities>'
?>
PHPDOMXML.php (الطريقة الثانية لـ PHP لإنشاء استجابة XML، باستخدام واجهة برمجة تطبيقات DOM الخاصة بـ PHP لإخراج استجابة بتنسيق XML)
<?php
header('نوع المحتوى: نص/xml');
$cityArray=array('Shanghai','Beijing','Shanxi','Shandong');
// أنشئ مستند XML
$dom=new DOMDocument();
// العلامة الخارجية
$citiesTag=$dom->createElement('cities');
$dom->appendChild($citiesTag);
// يمكن إنشاء العلامة الداخلية من خلال التكرار
foreach ($cityArray كـ $city)
{
$cityTag=$dom->createElement('city');
$cityName=$dom->createTextNode($city);
$cityTag->appendChild($cityName);
$citiesTag->appendChild($cityTag);
}
// احفظ بنية XML كسلسلة وأخرجها
$xmlString=$dom->saveXML();
صدى $xmlString;
?>
2. نقل المعلمات بين جانب العميل وجانب الخادم:
يمكن أن يكون هناك نموذج في صفحة الويب من جانب العميل، بحيث يمكن تمرير المعلمات إلى جانب الخادم <طريقة GET أو POST أو المتغير أو XML>، ويقوم جانب الخادم بإنشاء استجابة XML تلبي المتطلبات بناءً على المعلمات التي تم تمريرها (تفاعل المعلمات من جانب العميل والخادم)
انظر المثال:
كما في 1، يكون البرنامج النصي الموجود على جانب PHP لتمرير المعلمات كما يلي CSparameter.php (يقبل معلمات نموذج العميل غير المتزامن، ويجري معالجة منطقية، ويولد استجابة XML لإرسالها مرة أخرى إلى العميل) <?php
// تخصيص وظيفة معالجة الأخطاء على جانب الخادم
require_once('error_handler.php');
header('Content-Type: text/xml');
// قبول معلمات طلب العميل غير المتزامن
$firstNumber=$_GET['firstNumber'];
$ SecondNumber=$_GET[' SecondNumber'];
// إجراء الحسابات المنطقية
$result=$firstNumber/$ SecondNumber;
// أنشئ استجابة بتنسيق XML وأعدها إلى العميل
$dom=new DOMDocument();
$resultsTag=$dom->createElement('results');
$dom->appendChild($resultsTag
=$dom->createElement('result');
$resultText=$dom->createTextNode($result);
$resultTag->appendChild($resultText);
$resultsTag->appendChild($resultTag);
$xmlString=$dom->saveXML();
صدى $xmlString
?>
3. التعامل مع استثناءات الأخطاء من جانب PHP (الأخطاء أو الاستثناءات المذكورة هنا تشير إلى الأخطاء المنطقية):
أ) افتراضيًا، لن تقوم PHP بطرح استثناء عند حدوث خطأ أو استثناء (وهذا بسبب ضبط أخطاء العرض الافتراضية في php.ini على إيقاف التشغيل، وسيتم حفظ الخطأ في سجل سجل أخطاء Apache)، لذا فهو كذلك مكتوب من الصعب تصحيحه. <غالبًا ما يكون من الصعب تحديد موقع الأخطاء التي يعرضها المتصفح>
ب) ولكن إذا تم ضبط Display_errors على وضع التشغيل، فسيتم عرض الخطأ، ولكن رسالة الخطأ ستكون غير ودية.
http://www.downcodes.com/
ج) يمكنك كتابة وظيفة معالجة استثناء الأخطاء الخاصة بك في PHP (لا يلزم بالضرورة تعيين display_errors على) لعرض الأخطاء بطريقة واضحة لتصحيح الأخطاء بسهولة؛
عادةً ما تكتب وظيفة معالجة الاستثناءات الخاصة بك على النحو التالي:
عرض استثناء الخطأ المحدد من جانب الخادم لوظيفة الرمي error_handler.php (يمكن إعادة استخدامه بسهولة في برامج PHP)
<?php
// قم بتعيين وظيفة معالج الأخطاء المعرفة من قبل المستخدم وطريقة معالجة استثناء الأخطاء المعرفة من قبل المستخدم
set_error_handler('error_handler', E_ALL);
الدالة error_handler($errNo,$errStr,$errFile,$errLine)
{
// إذا لم يكن المخزن المؤقت للإخراج فارغًا، فقم بإفراغه
if(ob_get_length()) ob_clean();
// تحديد الإخراج المخصص
$error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOCATION: '.$errFile.', Line'.$errLine;
صدى $error_message;
مخرج؛
}
?>
4. الوصول من جانب الخادم إلى قاعدة البيانات <استخدم MySQL للوصول إلى البيانات لتحقيق ديناميكيات حقيقية>
هذا بالفعل كلاسيكي جدًا، ويمكنك استخدام MySQL وMSSQL وOracle وما إلى ذلك.
أ) فتح قاعدة البيانات ب) استعلام بيان SQL ج) إغلاق قاعدة البيانات
5. تغليف وهندسة برنامج PHP من جانب الخادم (يقدم برنامج PHP من جانب الخادم وضع التصميم)
أ) appname.php <قبول طلب العميل>
ب) appname.class.php <تغليف المنطق من جانب الخادم، وعمليات قاعدة البيانات، ومعالجة الأخطاء، وما إلى ذلك في فئات، بما في ذلك السمات، والأساليب، والمنشئات، والمدمرات>
ج) التكوين.php
د) error_handler.php
هو مثال على تقديم أنماط التصميم من جانب الخادم: (تصميم بنية البرنامج لنصوص PHP من جانب الخادم لتعزيز قابلية التوسع وإعادة الاستخدام)
برنامج بسيط للغاية لاقتراح الكلمات الرئيسية: (يتضمن Index.html وcss/style.css وjs.js وPHP code php/suggest.php وsuggest.class.php وerror_handler.php وconfig.php يدعم قاعدة البيانات)
Index.html(css/style.css, js.js; لاحظ أن حدثين لعميل JS يؤديان إلى تشغيل المفتاح عند النقر)
يرسل onkeyup طلبًا إلى الخادم بشكل غير متزامن في الوقت الفعلي عندما يقوم المستخدم بإدخاله، ويستجيب الخادم عند النقر ويرسل طلبًا إلى الخادم عندما ينقر المستخدم على بحث.
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<أتش تي أم أل>
<الرأس>
<title> نمط التصميم PHP AJAX (الكلمات الرئيسية تشير إلى العرض التوضيحي) </title>
<link type="text/css" rel="stylesheet" href="css/style.css"/>
<script type="text/javascript" src="js.js"></script>
</الرأس>
<الجسم>
<noscript>
<strong>يتطلب هذا المثال متصفحًا يدعم JavaScript!</strong>
</noscript>
<div class="project">
<span class="title">مرحبًا بك في نمط التصميم PHP AJAX (تقترح الكلمات الرئيسية عرضًا توضيحيًا) </span>
<br />
<br />
<div class="news">
<br /><input type = "text" id = "keyword" onkeyup = "keyup ()" /><input type = "button" id = "search" onclick = "search ()" value = "search"> <br /><br />
اقتراح الكلمات الرئيسية:
<div id="show"></div>
</div>
</div>
</الجسم>
</html>
css/style.css
جسم
{...}{
عائلة الخط: Arial؛
حجم الخط: صغير؛
لون الخلفية: #fff؛
}
.عنوان
{...}{
حجم الخط: كبير جدًا؛
}
div.project
{...}{
لون الخلفية: #99ccff؛
الحشو: 5 بكسل؛
الحدود:#000099 1 بكسل صلب؛
}
div.news
{...}{
لون الخلفية:#fffbb8;
الحشو: 2 بكسل؛
الحدود: 1 بكسل متقطع؛
}
#يعرض
{...}{
اللون: #008000؛
نمط الخط: مائل؛
}js.js (تحديد وظيفة الاستجابة في JS ووظيفة رد الاتصال للعميل لمعالجة استجابة الخادم)
////////////////////////////////////////////////////////////////// /// /////////
//1. إنشاء كائن XMLHttpRequest
////////////////////////////////////////////////////////////////// /// /////////
var xmlHttp = createXmlHttpRequestObject();
الدالة createXmlHttpRequestObject()
...{
فار xmlHttp;
يحاول
...{
// حاول إنشاء كائن XMLHttpRequest
xmlHttp = new XMLHttpRequest();
}
قبض (ه)
...{
// افترض IE6 أو أقدم
فار XmlHttpVersions = مصفوفة جديدة ('MSXML2.XMLHTTP.6.0'،
"MSXML2.XMLHTTP.5.0"،
"MSXML2.XMLHTTP.4.0"،
"MSXML2.XMLHTTP.3.0"،
"MSXML2.XMLHTTP"،
'Microsoft.XMLHTTP')؛
لـ (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
يحاول
...{
// حاول إنشاء كائن XMLHttpRequest
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
أمسك (هـ) ...{}
}
}
إذا (!xmlHttp)
تنبيه ("حدث خطأ أثناء إنشاء كائن XMLHttpRequest.")؛
آخر
إرجاع xmlHttp;
}
// اعرض الاستجابة الصحيحة من الخادم إلى القسم بمعرف العرض
عرض الوظيفة (الرسالة)
...{
showDIV=document.getElementById("show");
showDIV.innerHTML=message;
}
// عرض رسالة الخطأ الخاصة بالاستجابة من جانب الخادم لـ div بمعرف العرض
خطأ في عرض الوظيفة (رسالة خطأ)
...{
// عرض رسالة الخطأ
عرض("حدث خطأ أثناء استرداد الرسالة الجديدة!<br/>"+errormessage);
}
///////////////////////////////////////////////// /// //////////
//2. وظيفة تعتمد على الحدث (وظيفة المفاتيح)
////////////////////////////////////////////////////////////////// /// /////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
مفتاح الوظيفة ()
...{
إذا (xmlHttp)
...{
// أرسل طلبًا غير متزامن عندما لا يكون الخادم مشغولاً
إذا (xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
يحاول
...{
var الكلمة=document.getElementById("keyword").value;
// تقديم طلب غير متزامن
xmlHttp.open("GET",keyupAddress+keyword,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
}
قبض (ه)
...{
this.displayError(e.toString);
}
}
}
}
////////////////////////////////////////////////////////////////// /// /////////
//3. وظيفة رد الاتصال، يتم تشغيل هذه الوظيفة عندما تتغير حالة استجابة الخادم.
////////////////////////////////////////////////////////////////// /// /////////
مقبض الدالةreadystatechange()
...{
إذا (xmlHttp.readyState==4)
...{
إذا (xmlHttp.status==200)
...{
يحاول
...{
// احصل على استجابة الخادم
var xmlResponse = xmlHttp.responseXML;
قترح Array=xmlResponse.getElementsByTagName("suggest");
فار showText="";
for(var i=0;i<suggestArray.length;i++)
...{
var textNodes=suggestArray[i].getElementsByTagName("text");
var timesNodes=suggestArray[i].getElementsByTagName("times");
for(var j=0;j<textNodes.length;j++)
...{
showText+=textNodes[j].childNodes[0].nodeValue+" ("+timesNodes[j].childNodes[0].nodeValue+") <br />";
}
}
// عرض الرد على الصفحة
عرض(showText);
}
قبض (ه)
...{
DisplayError(e.toString());
}
}
}
}
////////////////////////////////////////////////////////////////// /// /////////
//2.وظيفة تعتمد على الحدث (وظيفة البحث)
////////////////////////////////////////////////////////////////// /// /////////
var searchAddress="php/suggest.php?action=search&keyword=";
البحث عن وظيفة ()
...{
إذا (xmlHttp)
...{
// أرسل طلبًا غير متزامن عندما لا يكون الخادم مشغولاً
إذا (xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
يحاول
...{
var الكلمة=document.getElementById("keyword").value;
// تقديم طلب غير متزامن
xmlHttp.open("GET",searchAddress+keyword,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
}
قبض (ه)
...{
this.displayError(e.toString);
}
}
}
}
ملاحظة أخيرة: بنية البرنامج الخاصة ببرنامج PHP النصي من جانب الخادم (suggest.php هي وظيفة المعالجة الرئيسية من جانب الخادم، وهناك أيضًاقترح.class.php، وerror_handler.php، وconfig.php، وما إلى ذلك)
قترح.php (احصل على معلمات العميل، واستدعاء طريقتي فئة الاقتراح لإنشاء استجابة بتنسيق XML وإرسالها مرة أخرى إلى العميل)
<?php
require_once('suggest.class.php');
header('نوع المحتوى: نص/xml');
// تأكد من أن متصفح المستخدم لن يقوم بتخزين النتائج مؤقتًا
header('تنتهي الصلاحية: الأربعاء، 23 ديسمبر 1980 00:30:00 بتوقيت جرينتش');
header('Last-Modified: '.gmdate('D, d MYH:i:s').' GMT' );
header('التحكم في ذاكرة التخزين المؤقت: عدم وجود ذاكرة تخزين مؤقت، يجب إعادة التحقق');
header('Pragma: no-cache')
;
$keyword=$_GET['keyword'];
$oSuggest=newقترح();
إذا($action=='keyup'&&$الكلمة الرئيسية!='')
{
$suggestXML=$oSuggest->getSuggests($keyword);
}
إذا($action=='search'&&$الكلمة الرئيسية!='')
{
$suggestXML=$oSuggest->submitKeyword($keyword);
}
صدى $suggestXML;
?>suggest.class.php فئة
<?php
require_once('error_handler.php');
require_once('config.php');
يقترح الفصل
{
// متغيرات الأعضاء
خاص $conn
// المُنشئ، رابط قاعدة البيانات
دالة __ بناء ()
{
$this->conn=new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
إذا (mysqli_connect_errno ()) {
printf("فشل الاتصال: %s"، mysqli_connect_error());
مخرج()؛
}
}
// المدمر، افصل رابط قاعدة البيانات
الدالة __تدمير()
{
$this->conn->إغلاق();
}
// وظيفة العضو getSuggests (تستجيب هذه الوظيفة بشكل أساسي للإجراء من جانب العميل = keyup، أي طلب غير متزامن عندما يكتب المستخدم)
الوظيفة العامة getSuggests($keyword)
{
// إنشاء اقتراح (إنشاء كلمات رئيسية في قاعدة البيانات مماثلة للنصف الأول من الكلمة الرئيسية المدخلة)
$suggest_query='اختر * من الكلمات الرئيسية التي تكون الكلمات الرئيسية فيها مثل ''.$keyword.'%' مرتبة حسب عدد مرات التنازل 5';
$suggest_result=$this->conn->query($suggest_query);
$suggest_num=$suggest_result->num_rows
$strOUT='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
إذا($suggest_num==0)
{
//$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>0</times></suggest></suggests>';
}
آخر
{
$strOUT=$strOUT."<suggests>";
ل($i=0;$i<$suggest_num;$i++)
{
$suggest_row = $suggest_result->fetch_row();
$strOUT=$strOUT.'<suggest><text>'.$suggest_row[1].'</text><times>'.$suggest_row[2].'</times></suggest>';
}
$strOUT=$strOUT.'</suggests>';
}
إرجاع $strOUT؛
}
// وظيفة عضو submitKeyword (تستجيب هذه الوظيفة بشكل أساسي للإجراء من جانب العميل = البحث، أي الطلب غير المتزامن عندما ينقر المستخدم على بحث)
الوظيفة العامة إرسال الكلمة الرئيسية($الكلمة الرئيسية)
{
$select_query='اختر * من الكلمات الرئيسية حيث الكلمة الرئيسية=''.$keyword.''';
$select_result=$this->conn->query($select_query);
$select_num=$select_result->num_rows;
// أضف كلمات رئيسية جديدة إلى قاعدة البيانات عند مواجهتها، وقم بزيادة عدد الكلمات الرئيسية الموجودة عند مواجهتها.
$strOUT='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
// موجود بالفعل، قم بزيادة عدد المرات
إذا($select_num!=0)
{
$select_row = $select_result->fetch_row();
$times_now=$select_row[2];
$times_now=$times_now+1;
$update_query='تحديث الكلمات الرئيسية مرات محددة ='.$times_now.' حيث الكلمة الرئيسية=''.$keyword.''';
$update_result=$this->conn->query($update_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>'.$times_now.'</times></suggest></suggests>';
}
آخر
{
// لا يوجد حفظ الإدراج
$insert_query='إدراج في قيم الكلمات الرئيسية(الكلمة الرئيسية، الأوقات) (''.$keyword.'',1)';
$insert_result=$this->conn->query($insert_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>1</times></suggest></suggests>';
}
إرجاع $strOUT؛
}
}
?>
الوظيفتان الأخيرتان، config.php، تحفظان معلومات تكوين التطبيق (مثل معلومات تكوين قاعدة البيانات)
<?php
تعريف('DB_HOST', 'المضيف المحلي');
تعريف('DB_USER','phpajaxuser');
تعريف('DB_PASSWORD','phpajaxuser');
تعريف('DB_DATABASE','phpajax');
?>
يحفظ error_handler.php معالجة الاستثناءات المخصصة
<?php
// قم بتعيين وظيفة معالجة الأخطاء المحددة من قبل المستخدم
set_error_handler('error_handler', E_ALL);
وظيفة error_handler($errNo,$errStr,$errFile,$errLine)
{
if(ob_get_length()) ob_clean();
$error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOCATION: '.$errFile.' '.$errLine;
صدى $error_message;
مخرج؛
}
?>أخيرًا، هناك حاجة إلى عبارات SQL لإضافة قاعدة البيانات لحفظ الكلمات الرئيسية في قاعدة البيانات.
إنشاء جدول "الكلمات الرئيسية" (
`id` int(10) unsigned NOT NULL auto_increment،
`الكلمة الرئيسية` varchar(32) ليست فارغة افتراضية ''،
`مرات` int(10) غير موقعة NOT NULL الافتراضي '0'،
المفتاح الأساسي (`المعرف`)
) TYPE=MyISAM AUTO_INCREMENT=1
6. القليل من المعرفة حول PHP للبحث المستقبلي:
كيف تقرأ PHP البيانات من خادم بعيد (يشبه إلى حد ما Web Crawl):
file_get_contents;
أو CURL<مكتبة URL للعميل>www.php.net/curl