在做數(shù)據(jù)接口時 我們通常要獲取第三方數(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è)計、安義網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、安義企業(yè)網(wǎng)站模板建站服務(wù),十載安義做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(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ù)庫 獲取數(shù)據(jù)
include_once ( connect php ) //連接數(shù)據(jù)庫
$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 ]
)
}
這個時候 數(shù)據(jù)就保存在$arr中 你可以使用print_r打印下數(shù)據(jù)測試
接著 建立xml 循環(huán)數(shù)組 將數(shù)據(jù)寫入到xml對應(yīng)的節(jié)點中
$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來處理與生成xml 最終生成的xml格式請點擊這里看效果
?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ù)顯示或者寫入本地數(shù)據(jù)庫 而這里關(guān)鍵的一步是解析XML
PHP有很多中方法可以解析XML 其中PHP提供了內(nèi)置的XMLReader類可以循序地瀏覽過xml檔案的節(jié)點 你可以想像成游標走過整份文件的節(jié)點 并抓取需要的內(nèi)容 使用XMLReader是高效的 尤其是讀取非常大的xml數(shù)據(jù) 相對其他方法 使用XMLReader消耗內(nèi)存非常少
header( Content type:text/; Charset=utf )
$url = // helloweba /demo/importXML/createXML php ;
$reader = new XMLReader() ? //實例化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()
打開文件的更好的方法是通過 fopen() 函數(shù)。此函數(shù)為您提供比 readfile() 函數(shù)更多的選項。
在課程中,我們將使用文本文件 "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() 的第一個參數(shù)包含被打開的文件名,第二個參數(shù)規(guī)定打開文件的模式。如果 fopen() 函數(shù)未能打開指定的文件,下面的例子會生成一段消息:
實例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");echo fread($myfile,filesize("webdictionary.txt"));fclose($myfile);
?
運行實例
提示:我們接下來將學(xué)習(xí) fread() 以及 fclose() 函數(shù)。
文件會以如下模式之一打開:
模式描述
r打開文件為只讀。文件指針在文件的開頭開始。
w打開文件為只寫。刪除文件的內(nèi)容或創(chuàng)建一個新的文件,如果它不存在。文件指針在文件的開頭開始。
a打開文件為只寫。文件中的現(xiàn)有數(shù)據(jù)會被保留。文件指針在文件結(jié)尾開始。創(chuàng)建新的文件,如果文件不存在。
x創(chuàng)建新文件為只寫。返回 FALSE 和錯誤,如果文件已存在。
r+打開文件為讀/寫、文件指針在文件開頭開始。
w+打開文件為讀/寫。刪除文件內(nèi)容或創(chuàng)建新文件,如果它不存在。文件指針在文件開頭開始。
a+打開文件為讀/寫。文件中已有的數(shù)據(jù)會被保留。文件指針在文件結(jié)尾開始。創(chuàng)建新文件,如果它不存在。
x+創(chuàng)建新文件為讀/寫。返回 FALSE 和錯誤,如果文件已存在。
PHP 讀取文件 - fread()
fread() 函數(shù)讀取打開的文件。
fread() 的第一個參數(shù)包含待讀取文件的文件名,第二個參數(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)閉是一個良好的編程習(xí)慣。您并不想打開的文件占用您的服務(wù)器資源。
fclose() 需要待關(guān)閉文件的名稱(或者存有文件名的變量):
?php
$myfile = fopen("webdictionary.txt", "r");// some code to be executed....
fclose($myfile);
?
PHP 讀取單行文件 - fgets()
fgets() 函數(shù)用于從文件讀取單行。
下例輸出 "webdictionary.txt" 文件的首行:
實例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");echo fgets($myfile);
fclose($myfile);
?
運行實例
注釋:調(diào)用 fgets() 函數(shù)之后,文件指針會移動到下一行。
PHP 檢查 End-Of-File - feof()
feof() 函數(shù)檢查是否已到達 "end-of-file" (EOF)。
feof() 對于遍歷未知長度的數(shù)據(jù)很有用。
下例逐行讀取 "webdictionary.txt" 文件,直到 end-of-file:
實例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單行直到 end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "br";
}
fclose($myfile);
?
運行實例
PHP 讀取單字符 - fgetc()
fgetc() 函數(shù)用于從文件中讀取單個字符。
下例逐字符讀取 "webdictionary.txt" 文件,直到 end-of-file:
實例
?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單字符直到 end-of-file
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?
運行實例
注釋:在調(diào)用 fgetc() 函數(shù)之后,文件指針會移動到下一個字符。
PHP Filesystem 參考手冊
如需完整的 PHP 文件系統(tǒng)參考手冊,請訪問 W3School 提供的 PHP Filesystem 參考手冊。
使用JSON模式統(tǒng)一數(shù)據(jù)格式:使用JSON模式統(tǒng)一數(shù)據(jù)格式,可以解決數(shù)據(jù)格式不一致的問題,使得數(shù)據(jù)在不同語言之間可以交換
思路:
讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫
示例
文件夾結(jié)構(gòu)
/
file.csv????//csv大文件,這里只模擬三行數(shù)據(jù),不考慮運行效率(PS:csv文件格式很簡單,文件一般較小,解析很快,運行效率的瓶頸主要在寫入數(shù)據(jù)庫操作)
index.php????//php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
*?讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫
*/
//獲取數(shù)據(jù)庫實例
$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ù)庫
$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;
運行結(jié)束后,數(shù)據(jù)庫中會插入csv中的三行數(shù)據(jù)