Задача на стороне сервера обычно состоит в том, чтобы выполнить логические операции по запросу клиента и вернуть результат-ответ. Этот ответ обычно имеет формат XML (поэтому серверной стороне необходимо использовать DOM PHP для создания ответа XML).
1. PHP использует DOM для создания ответа XML, который анализируется JS клиента и затем отображается на странице (так; вам необходимо хорошо владеть PHP DOM API)
Фактически, существует два способа генерации XML в PHP:
Используйте DOM API (метод 1);
Другой — напрямую отображать содержимое XML (метод 2);
См. пример:
HTML-страница (содержит три триггерные функции JS: onmouseover, onmouseout, onclick; запускают свои собственные функции соответственно)
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<html>
<голова>
<title> Сервер PHP Ajax </title>
<script type="text/javascript" src="js.js"></script>
</head>
<тело>
<span onmouseover="PHPechoXML()" onmouseout="PHPDOMXML()">Слова по умолчанию</span>
<div id="show"></div>
разделить<input type="text" id="firstNumber"/> на
<input type="text" id=" SecondNumber"/>
<input type="button" value="Send" onclick="CSparameter()"/>
<div id="result"></div>
</тело>
</html>
Страница JS (определение трех триггерных функций JS соответственно: PHPechoXML, PHPDOMXML и CSparameter)
Существуют функции создания объекта XMLHttpRequest и соответствующие функции обработки ответов Сервера.
///////1. Создайте объект XMLHttpRequest.
вар xmlHttp =
функция createXmlHttpRequestObject
();
...{
вар
xmlHttp;
...{
// пытаемся создать объект XMLHttpRequest
xmlHttp = новый XMLHttpRequest();
}
поймать(е)
...{
// предполагаем IE6 или старше
var XmlHttpVersions = новый массив('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
«Microsoft.XMLHTTP»);
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
пытаться
...{
// пытаемся создать объект XMLHttpRequest
xmlHttp = новый ActiveXObject(XmlHttpVersions[i]);
}
поймать (е) ...{}
}
}
если (!xmlHttp)
alert("Ошибка создания объекта XMLHttpRequest.");
еще
вернуть xmlHttp;
}
///////2. Функция ответа на событие JavaScript (триггер onmouseover).
// читаем файл с сервера
функция PHPicoXML()
...{
// продолжаем только в том случае, если xmlHttp не является недействительным
если (xmlHttp)
...{
// пытаемся подключиться к серверу
пытаться
...{
//инициируем чтение файла с сервера
//Отправляем асинхронный запрос в файл PHPechoXML.php на стороне сервера
xmlHttp.open("GET", "PHPechoXML.php", true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send (нуль);
}
// отображаем ошибку в случае неудачи
поймать (е)
...{
alert("Невозможно подключиться к серверу: " + e.toString());
}
}
}
///////3. Функция ответа на событие JavaScript (триггер onmouseout).
функцияPHPDOMXML()
...{
// продолжаем только в том случае, если xmlHttp не является недействительным
если (xmlHttp)
...{
// пытаемся подключиться к серверу
пытаться
...{
//инициируем чтение файла с сервера
//Отправляем асинхронный запрос в файл PHPDOMXML.php на стороне сервера
xmlHttp.open("GET", "PHPDOMXML.php", true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send (нуль);
}
// отображаем ошибку в случае неудачи
поймать (е)
...{
alert("Невозможно подключиться к серверу: " + e.toString());
}
}
}
// обрабатывает ответ, полученный от сервера, функция обратного вызова состояния на стороне сервера
функция handleRequestStateChange()
... {
если (xmlHttp.readyState == 4)
...{
// продолжить, только если статус HTTP «ОК»
если (xmlHttp.status == 200)
...{
пытаться
...{
// читаем сообщение с сервера
var xmlResponse = xmlHttp.responseXML
//Обнаружение потенциальных ошибок в IE и Opera;
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Неверная структура XML: "+xmlHttp.responseText);
}
//Фиксируем потенциальные ошибки в FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="ошибка синтаксического анализа")
...{
throw("Неверная структура XML: "+xmlHttp.responseText);
}
//Получаем XML-ответ от сервера, анализируем его и отображаем на веб-странице
//получим элемент XML-документа
xmlRoot = xmlResponse.documentElement;
// получаем массивы с названиями книг и ISBN
cityArray=xmlRoot.getElementsByTagName("город");
//генерируем HTML-вывод
вар HTML = "";
// перебираем массивы и создаем структуру HTML
for (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// получаем ссылку на элемент <div> на странице
myDiv = document.getElementById("показать");
// отображаем вывод HTML
myDiv.innerHTML = "Сервер говорит: <br />" + html;
}
поймать(е)
...{
//выводим сообщение об ошибке
alert("Ошибка чтения ответа: " + e.toString());
}
}
еще
...{
//отображение сообщения о состоянии
alert("При получении данных возникла проблема: " +
xmlHttp.statusText);
}
}
}
///////4. Функция ответа на событие JavaScript (триггер onclick)
функция CSпараметр()
...{
// продолжаем только в том случае, если 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 (нуль);
}
// отображаем ошибку в случае неудачи
поймать (е)
...{
alert("Невозможно подключиться к серверу: " + e.toString());
}
}
}
//Функция обратного вызова изменения статуса сервера (сервер принимает параметры от клиента и возвращает ответ XML после логического расчета. Клиент анализирует XML и возвращает обновления на страницу)
// обрабатывает ответ, полученный от сервера
функция handleRequestStateChangePara()
... {
если (xmlHttp.readyState == 4)
...{
// продолжить, только если статус HTTP «ОК»
если (xmlHttp.status == 200)
...{
пытаться
...{
// читаем сообщение с сервера
вар xmlResponse = xmlHttp.responseXML;
//Обнаружение потенциальных ошибок в IE и Opera
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Неверная структура XML: "+xmlHttp.responseText);
}
//Фиксируем потенциальные ошибки в FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="ошибка синтаксического анализа")
...{
throw("Неверная структура XML: "+xmlHttp.responseText);
}
// получаем элемент XML-документа
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("результат");
//генерируем HTML-вывод
вар HTML = "";
// перебираем массивы и создаем структуру HTML
for (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
// получаем ссылку на элемент <div> на странице
myDiv = document.getElementById("результат");
// отображаем вывод HTML
myDiv.innerHTML = "Сервер говорит: <br />" + html;
}
поймать(е)
...{
//выводим сообщение об ошибке
alert("Ошибка чтения ответа: " + e.toString());
}
}
еще
...{
//отображение сообщения о состоянии
alert("При получении данных возникла проблема: " +
xmlHttp.statusText);
}
}
}
Серверный PHP-скрипт (отвечает за прием асинхронных запросов от Клиента, ответ на них и возврат их Клиенту в формате XML)
PHEchoXML.php (первый метод PHP для генерации ответа XML, echo выводит содержимое XML)
<?php
//Первый метод создания XML-файлов серверным PHP — это прямое эхо XML.
заголовок('Тип контента: текст/xml');
//генерируем XML-заголовок
echo '<?xml version="1.0"coding="UTF-8" standalone="yes"?>'
echo '<cities>';
$cityArray=array('Париж','Лондон','Нью-Йорк','Пекин','Токой');
foreach ($cityArray как $city)
{
echo '<city>'.$city.'</city>';
}
echo '</cities>';
?>
PHPDOMXML.php (второй метод PHP для генерации ответа XML с использованием API DOM PHP для вывода ответа в формате XML)
<?php
заголовок('Тип контента: текст/xml');
$cityArray=array('Шанхай','Пекин','Шаньси','Шаньдун');
//Создаем XML-документ
$dom=новый DOMDocument();
//самый внешний тег
$citiesTag=$dom->createElement('cities');
$dom->appendChild($citiesTag);
//Тег внутри может быть сгенерирован посредством цикла
foreach ($cityArray как $city)
{
$cityTag=$dom->createElement('город');
$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=новый DOMDocument();
$resultsTag=$dom->createElement('результаты');
$dom->appendChild($resultsTag);
$resultTag=$dom->createElement('результат');
$resultText=$dom->createTextNode($result);
$resultTag->appendChild($resultText);
$resultsTag->appendChild($resultTag)
$xmlString=$dom->saveXML();
эхо $xmlString
?>
3. Обработка исключений ошибок на стороне PHP (упомянутые здесь ошибки или исключения относятся к логическим ошибкам):
а) По умолчанию PHP не генерирует исключение при возникновении ошибки или исключения (это связано с тем, что по умолчанию display_errors в php.ini отключен, и ошибка будет сохранена в записи журнала ошибок Apache), поэтому это написано Трудно отладить. <Часто бывает трудно обнаружить ошибки, отображаемые браузером>
б) Но если для параметра display_errors установлено значение on, ошибка будет отображаться, но сообщение об ошибке будет недружелюбным.
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)
{
//Если выходной буфер не пуст, очищаем его
если (ob_get_length()) ob_clean();
//Определяем пользовательский вывод
$error_message='ERRNO: '.$errNo.chr(10).'ТЕКСТ: '.$errStr.chr(10).'LOCATION: '.$errFile.', Line'.$errLine;
эхо $error_message;
Выход;
}
?>
4. Доступ к базе данных на стороне сервера <Используйте MySQL для доступа к данным для достижения истинной динамики>
Это уже очень классика, можно использовать MySQL, MSSQL, Oracle и т.д.
а) Откройте базу данных; б) SQL-запрос; в) Закройте базу данных
. 5. Инкапсуляция и архитектура PHP-программы на стороне сервера (программа PHP на стороне сервера вводит режим разработки).
а) appname.php <Принять запрос клиента>
b) appname.class.php <Инкапсулировать серверную логику, операции с базой данных, обработку ошибок и т. д. в классы, включая атрибуты, методы, конструкторы и деструкторы>
в) конфиг.php
d) error_handler.php
— это пример внедрения шаблонов проектирования на стороне сервера: (Разработка программной архитектуры серверных PHP-скриптов для улучшения масштабируемости и возможности повторного использования)
Очень простая программа предложения ключевых слов: (включая index.html, css/style.css, js.js и PHP-код php/suggest.php, submit.class.php, error_handler.php, config.php поддерживает базу данных)
index.html(css/style.css, js.js; обратите внимание, что два события JS-клиента запускают onkeyup, onclick)
onkeyup отправляет запрос на сервер асинхронно в режиме реального времени, когда пользователь вводит данные, а сервер отвечает; onclick отправляет запрос на сервер, когда пользователь нажимает кнопку поиска;
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<html>
<голова>
<title> Шаблон проектирования PHP AJAX (ключевые слова предполагают ДЕМО) </title>
<link type="text/css" rel="stylesheet" href="css/style.css"/>
<script type="text/javascript" src="js.js"></script>
</голова>
<тело>
<носкрипт>
<strong>Для этого примера требуется браузер с поддержкой JavaScript!</strong>
</носкрипт>
<div class="проект">
<span class="title">Добро пожаловать в шаблон проектирования PHP AJAX (ключевые слова предполагают ДЕМО) </span>
<br />
<br />
<div class="новости">
<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;
}
.заголовок
{...}{
размер шрифта: x-большой;
}
div.проект
{...}{
цвет фона: #99ccff;
отступ: 5 пикселей;
граница:#000099 1 пиксель, сплошная;
}
div.news
{...}{
цвет фона: #fffbb8;
отступ: 2 пикселя;
граница: пунктирная 1 пиксель;
}
#показывать
{...}{
цвет: #008000;
стиль шрифта: курсив;
}js.js (определить функцию ответа в JS и функцию обратного вызова для клиента для обработки ответа сервера)
/////////////////////////////////////////////////// /// /////////
//1. Создаем объект XMLHttpRequest.
/////////////////////////////////////////////////// /// /////////
вар xmlHttp = createXmlHttpRequestObject();
функция createXmlHttpRequestObject()
...{
вар xmlHttp;
пытаться
...{
// пытаемся создать объект XMLHttpRequest
xmlHttp = новый XMLHttpRequest();
}
поймать(е)
...{
// предполагаем IE6 или старше
var XmlHttpVersions = новый массив('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
«Microsoft.XMLHTTP»);
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
пытаться
...{
// пытаемся создать объект XMLHttpRequest
xmlHttp = новый ActiveXObject(XmlHttpVersions[i]);
}
поймать (е) ...{}
}
}
если (!xmlHttp)
alert("Ошибка создания объекта XMLHttpRequest.");
еще
вернуть xmlHttp;
}
//Отображаем правильный ответ сервера на div с идентификатором show
отображение функции (сообщение)
...{
showDIV=document.getElementById("показать");
showDIV.innerHTML=сообщение;
}
//Отображение сообщения об ошибке ответа сервера на элемент div с идентификатором show
функция displayError(сообщение об ошибке)
...{
//Показать сообщение об ошибке
display("Ошибка получения нового сообщения!<br/>"+errormessage);
}
///////////////////////////////////////////////// /// //////////
//2. Функция, управляемая событиями (функция нажатия клавиши)
/////////////////////////////////////////////////// /// /////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
функциональная клавиша()
...{
если (xmlHttp)
...{
//Отправляем асинхронный запрос, когда сервер не занят
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
пытаться
...{
var ключевое слово = document.getElementById («ключевое слово»). значение;
//Сделаем асинхронный запрос
xmlHttp.open("GET",keyupAddress+ключевое слово,true);
xmlHttp.onreadystatechange = handlereadystatechange;
xmlHttp.send (нуль);
}
поймать(е)
...{
displayError(e.toString);
}
}
}
}
/////////////////////////////////////////////////// /// /////////
//3. Функция обратного вызова, эта функция срабатывает при изменении статуса ответа сервера.
/////////////////////////////////////////////////// /// /////////
функция handlereadystatechange()
...{
если (xmlHttp.readyState == 4)
...{
если (xmlHttp.status == 200)
...{
пытаться
...{
//Получаем ответ сервера
вар xmlResponse = xmlHttp.responseXML;
submitArray=xmlResponse.getElementsByTagName("предложить");
вар showText="";
for(var i=0;i<suggestArray.length;i++)
...{
var textNodes=suggestArray[i].getElementsByTagName("текст");
var timesNodes=suggestArray[i].getElementsByTagName("раз");
for(var j=0;j<textNodes.length;j++)
...{
showText+=textNodes[j].childNodes[0].nodeValue+" ("+timesNodes[j].childNodes[0].nodeValue+") <br />";
}
}
//Выводим ответ на страницу
дисплей (шоутекст);
}
поймать(е)
...{
displayError(e.toString());
}
}
}
}
/////////////////////////////////////////////////// /// /////////
//2. Событийная функция (функция поиска)
/////////////////////////////////////////////////// /// /////////
var searchAddress="php/suggest.php?action=search&keyword=";
функция поиска()
...{
если (xmlHttp)
...{
//Отправляем асинхронный запрос, когда сервер не занят
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
пытаться
...{
var ключевое слово = document.getElementById («ключевое слово»). значение;
//Сделаем асинхронный запрос
xmlHttp.open("GET",searchAddress+ключевое слово,true);
xmlHttp.onreadystatechange = handlereadystatechange;
xmlHttp.send (нуль);
}
поймать(е)
...{
displayError(e.toString);
}
}
}
}
Заключительное замечание: программная структура серверного PHP-скрипта (suggest.php — основная функция обработки на стороне сервера, также существуют submit.class.php, error_handler.php, config.php и т. д.)
submit.php (получите параметры клиента и вызовите два метода класса submit, чтобы сгенерировать ответ в формате XML и отправить его обратно клиенту)
<?php
require_once('suggest.class.php');
заголовок('Тип контента: текст/xml');
//Убедитесь, что браузер пользователя не кэширует результаты
header('Срок действия истекает: среда, 23 декабря 1980 г., 00:30:00 GMT');
header('Last-Modified: '.gmdate('D, d MYH:i:s').' GMT' );
header('Cache-Control: нет кэша, необходимо выполнить повторную проверку');
заголовок('Прагма: нет кэша');
$action=$_GET['action'];
$keyword=$_GET['ключевое слово'];
$oSuggest=новое предложение();
if($action=='keyup'&&$keyword!='')
{
$suggestXML=$oSuggest->getSuggests($keyword);
}
if($action=='search'&&$keyword!='')
{
$suggestXML=$oSuggest->submitKeyword($keyword);
}
эхо $suggestXML;
?>suggest.class.php класс
<?php
require_once('error_handler.php');
require_once('config.php');
класс предлагает
{
//Переменные-члены
частный $conn;
//Конструктор, ссылка на базу данных
function__construct()
{
$this->conn=new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
если (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s ", mysqli_connect_error());
Выход();
}
}
//Деструктор, отключаем ссылку на базу данных
функция __destruct()
{
$this->conn->закрыть();
}
//функция-член getSuggests (эта функция в основном отвечает на клиентский action=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"coding="UTF-8" Standalone="yes"?>';
если ($suggest_num==0)
{
//$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>0</times></suggest></suggests>';
}
еще
{
$strOUT=$strOUT."<предлагает>";
for($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 (эта функция в основном отвечает на клиентский action=search, то есть асинхронный запрос, когда пользователь нажимает кнопку поиска)
публичная функция submitKeyword($keyword)
{
$select_query='выберите * из ключевых слов, где ключевое слово=''.$keyword.''';
$select_result=$this->conn->query($select_query);
$select_num=$select_result->num_rows;
//Добавляем новые ключевые слова в базу данных при их обнаружении и увеличиваем количество существующих ключевых слов при их обнаружении.
$strOUT='<?xml version="1.0"coding="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
define('DB_HOST', 'localhost');
define('DB_USER','phpajaxuser');
define('DB_PASSWORD','phpajaxuser');
define('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).'ТЕКСТ: '.$errStr.chr(10).'LOCATION: '.$errFile.' '.$errLine;
эхо $error_message;
Выход;
}
?>Наконец, операторы sql необходимы для добавления базы данных для сохранения ключевых слов в базе данных.
СОЗДАТЬ ТАБЛИЦУ `ключевые слова` (
`id` int(10) unsigned NOT NULL auto_increment,
`ключевое слово` varchar(32) NOT NULL по умолчанию '',
`times` int(10) без знака NOT NULL по умолчанию '0',
ПЕРВИЧНЫЙ КЛЮЧ (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1
6. Небольшие знания PHP для будущих исследований:
Как PHP считывает данные с удаленного сервера (что-то похожее на веб-сканирование):
file_get_contents;
Или CURL<Библиотека URL-адресов клиента>www.php.net/curl