在做數(shù)據(jù)接口時(shí) 我們通常要獲取第三方數(shù)據(jù)接口或者給第三方提供數(shù)據(jù)接口 而這些數(shù)據(jù)格式通常是以XML或者JSON格式傳輸 本文將介紹如何使用PHP生成XML格式數(shù)據(jù)供第三方調(diào)用以及如何獲取第三方提供的XML數(shù)據(jù)
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供安義網(wǎng)站建設(shè)、安義做網(wǎng)站、安義網(wǎng)站設(shè)計(jì)、安義網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、安義企業(yè)網(wǎng)站模板建站服務(wù),十載安義做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
生成XML格式數(shù)據(jù)
我們假設(shè)系統(tǒng)中有一張學(xué)生信息表student 需要提供給第三方調(diào)用 并有id name sex age分別記錄學(xué)生的姓名 性別 年齡等信息
CREATE TABLE `student` (
`id` int( ) NOT NULL auto_increment
`name` varchar( ) NOT NULL
`sex` varchar( ) NOT NULL
`age` *** allint( ) NOT NULL default
PRIMARY KEY? (`id`)
) ENGINE=MyISAM? DEFAULT CHARSET=utf ;
首先 建立createXML php文件 先連接數(shù)據(jù)庫(kù) 獲取數(shù)據(jù)
include_once ( connect php ) //連接數(shù)據(jù)庫(kù)
$sql = select * from student ;
$result = mysql_query($sql) or die( Invalid query: mysql_error())
while ($row = mysql_fetch_array($result)) {
$arr[] = array(
name = $row[ name ]
sex = $row[ sex ]
age = $row[ age ]
)
}
這個(gè)時(shí)候 數(shù)據(jù)就保存在$arr中 你可以使用print_r打印下數(shù)據(jù)測(cè)試
接著 建立xml 循環(huán)數(shù)組 將數(shù)據(jù)寫入到xml對(duì)應(yīng)的節(jié)點(diǎn)中
$doc = new DOMDocument( utf ) ? // 聲明版本和編碼
$doc formatOutput = true;
$r = $doc createElement( root )
$doc appendChild($r)
foreach ($arr as $dat) {
$b = $doc createElement( data )
$name = $doc createElement( name )
$name appendChild($doc createTextNode($dat[ name ]))
$b appendChild($name)
$sex = $doc createElement( sex )
$sex appendChild($doc createTextNode($dat[ sex ]))
$b appendChild($sex)
$age = $doc createElement( age )
$age appendChild($doc createTextNode($dat[ age ]))
$b appendChild($age)
$r appendChild($b)
}
echo $doc saveXML()
我們調(diào)用了PHP內(nèi)置的類DOMDocument來(lái)處理與生成xml 最終生成的xml格式請(qǐng)點(diǎn)擊這里看效果
?xml version= encoding= utf ?
root
data
name李王皓/name
sex男/sex
age /age
/data
…
/root
獲取XML格式數(shù)據(jù)
現(xiàn)在我們假設(shè)要從第三方獲取學(xué)生信息 數(shù)據(jù)格式是XML 我們需要使用PHP解析XML 然后將解析后的數(shù)據(jù)顯示或者寫入本地?cái)?shù)據(jù)庫(kù) 而這里關(guān)鍵的一步是解析XML
PHP有很多中方法可以解析XML 其中PHP提供了內(nèi)置的XMLReader類可以循序地瀏覽過(guò)xml檔案的節(jié)點(diǎn) 你可以想像成游標(biāo)走過(guò)整份文件的節(jié)點(diǎn) 并抓取需要的內(nèi)容 使用XMLReader是高效的 尤其是讀取非常大的xml數(shù)據(jù) 相對(duì)其他方法 使用XMLReader消耗內(nèi)存非常少
header( Content type:text/; Charset=utf )
$url = // helloweba /demo/importXML/createXML php ;
$reader = new XMLReader() ? //實(shí)例化XMLReader
$reader open($url) //獲取xml
$i= ;
while ($reader read()) {
if ($reader nodeType == XMLReader::TEXT) { //判斷node類型
$m = $i% ;
if($m== )
$name = $reader value;? //讀取node值
if($m== )
$sex = $reader value;
if($m== ){
$age = $reader value;
$arr[] = array(
name = $name
sex = $sex
age = $age
)
}
$i++;
}
}
//print_r($arr)
lishixinzhi/Article/program/PHP/201311/21636
PHP 文件打開/讀取/讀取
PHP 文件
PHP 文件創(chuàng)建/寫入
在本節(jié)中,我們向您講解如何在服務(wù)器上打開、讀取以及關(guān)閉文件。
PHP Open File - fopen()
打開文件的更好的方法是通過(guò) fopen() 函數(shù)。此函數(shù)為您提供比 readfile() 函數(shù)更多的選項(xiàng)。
在課程中,我們將使用文本文件 "webdictionary.txt":
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
fopen() 的第一個(gè)參數(shù)包含被打開的文件名,第二個(gè)參數(shù)規(guī)定打開文件的模式。如果 fopen() 函數(shù)未能打開指定的文件,下面的例子會(huì)生成一段消息:
實(shí)例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");echo fread($myfile,filesize("webdictionary.txt"));fclose($myfile);
?
運(yùn)行實(shí)例
提示:我們接下來(lái)將學(xué)習(xí) fread() 以及 fclose() 函數(shù)。
文件會(huì)以如下模式之一打開:
模式描述
r打開文件為只讀。文件指針在文件的開頭開始。
w打開文件為只寫。刪除文件的內(nèi)容或創(chuàng)建一個(gè)新的文件,如果它不存在。文件指針在文件的開頭開始。
a打開文件為只寫。文件中的現(xiàn)有數(shù)據(jù)會(huì)被保留。文件指針在文件結(jié)尾開始。創(chuàng)建新的文件,如果文件不存在。
x創(chuàng)建新文件為只寫。返回 FALSE 和錯(cuò)誤,如果文件已存在。
r+打開文件為讀/寫、文件指針在文件開頭開始。
w+打開文件為讀/寫。刪除文件內(nèi)容或創(chuàng)建新文件,如果它不存在。文件指針在文件開頭開始。
a+打開文件為讀/寫。文件中已有的數(shù)據(jù)會(huì)被保留。文件指針在文件結(jié)尾開始。創(chuàng)建新文件,如果它不存在。
x+創(chuàng)建新文件為讀/寫。返回 FALSE 和錯(cuò)誤,如果文件已存在。
PHP 讀取文件 - fread()
fread() 函數(shù)讀取打開的文件。
fread() 的第一個(gè)參數(shù)包含待讀取文件的文件名,第二個(gè)參數(shù)規(guī)定待讀取的最大字節(jié)數(shù)。
如下 PHP 代碼把 "webdictionary.txt" 文件讀至結(jié)尾:
fread($myfile,filesize("webdictionary.txt"));PHP 關(guān)閉文件 - fclose()
fclose() 函數(shù)用于關(guān)閉打開的文件。
注釋:用完文件后把它們?nèi)筷P(guān)閉是一個(gè)良好的編程習(xí)慣。您并不想打開的文件占用您的服務(wù)器資源。
fclose() 需要待關(guān)閉文件的名稱(或者存有文件名的變量):
?php
$myfile = fopen("webdictionary.txt", "r");// some code to be executed....
fclose($myfile);
?
PHP 讀取單行文件 - fgets()
fgets() 函數(shù)用于從文件讀取單行。
下例輸出 "webdictionary.txt" 文件的首行:
實(shí)例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");echo fgets($myfile);
fclose($myfile);
?
運(yùn)行實(shí)例
注釋:調(diào)用 fgets() 函數(shù)之后,文件指針會(huì)移動(dòng)到下一行。
PHP 檢查 End-Of-File - feof()
feof() 函數(shù)檢查是否已到達(dá) "end-of-file" (EOF)。
feof() 對(duì)于遍歷未知長(zhǎng)度的數(shù)據(jù)很有用。
下例逐行讀取 "webdictionary.txt" 文件,直到 end-of-file:
實(shí)例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單行直到 end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "br";
}
fclose($myfile);
?
運(yùn)行實(shí)例
PHP 讀取單字符 - fgetc()
fgetc() 函數(shù)用于從文件中讀取單個(gè)字符。
下例逐字符讀取 "webdictionary.txt" 文件,直到 end-of-file:
實(shí)例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單字符直到 end-of-file
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?
運(yùn)行實(shí)例
注釋:在調(diào)用 fgetc() 函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。
PHP Filesystem 參考手冊(cè)
如需完整的 PHP 文件系統(tǒng)參考手冊(cè),請(qǐng)?jiān)L問(wèn) W3School 提供的 PHP Filesystem 參考手冊(cè)。
使用JSON模式統(tǒng)一數(shù)據(jù)格式:使用JSON模式統(tǒng)一數(shù)據(jù)格式,可以解決數(shù)據(jù)格式不一致的問(wèn)題,使得數(shù)據(jù)在不同語(yǔ)言之間可以交換
思路:
讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫(kù)
示例
文件夾結(jié)構(gòu)
/
file.csv????//csv大文件,這里只模擬三行數(shù)據(jù),不考慮運(yùn)行效率(PS:csv文件格式很簡(jiǎn)單,文件一般較小,解析很快,運(yùn)行效率的瓶頸主要在寫入數(shù)據(jù)庫(kù)操作)
index.php????//php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
*?讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫(kù)
*/
//獲取數(shù)據(jù)庫(kù)實(shí)例
$dsn?=?'mysql:dbname=test;host=127.0.0.1';
$user?=?'root';
$password?=?'';
try?{
$db?=?new?PDO($dsn,?$user,?$password);
}?catch?(PDOException?$e)?{
echo?'Connection?failed:?'?.?$e-getMessage();
}
//讀取file.csv文件
if?(($handle?=?fopen("file.csv",?"r"))?!==?FALSE)?{
while?(($row?=?fgetcsv($handle,?1000,?","))?!==?FALSE)?{
//寫入數(shù)據(jù)庫(kù)
$sth?=?$db-prepare('insert?into?test?set?name=:name,age=:age');
$sth-bindParam(':name',$row[0],PDO::PARAM_STR,255);
$sth-bindParam(':age',$row[1],PDO::PARAM_INT);
$sth-execute();
}
fclose($handle);
}
數(shù)據(jù)表
CREATE?TABLE?`test`?(
`id`?INT(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
`name`?VARCHAR(255)?NULL?DEFAULT?''?COLLATE?'utf8mb4_bin',
`age`?INT(10)?NULL?DEFAULT?'0',
PRIMARY?KEY?(`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
運(yùn)行結(jié)束后,數(shù)據(jù)庫(kù)中會(huì)插入csv中的三行數(shù)據(jù)
網(wǎng)頁(yè)名稱:php數(shù)據(jù)的讀取數(shù)據(jù)格式 php數(shù)據(jù)的讀取數(shù)據(jù)格式不對(duì)
本文鏈接:http://chinadenli.net/article4/dogdioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、軟件開發(fā)、品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站內(nèi)鏈、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容