서버 측의 작업은 일반적으로 클라이언트의 요청에 따라 논리적 작업을 수행하고 결과 응답을 반환하는 것입니다. 이 응답은 일반적으로 XML 형식입니다(따라서 서버 측은 XML 응답을 생성하기 위해 PHP의 DOM을 사용해야 합니다).
1. PHP는 DOM을 사용하여 클라이언트의 JS에 의해 구문 분석된 후 페이지에 표시되는 XML 응답을 생성합니다. PHP의 DOM API에 능숙해야 합니다.)
실제로 PHP에서 XML을 생성하는 방법에는 두 가지가 있습니다.
DOM API 사용(방법 1)
다른 하나는 XML 콘텐츠를 직접 에코하는 것입니다(방법 2).
예를 참조하세요:
HTML 페이지(3가지 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="표시"></div>
<input type="text" id="firstNumber"/>로 나누기
<input type="text" id="secondNumber"/>
<input type="button" value="보내기" onclick="CSparameter()"/>
<div id="결과"></div>
</body>
</html>
JS 페이지(각각 세 가지 JS 트리거 함수 정의: PHPechoXML, PHPDOMXML 및 CSparameter)
XMLHttpRequest 객체 생성 기능과 각각의 서버 응답 처리 기능이 있습니다.
///////1. XMLHttpRequest 객체를 생성합니다.
var xmlHttp = createXmlHttpRequestObject()
함수 createXmlHttpRequestObject()
;
...{
var
xmlHttp;
...{
// XMLHttpRequest 객체를 생성하려고 시도합니다.
xmlHttp = 새로운 XMLHttpRequest();
}
잡기(e)
...{
// IE6 이하라고 가정
var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'마이크로소프트.XMLHTTP');
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
노력하다
...{
// XMLHttpRequest 객체를 생성하려고 시도합니다.
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
잡기 (e) ...{}
}
}
if (!xmlHttp)
Alert("XMLHttpRequest 객체 생성 중 오류가 발생했습니다.");
또 다른
xmlHttp를 반환합니다.
}
///////2. JavaScript 이벤트 응답 기능(onmouseover 트리거)
// 서버에서 파일을 읽습니다.
함수 PHPichoXML()
...{
// xmlHttp가 void가 아닌 경우에만 계속합니다.
if(xmlHttp)
...{
// 서버에 연결을 시도한다
노력하다
...{
//서버에서 파일 읽기를 시작합니다.
//서버측 PHPechoXML.php 파일에 비동기 요청 보내기
xmlHttp.open("GET", "PHPEchoXML.php", true);
xmlHttp.onreadystatechange = handlerRequestStateChange;
xmlHttp.send(null);
}
//실패시 오류 표시
잡기 (e)
...{
Alert("서버에 연결할 수 없습니다: " + e.toString());
}
}
}
///////3. JavaScript 이벤트 응답 함수(onmouseout 트리거)
함수PHPDOMXML()
...{
// xmlHttp가 void가 아닌 경우에만 계속합니다.
if(xmlHttp)
...{
// 서버에 연결을 시도한다
노력하다
...{
//서버에서 파일 읽기를 시작합니다.
//서버측 PHPDOMXML.php 파일에 비동기 요청 보내기
xmlHttp.open("GET", "PHPDOMXML.php", true);
xmlHttp.onreadystatechange = handlerRequestStateChange;
xmlHttp.send(null);
}
//실패시 오류 표시
잡기 (e)
...{
Alert("서버에 연결할 수 없습니다: " + e.toString());
}
}
}
// 서버로부터 받은 응답을 처리하는 서버측 상태 콜백 함수
함수 핸들요청상태변경()
...{
if (xmlHttp.readyState == 4)
...{
// HTTP 상태가 "OK"인 경우에만 계속합니다.
if (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 출력 생성
var html = "";
// 배열을 반복하고 HTML 구조를 만듭니다.
for (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)
...{
//오류 메시지 표시
Alert("응답을 읽는 동안 오류가 발생했습니다: " + e.toString());
}
}
또 다른
...{
//상태 메시지 표시
Alert("데이터를 검색하는 중에 문제가 발생했습니다: " +
xmlHttp.statusText);
}
}
}
///////4. JavaScript 이벤트 응답 기능(onclick 트리거)
함수 CS매개변수()
...{
// xmlHttp가 void가 아닌 경우에만 계속합니다.
if(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 = handlerRequestStateChangePara;
xmlHttp.send(null);
}
//실패시 오류 표시
잡기 (e)
...{
Alert("서버에 연결할 수 없습니다: " + e.toString());
}
}
}
//서버 상태 변경 콜백 함수(서버는 클라이언트로부터 매개변수를 받아들이고 논리 계산 후 XML 응답을 반환합니다. 클라이언트는 XML을 구문 분석하고 업데이트를 페이지에 반환합니다.)
// 서버로부터 받은 응답을 처리합니다.
함수 handlerRequestStateChangePara()
...{
if (xmlHttp.readyState == 4)
...{
// HTTP 상태가 "OK"인 경우에만 계속합니다.
if (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의 문서 요소를 얻습니다.
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("result");
//HTML 출력 생성
var html = "";
// 배열을 반복하고 HTML 구조를 만듭니다.
for (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)
...{
//오류 메시지 표시
Alert("응답을 읽는 동안 오류가 발생했습니다: " + e.toString());
}
}
또 다른
...{
//상태 메시지 표시
Alert("데이터를 검색하는 중에 문제가 발생했습니다: " +
xmlHttp.statusText);
}
}
}
서버 측 PHP 스크립트(클라이언트의 비동기 요청을 수락하고, 이에 응답하고, XML 형식으로 클라이언트에 반환하는 역할을 담당함)
PHEchoXML.php(PHP가 XML 응답을 생성하는 첫 번째 방법, 에코는 XML 콘텐츠를 출력함)
<?php
//서버측 PHP가 XML 파일을 생성하는 첫 번째 방법은 XML을 직접 에코하는 것입니다.
header('콘텐츠 유형: 텍스트/xml');
//XML 헤더 생성
echo '<?xml version="1.0" 인코딩="UTF-8" 독립형="yes"?>'
echo '<도시>';
$cityArray=array('파리','런던','뉴욕','베이징','토코이');
foreach($cityArray를 $city로)
{
echo '<city>'.$city.'</city>';
}
echo '</cities>'
?>
PHPDOMXML.php (PHP가 XML 응답을 생성하는 두 번째 방법, PHP의 DOM API를 사용하여 XML 형식으로 응답 출력)
<?php
header('콘텐츠 유형: 텍스트/xml');
$cityArray=array('상하이','베이징','산시','산둥');
//XML 문서 생성
$dom=새 DOMDocument();
//가장 바깥쪽 태그
$citiesTag=$dom->createElement('도시');
$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('result');
$resultText=$dom->createTextNode($result);
$resultTag->appendChild($resultText);
$resultsTag->appendChild($resultTag);
$xmlString=$dom->saveXML();
에코 $xmlString
?>
3. PHP 측 오류 예외 처리(여기에 언급된 오류 또는 예외는 논리적 오류를 나타냄):
a) 기본적으로 PHP는 오류나 예외가 발생할 때 예외를 발생시키지 않습니다(이는 php.ini의 기본 display_errors가 off로 설정되어 있고 오류가 Apache 오류 로그 기록에 저장되기 때문입니다). 디버그하기 어렵다고 작성되었습니다. <브라우저에 표시되는 오류를 찾기 어려운 경우가 많습니다.>
b) 그런데 display_errors를 on으로 설정하면 오류가 표시되지만 오류 메시지가 불친절해집니다.
http://www.downcodes.com/
c) 쉬운 디버깅을 위해 명확한 방법으로 오류를 표시하기 위해 자신만의 PHP 오류 예외 처리 함수(display_errors를 반드시 on으로 설정할 필요는 없음)를 작성할 수 있습니다.
일반적으로 다음과 같이 고유한 예외 처리 함수를 작성합니다.
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).'텍스트: '.$errStr.chr(10).'위치: '.$errFile.', Line'.$errLine;
에코 $error_message;
출구;
}
?>
4. 데이터베이스에 대한 서버 측 액세스 <진정한 역동성을 달성하기 위해 MySQL을 사용하여 데이터에 액세스>
이것은 이미 매우 고전적이므로 MySQL, MSSQL, Oracle 등을 사용할 수 있습니다.
a) 데이터베이스 열기 b) SQL 문 쿼리 c) 데이터베이스 닫기
5. 서버 측 PHP 프로그램 캡슐화 및 아키텍처(서버 측 PHP 프로그램에 디자인 모드 도입)
a) appname.php <클라이언트 요청 수락>
b) appname.class.php <서버측 로직, 데이터베이스 작업, 오류 처리 등을 속성, 메소드, 생성자 및 소멸자를 포함하는 클래스로 캡슐화합니다.>
다) config.php
d) error_handler.php
는 서버 측에 디자인 패턴을 도입한 예입니다. (확장성과 재사용성을 높이기 위해 서버 측 PHP 스크립트의 프로그램 아키텍처를 설계합니다.)
매우 간단한 키워드 제안 프로그램: (index.html, css/style.css, js.js 및 PHP 코드 php/suggest.php, presents.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(키워드는 DEMO 제안) </title>
<link type="text/css" rel="stylesheet" href="css/style.css"/>
<script type="text/javascript" src="js.js"></script>
</head>
<본문>
<스크립트>
<strong>이 예에는 JavaScript 지원 브라우저가 필요합니다!</strong>
</noscript>
<div 클래스="프로젝트">
<span class="title">디자인 패턴 PHP AJAX에 오신 것을 환영합니다(키워드로 DEMO 제안) </span>
<br />
<br />
<div 클래스="뉴스">
<br /><input type="text" id="keyword" onkeyup="keyup()" /><input type="button" id="search" onclick="search()" value="search"> <br /><br />
키워드 제안:
<div id="표시"></div>
</div>
</div>
</body>
</html>
CSS/style.css
몸
{...}{
글꼴 모음: Arial;
글꼴 크기: 작음;
배경색: #fff;
}
.제목
{...}{
글꼴 크기:x-대형;
}
div.프로젝트
{...}{
배경색: #99ccff;
패딩:5px;
테두리:#000099 1px 실선;
}
div.news
{...}{
배경색:#fffbb8;
패딩:2px;
테두리: 1px 점선;
}
#보여주다
{...}{
색상: #008000;
글꼴 스타일: 기울임체;
}js.js (JS에서 응답 함수 정의 및 클라이언트가 서버 응답을 처리하기 위한 콜백 함수 정의)
///////////////////////////////////////////////// /// /////////
//1. XMLHttpRequest 객체를 생성합니다.
///////////////////////////////////////////////// /// /////////
var xmlHttp = createXmlHttpRequestObject();
함수 createXmlHttpRequestObject()
...{
var xmlHttp;
노력하다
...{
// XMLHttpRequest 객체를 생성하려고 시도합니다.
xmlHttp = 새로운 XMLHttpRequest();
}
잡기(e)
...{
// IE6 이하라고 가정
var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'마이크로소프트.XMLHTTP');
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
노력하다
...{
// XMLHttpRequest 객체를 생성하려고 시도합니다.
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
잡기 (e) ...{}
}
}
if (!xmlHttp)
Alert("XMLHttpRequest 객체 생성 중 오류가 발생했습니다.");
또 다른
xmlHttp를 반환합니다.
}
//show라는 ID를 가진 div에 대한 서버의 올바른 응답을 표시합니다.
기능표시(메시지)
...{
showDIV=document.getElementById("표시");
showDIV.innerHTML=메시지;
}
//id가 show인 div에 대한 서버측 응답의 오류 메시지를 표시합니다.
함수 표시오류(오류 메시지)
...{
//오류 메시지 표시
display("새 메시지를 검색하는 중 오류가 발생했습니다!<br/>"+errormessage);
}
//////////////////////////////////////////////// /// //////////
//2. 이벤트 구동 기능(키업 기능)
///////////////////////////////////////////////// /// /////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
함수 키업()
...{
if(xmlHttp)
...{
//서버가 바쁘지 않을 때 비동기 요청을 보냅니다.
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
노력하다
...{
var 키워드=document.getElementById("keyword").value;
//비동기 요청을 한다
xmlHttp.open("GET",keyupAddress+keyword,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
}
잡기(e)
...{
displayError(e.toString);
}
}
}
}
///////////////////////////////////////////////// /// /////////
//3. 콜백 함수, 이 함수는 서버 응답 상태가 변경될 때 트리거됩니다.
///////////////////////////////////////////////// /// /////////
함수 핸들readystatechange()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
노력하다
...{
//서버 응답 받기
var xmlResponse = xmlHttp.responseXML;
presentsArray=xmlResponse.getElementsByTagName("제안");
var 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);
}
잡기(e)
...{
displayError(e.toString());
}
}
}
}
///////////////////////////////////////////////// /// /////////
//2. 이벤트 구동 기능(검색 기능)
///////////////////////////////////////////////// /// /////////
var searchAddress="php/suggest.php?action=search&keyword=";
함수 검색()
...{
if(xmlHttp)
...{
//서버가 바쁘지 않을 때 비동기 요청을 보냅니다.
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
노력하다
...{
var 키워드=document.getElementById("keyword").value;
//비동기 요청을 한다
xmlHttp.open("GET",searchAddress+keyword,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(null);
}
잡기(e)
...{
displayError(e.toString);
}
}
}
}
최종 참고 사항: 서버 측 PHP 스크립트의 프로그램 구조(suggest.php는 서버 측의 주요 처리 기능이며 presents.class.php, error_handler.php, config.php 등도 있습니다.)
presents.php(클라이언트의 매개변수를 가져오고, 제안 클래스의 두 가지 메소드를 호출하여 XML 형식으로 응답을 생성하고 클라이언트에 다시 보냅니다.)
<?php
require_once('suggest.class.php');
header('콘텐츠 유형: 텍스트/xml');
//사용자의 브라우저가 결과를 캐시하지 않는지 확인합니다.
header('만료: 1980년 12월 23일 수요일 00:30:00 GMT');
header('최종 수정: '.gmdate('D, d MYH:i:s').' GMT' );
header('캐시 제어: 캐시 없음, 재검증 필수');
header('Pragma: no-cache');
$action=$_GET['action'];
$keyword=$_GET['keyword'];
$oSuggest=새 제안();
if($action=='keyup'&&$keyword!='')
{
$suggestXML=$oSuggest->getSuggests($keyword);
}
if($action=='검색'&&$keyword!='')
{
$suggestXML=$o제안->submitKeyword($keyword);
}
에코 $suggestXML;
?>suggest.class.php 클래스
<?php
require_once('error_handler.php');
require_once('config.php');
수업 제안
{
//멤버변수
private $conn;
//생성자, 데이터베이스 링크
함수__구조()
{
$this->conn=new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_errno()) {
printf("연결 실패: %s ", mysqli_connect_error());
출구();
}
}
//소멸자, 데이터베이스 링크 연결 끊기
함수 __destruct()
{
$this->conn->close();
}
//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" 인코딩="UTF-8" 독립형="예"?>';
if($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 멤버 함수(이 함수는 주로 클라이언트측 작업=검색, 즉 사용자가 검색을 클릭할 때의 비동기 요청에 응답합니다.)
공개 함수 submitKeyword($keyword)
{
$select_query='keyword=''.$keyword.'''인 키워드에서 *를 선택하세요.'';
$select_result=$this->conn->query($select_query);
$select_num=$select_result->num_rows;
//새 키워드가 나타나면 데이터베이스에 추가하고, 기존 키워드가 나타나면 기존 키워드의 수를 늘립니다.
$strOUT='<?xml version="1.0" 인코딩="UTF-8" 독립형="예"?>';
//이미 존재합니다. 횟수를 늘립니다.
if($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', 'localhost');
정의('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문이 필요합니다.
CREATE TABLE `키워드`(
`id` int(10) unsigned NOT NULL auto_increment,
`keyword` varchar(32) NOT NULL 기본값 '',
`times` int(10) unsigned NOT NULL 기본값 '0',
기본 키(`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;
6. 향후 연구를 위한 PHP에 대한 지식이 거의 없음:
PHP가 원격 서버에서 데이터를 읽는 방법(웹 크롤링과 다소 유사):
file_get_contents;
또는 CURL<클라이언트 URL 라이브러리>www.php.net/curl