Tugas di sisi server biasanya melakukan operasi logika sesuai permintaan klien dan mengembalikan respons hasil. Respons ini biasanya dalam format XML (jadi sisi server perlu menggunakan DOM PHP untuk membuat respons XML)
1. PHP menggunakan DOM untuk membuat respons XML, yang diurai oleh JS klien dan kemudian ditampilkan di halaman; Anda harus mahir dalam DOM API PHP)
Sebenarnya, ada dua cara untuk menghasilkan XML di PHP:
Gunakan API DOM; (Metode 1)
Cara lainnya adalah dengan langsung menggaungkan konten XML; (Metode 2)
Lihat contoh:
Halaman HTML (berisi tiga fungsi pemicu JS: onmouseover, onmouseout, onclick; memicu fungsinya masing-masing)
<!doctype html publik "-//w3c//dtd html 4.0 tRANSIONAL//en">
<html>
<kepala>
<judul>Server PHP Ajax </judul>
<skrip type="teks/javascript" src="js.js"></skrip>
</kepala>
<tubuh>
<span onmouseover="PHPechoXML()" onmouseout="PHPDOMXML()">Kata-kata Default</span>
<div id="tampilkan"></div>
bagi<input type="text" id="firstNumber"/>dengan
<input type = "teks" id = "Nomor Kedua"/>
<input type="button" value="Kirim" onclick="CSparameter()"/>
<div id="hasil"></div>
</tubuh>
</html>
Halaman JS (tentukan masing-masing tiga fungsi pemicu JS: PHPechoXML, PHPDOMXML, dan CSparameter)
Ada fungsi pembuatan objek XMLHttpRequest dan fungsi pemrosesan respons Server masing-masing.
///////1. Buat objek XMLHttpRequest
var xmlHttp = buatXmlHttpRequestObject();
fungsi buatXmlHttpRequestObject();
...{
var xmlHttp;
coba
...{
// mencoba membuat objek XMLHttpRequest
xmlHttp = XMLHttpRequest baru();
}
menangkap(e)
...{
// asumsikan IE6 atau lebih lama
var XmlHttpVersions = Array baru('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
untuk (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
mencoba
...{
// mencoba membuat objek XMLHttpRequest
xmlHttp = ActiveXObject baru(XmlHttpVersions[i]);
}
tangkap (e) ...{}
}
}
jika (!xmlHttp)
alert("Kesalahan saat membuat objek XMLHttpRequest.");
kalau tidak
kembalikan xmlHttp;
}
///////2. Fungsi respons peristiwa JavaScript (pemicu onmouseover)
// membaca file dari server
fungsi PHPichoXML()
...{
// hanya melanjutkan jika xmlHttp tidak batal
jika(xmlHttp)
...{
// coba sambungkan ke server
mencoba
...{
//mulai membaca file dari server
//Kirim permintaan asinkron ke file PHPechoXML.php di sisi server
xmlHttp.open("GET", "PHPechoXML.php", benar);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.kirim(null);
}
// menampilkan kesalahan jika terjadi kegagalan
menangkap (e)
...{
alert("Tidak dapat terhubung ke server: " + e.toString());
}
}
}
///////3. Fungsi respons peristiwa JavaScript (pemicu onmouseout)
fungsiPHPDOMXML()
...{
// hanya melanjutkan jika xmlHttp tidak batal
jika(xmlHttp)
...{
// coba sambungkan ke server
mencoba
...{
//mulai membaca file dari server
//Kirim permintaan asinkron ke file PHPDOMXML.php di sisi server
xmlHttp.open("GET", "PHPDOMXML.php", benar);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.kirim(null);
}
// menampilkan kesalahan jika terjadi kegagalan
menangkap (e)
...{
alert("Tidak dapat terhubung ke server: " + e.toString());
}
}
}
// menangani respons yang diterima dari server, fungsi panggilan balik status sisi server
fungsi handleRequestStateChange()
...{
jika (xmlHttp.readyState == 4)
...{
// lanjutkan hanya jika status HTTP "OK"
jika (xmlHttp.status == 200)
...{
mencoba
...{
// membaca pesan dari server
var xmlResponse = xmlHttp.responseXML;
//Menangkap potensi kesalahan di IE dan Opera
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Struktur XML tidak valid: "+xmlHttp.responseText);
}
//Menangkap potensi kesalahan di FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="parsererror")
...{
throw("Struktur XML tidak valid: "+xmlHttp.responseText);
}
//Dapatkan respons XML dari server, parse, dan tampilkan di halaman web
//mendapatkan elemen dokumen XML
xmlRoot = xmlResponse.documentElement;
// mendapatkan array dengan judul buku dan ISBN
cityArray=xmlRoot.getElementsByTagName("kota");
//menghasilkan keluaran HTML
varhtml = "";
// ulangi array dan buat struktur HTML
untuk (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// mendapatkan referensi ke elemen <div> pada halaman
myDiv = document.getElementById("tampilkan");
// menampilkan keluaran HTML
myDiv.innerHTML = "Server mengatakan: <br />" + html;
}
menangkap(e)
...{
//menampilkan pesan kesalahan
alert("Kesalahan saat membaca respon: " + e.toString());
}
}
kalau tidak
...{
//menampilkan pesan status
alert("Terjadi masalah saat mengambil data: " +
xmlHttp.statusTeks);
}
}
}
///////4. Fungsi respons peristiwa JavaScript (pemicu onclick)
fungsi CSparameter()
...{
// hanya melanjutkan jika xmlHttp tidak batal
jika(xmlHttp)
...{
// coba sambungkan ke server
mencoba
...{
//Dapatkan nilai dalam formulir
var firstNumber=document.getElementById("firstNumber").value;
var secondNumber=document.getElementById("secondNumber").value;
//Tetapkan sebagai parameter untuk membuat permintaan asinkron ke CSparameter.php di sisi server
var param="firstNumber="+firstNumber+"&secondNumber="+secondNumber;
// mulai membaca file dari server
xmlHttp.open("GET", "CSparameter.php?"+param, benar);
xmlHttp.onreadystatechange = handleRequestStateChangePara;
xmlHttp.kirim(null);
}
// menampilkan kesalahan jika terjadi kegagalan
menangkap (e)
...{
alert("Tidak dapat terhubung ke server: " + e.toString());
}
}
}
//Fungsi panggilan balik perubahan status server (server menerima parameter dari klien dan mengembalikan respons XML setelah perhitungan logis. Klien mem-parsing XML dan mengembalikan pembaruan ke halaman)
// menangani respon yang diterima dari server
fungsi handleRequestStateChangePara()
...{
jika (xmlHttp.readyState == 4)
...{
// lanjutkan hanya jika status HTTP "OK"
jika (xmlHttp.status == 200)
...{
mencoba
...{
// membaca pesan dari server
var xmlResponse = xmlHttp.responseXML;
//Menangkap potensi kesalahan di IE dan Opera
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Struktur XML tidak valid: "+xmlHttp.responseText);
}
//Menangkap potensi kesalahan di FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="parsererror")
...{
throw("Struktur XML tidak valid: "+xmlHttp.responseText);
}
//mendapatkan elemen dokumen XML
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("hasil");
//menghasilkan keluaran HTML
varhtml = "";
// ulangi array dan buat struktur HTML
untuk (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// mendapatkan referensi ke elemen <div> pada halaman
myDiv = document.getElementById("hasil");
// menampilkan keluaran HTML
myDiv.innerHTML = "Server mengatakan: <br />" + html;
}
menangkap(e)
...{
//menampilkan pesan kesalahan
alert("Kesalahan saat membaca respon: " + e.toString());
}
}
kalau tidak
...{
//menampilkan pesan status
alert("Terjadi masalah saat mengambil data: " +
xmlHttp.statusTeks);
}
}
}
Skrip PHP sisi server (bertanggung jawab untuk menerima permintaan asinkron dari Klien, meresponsnya, dan mengembalikannya ke Klien dalam format XML)
PHEchoXML.php (metode pertama PHP untuk menghasilkan respons XML, echo menampilkan konten XML)
<?php
//Metode pertama PHP sisi server untuk menghasilkan file XML adalah dengan melakukan echo XML secara langsung.
header('Tipe Konten: teks/xml');
//menghasilkan tajuk XML
echo '<?xml version="1.0" coding="UTF-8" standalone="ya"?>'
;
$cityArray=array('Paris','London','NewYork','Beijing','Tokoy');
foreach ($cityArray sebagai $kota)
{
echo '<kota>'.$kota.'</kota>';
}
echo '</cities>';
?>
PHPDOMXML.php (Metode kedua PHP untuk menghasilkan respons XML, menggunakan DOM API PHP untuk mengeluarkan respons dalam format XML)
<?php
header('Tipe Konten: teks/xml');
$cityArray=array('Shanghai','Beijing','Shanxi','Shandong');
//Buat dokumen XML
$dom=Dokumen DOM baru();
//Tag Terluar
$citiesTag=$dom->createElement('kota');
$dom->appendChild($citiesTag);
//Tag di dalamnya dapat dihasilkan melalui perulangan
foreach ($cityArray sebagai $kota)
{
$cityTag=$dom->createElement('kota');
$cityName=$dom->createTextNode($kota);
$cityTag->appendChild($cityName);
$citiesTag->appendChild($cityTag);
}
//Simpan struktur XML sebagai string dan keluarkan
$xmlString=$dom->simpanXML();
gema $xmlString;
?>
2. Transfer parameter antara sisi klien dan sisi server:
Mungkin ada formulir di halaman web sisi klien, sehingga parameter dapat diteruskan ke sisi server <metode GET atau POST, variabel atau XML>, dan sisi server menghasilkan respons XML yang memenuhi persyaratan berdasarkan parameter yang diteruskan; (menerapkan interaksi parameter sisi klien dan sisi server)
Lihat contoh:
Seperti pada 1, skrip di sisi PHP untuk penerusan parameter adalah sebagai berikut CSparameter.php (menerima parameter permintaan asinkron dari formulir klien, melakukan pemrosesan logis, dan menghasilkan respons XML untuk dikirim kembali ke klien) <?php
//Sesuaikan fungsi penanganan kesalahan di sisi server
require_once('error_handler.php');
header('Tipe Konten: teks/xml');
//Terima parameter permintaan asinkron klien
$firstNumber=$_GET['firstNumber'];
$secondNumber=$_GET['secondNumber'];
//Lakukan perhitungan logis
$result=$firstNumber/$secondNumber;
//Buat respons dalam format XML dan kembalikan ke Klien
$dom=Dokumen DOM baru();
$resultsTag=$dom->createElement('hasil');
$dom->appendChild($resultsTag);
$resultTag=$dom->createElement('result');
$resultText=$dom->createTextNode($hasil);
$resultTag->appendChild($resultText);
$resultsTag->appendChild($resultTag);
$xmlString=$dom->saveXML();
gema $xmlString;
?>
3. Penanganan error Exception pada sisi PHP (error atau pengecualian yang disebutkan di sini mengacu pada kesalahan logikal):
a) Secara default, PHP tidak akan mengeluarkan pengecualian ketika terjadi kesalahan atau pengecualian (ini karena default display_errors di php.ini dinonaktifkan, dan kesalahan tersebut akan disimpan dalam catatan log kesalahan Apache), jadi tertulis Sulit untuk di-debug. <Seringkali sulit untuk menemukan kesalahan yang ditampilkan oleh browser>
b) Namun jika display_errors diaktifkan, kesalahan akan ditampilkan, namun pesan kesalahannya tidak ramah.
http://www.downcodes.com/
c) Anda dapat menulis fungsi penanganan pengecualian kesalahan PHP Anda sendiri (display_errors tidak harus diaktifkan) untuk menampilkan kesalahan dengan cara yang jelas untuk memudahkan proses debug;
Biasanya Anda menulis fungsi penanganan pengecualian Anda sendiri sebagai berikut:
Menampilkan fungsi pelemparan pengecualian kesalahan sisi server yang ditentukan error_handler.php (dapat dengan mudah digunakan kembali dalam program PHP)
<?php
//menetapkan fungsi penangan kesalahan yang ditentukan pengguna, metode penanganan pengecualian kesalahan yang ditentukan pengguna
set_error_handler('error_handler', E_ALL);
fungsi error_handler($errNo,$errStr,$errFile,$errLine)
{
//Jika buffer keluaran tidak kosong, kosongkan
if(ob_get_length()) ob_clean();
//Tentukan keluaran khusus
$error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOKASI: '.$errFile.', Line'.$errLine;
gema $pesan_kesalahan;
KELUAR;
}
?>
4. Akses sisi server ke database <Gunakan MySQL untuk mengakses data guna mencapai dinamika yang sebenarnya>
Ini sudah sangat klasik, Anda bisa menggunakan MySQL, MSSQL, Oracle, dll.
a) Buka database; b) Pernyataan SQL Query c) Tutup database
5. Enkapsulasi dan arsitektur program PHP sisi server (program PHP sisi server memperkenalkan mode desain)
a) appname.php <Terima permintaan klien>
b) appname.class.php <Enkapsulasi logika sisi server, operasi database, penanganan kesalahan, dll. ke dalam kelas, termasuk atribut, metode, konstruktor, dan destruktor>
c) config.php
d) error_handler.php
adalah contoh pengenalan pola desain di sisi server: (Rancang arsitektur program skrip PHP sisi server untuk meningkatkan skalabilitas dan penggunaan kembali)
Program Saran Kata Kunci yang sangat sederhana: (termasuk index.html, css/style.css, js.js dan kode PHP php/suggest.php, suggest.class.php, error_handler.php, config.php mendukung database)
index.html(css/style.css, js.js; perhatikan bahwa dua peristiwa klien JS memicu onkeyup, onclick)
onkeyup mengirimkan permintaan ke server secara asinkron secara real-time ketika pengguna memasukkan, dan server merespons; onclick mengirimkan permintaan ke server ketika pengguna mengklik pencarian.
<!doctype html publik "-//w3c//dtd html 4.0 tRANSIONAL//en">
<html>
<kepala>
<title> Pola Desain PHP AJAX (kata kunci menyarankan DEMO) </title>
<link type="teks/css" rel="stylesheet" href="css/style.css"/>
<skrip type="teks/javascript" src="js.js"></skrip>
</kepala>
<tubuh>
<tanpa skrip>
<strong>Contoh ini memerlukan browser berkemampuan JavaScript!</strong>
</noskrip>
<div kelas="proyek">
<span class="title">Selamat Datang di Pola Desain PHP AJAX (kata kunci menyarankan DEMO) </span>
<br />
<br />
<div kelas="berita">
<br /><input type="text" id="keyword" onkeyup="keyup()" /><input type="button" id="search" onclick="search()" value="search"> <br /><br />
menyarankan kata kunci:
<div id="tampilkan"></div>
</div>
</div>
</tubuh>
</html>
css/style.css
tubuh
{...}{
keluarga font: Arial;
ukuran font: kecil;
warna latar belakang: #fff;
}
.judul
{...}{
ukuran font:x-besar;
}
div.proyek
{...}{
warna latar: #99ccff;
bantalan:5 piksel;
batas:#000099 1 piksel padat;
}
div.berita
{...}{
warna latar:#fffbb8;
bantalan:2 piksel;
batas: 1px putus-putus;
}
#menunjukkan
{...}{
warna: #008000;
gaya font: miring;
}js.js (mendefinisikan fungsi respons di JS dan fungsi panggilan balik bagi Klien untuk memproses respons Server)
//////////////////////////////////////////////////// /// /////////
//1. Buat objek XMLHttpRequest
//////////////////////////////////////////////////// /// /////////
var xmlHttp = buatXmlHttpRequestObject();
fungsi buatXmlHttpRequestObject()
...{
var xmlHttp;
mencoba
...{
// mencoba membuat objek XMLHttpRequest
xmlHttp = XMLHttpRequest baru();
}
menangkap(e)
...{
// asumsikan IE6 atau lebih lama
var XmlHttpVersions = Array baru('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
untuk (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
mencoba
...{
// mencoba membuat objek XMLHttpRequest
xmlHttp = ActiveXObject baru(XmlHttpVersions[i]);
}
tangkap (e) ...{}
}
}
jika (!xmlHttp)
alert("Kesalahan saat membuat objek XMLHttpRequest.");
kalau tidak
kembalikan xmlHttp;
}
//Menampilkan respon yang benar dari server ke div dengan id show
tampilan fungsi (pesan)
...{
showDIV=document.getElementById("tampilkan");
showDIV.innerHTML=pesan;
}
//Menampilkan pesan kesalahan respon sisi server ke div dengan id show
fungsi displayError (pesan kesalahan)
...{
//Menampilkan pesan kesalahan
display("Kesalahan saat mengambil pesan baru!<br/>"+pesan kesalahan);
}
/////////////////////////////////////////////////// /// //////////
//2.fungsi berbasis peristiwa (fungsi keyup)
//////////////////////////////////////////////////// /// /////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
tombol fungsi()
...{
jika(xmlHttp)
...{
//Kirim permintaan asinkron saat server tidak sibuk
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
mencoba
...{
var kata kunci=document.getElementById("kata kunci").nilai;
//Buat permintaan asinkron
xmlHttp.open("GET",keyupAddress+kata kunci,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.kirim(null);
}
menangkap(e)
...{
displayError(e.toString);
}
}
}
}
//////////////////////////////////////////////////// /// /////////
//3. Fungsi panggilan balik, fungsi ini dipicu ketika status respons server berubah.
//////////////////////////////////////////////////// /// /////////
fungsi handlereadystatechange()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
mencoba
...{
//Dapatkan respons server
var xmlResponse = xmlHttp.responseXML;
suggestArray=xmlResponse.getElementsByTagName("suggest");
var showText="";
untuk(var i=0;i<suggestArray.length;i++)
...{
var textNodes=suggestArray[i].getElementsByTagName("teks");
var timesNodes=suggestArray[i].getElementsByTagName("kali");
for(var j=0;j<textNodes.panjang;j++)
...{
showText+=textNodes[j].childNodes[0].nodeValue+" ("+timesNodes[j].childNodes[0].nodeValue+") <br />";
}
}
//Menampilkan respons pada halaman
tampilan(tampilkanTeks);
}
menangkap(e)
...{
displayError(e.toString());
}
}
}
}
//////////////////////////////////////////////////// /// /////////
//2.fungsi berbasis peristiwa (fungsi pencarian)
//////////////////////////////////////////////////// /// /////////
var searchAddress="php/suggest.php?action=search&keyword=";
pencarian fungsi()
...{
jika(xmlHttp)
...{
//Kirim permintaan asinkron saat server tidak sibuk
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
mencoba
...{
var kata kunci=document.getElementById("kata kunci").nilai;
//Buat permintaan asinkron
xmlHttp.open("GET",alamatpencarian+kata kunci,benar);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.kirim(null);
}
menangkap(e)
...{
displayError(e.toString);
}
}
}
}
Catatan akhir: Struktur program skrip PHP sisi server (suggest.php adalah fungsi pemrosesan utama di sisi server, dan ada juga suggest.class.php, error_handler.php, config.php, dll.)
suggest.php (dapatkan parameter klien, dan panggil dua metode kelas saran untuk menghasilkan respons dalam format XML dan mengirimkannya kembali ke klien)
<?php
require_once('suggest.class.php');
header('Tipe Konten: teks/xml');
//Pastikan browser pengguna tidak menyimpan hasilnya dalam cache
header('Kedaluwarsa: Rabu, 23 Des 1980 00:30:00 GMT');
header('Terakhir Dimodifikasi: '.gmdate('D, d MYH:i:s').' GMT' );
header('Kontrol Cache: tanpa cache, harus divalidasi ulang');
header('Pragma: tanpa cache');
$aksi=$_GET['aksi'];
$kata kunci=$_GET['kata kunci'];
$oSuggest=saran baru();
if($action=='keyup'&&$kata kunci!='')
{
$suggestXML=$oSuggest->getSuggests($kata kunci);
}
if($action=='penelusuran'&&$kata kunci!='')
{
$suggestXML=$oSuggest->submitKeyword($keyword);
}
echo $suggestXML;
?>suggest.class.php kelas
<?php
require_once('error_handler.php');
require_once('config.php');
saran kelas
{
//Variabel anggota
pribadi $sambungan;
//Konstruktor, tautan basis data
fungsi__konstruksi()
{
$ini->sambungan=mysqli baru(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
jika (mysqli_connect_errno()) {
printf("Koneksi gagal: %s", mysqli_connect_error());
KELUAR();
}
}
//Destructor, putuskan tautan database
fungsi __menghancurkan()
{
$ini->sambung->tutup();
}
//fungsi anggota getSuggests (fungsi ini terutama merespons tindakan sisi klien=keyup, yaitu permintaan asinkron saat pengguna mengetik)
fungsi publik getSuggests($keyword)
{
//Generate saran (menghasilkan kata kunci dalam database yang sama dengan paruh pertama kata kunci yang dimasukkan)
$suggest_query='pilih * dari kata kunci yang kata kuncinya seperti ''.$keyword.'%' diurutkan berdasarkan waktu desc batas 5';
$suggest_result=$ini->sambungan->query($suggest_query);
$suggest_num=$suggest_result->num_rows;
$strOUT='<?xml version="1.0" coding="UTF-8" standalone="yes"?>';
if($suggest_num==0)
{
//$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>0</times></suggest></suggests>';
}
kalau tidak
{
$strOUT=$strOUT."<suggests>";
untuk($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>';
}
kembalikan $strOUT;
}
//fungsi anggota submitKeyword (fungsi ini terutama merespons tindakan sisi klien=pencarian, yaitu permintaan asinkron saat pengguna mengklik pencarian)
fungsi publik submitKeyword($keyword)
{
$select_query='pilih * dari kata kunci di mana kata kunci=''.$kata kunci.''';
$select_result=$ini->sambungan->query($select_query);
$select_num=$select_result->num_rows;
//Tambahkan kata kunci baru ke database saat menemukannya, dan tingkatkan jumlah kata kunci yang ada saat menemukannya.
$strOUT='<?xml version="1.0" coding="UTF-8" standalone="yes"?>';
//Sudah ada, tambah jumlahnya
jika($pilih_angka!=0)
{
$select_row = $select_result->fetch_row();
$times_now=$pilih_baris[2];
$times_now=$times_now+1;
$update_query='perbarui kata kunci yang ditetapkan waktu ='.$times_now.' di mana kata kunci=''.$kata kunci.''';
$update_result=$ini->sambungan->query($update_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>'.$times_now.'</times></suggest></suggests>';
}
kalau tidak
{
//Tidak ada penyisipan penyimpanan
$insert_query='masukkan ke dalam nilai kata kunci(kata kunci, waktu) (''.$kata kunci.'',1)';
$insert_result=$ini->sambungan->query($insert_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>1</times></suggest></suggests>';
}
kembalikan $strOUT;
}
}
?>
Dua fungsi terakhir, config.php menyimpan informasi konfigurasi aplikasi (seperti informasi konfigurasi database)
<?php
mendefinisikan('DB_HOST', 'localhost');
mendefinisikan('DB_USER','phpajaxuser');
mendefinisikan('DB_PASSWORD','phpajaxuser');
mendefinisikan('DB_DATABASE','phpajax');
?>
error_handler.php menyimpan penanganan pengecualian khusus
<?php
//Atur fungsi penanganan kesalahan yang ditentukan pengguna
set_error_handler('error_handler', E_ALL);
fungsi error_handler($errNo,$errStr,$errFile,$errLine)
{
if(ob_get_length()) ob_clean();
$error_message='ERRNO: '.$errNo.chr(10).'TEKS: '.$errStr.chr(10).'LOKASI: '.$errFile.' '.$errLine;
gema $pesan_kesalahan;
KELUAR;
}
?>Terakhir, pernyataan sql diperlukan untuk menambahkan database untuk menyimpan kata kunci ke database.
BUAT TABEL `kata kunci` (
`id` int(10) unsigned BUKAN NULL kenaikan_otomatis,
`kata kunci` varchar(32) BUKAN NULL default '',
`kali` int(10) tidak ditandatangani BUKAN NULL default '0',
KUNCI UTAMA (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;
6. Sedikit pengetahuan tentang PHP untuk penelitian selanjutnya:
Cara PHP membaca data dari server jauh (agak mirip dengan Web Crawl):
file_get_contents;
Atau CURL<Perpustakaan URL Klien>www.php.net/curl