FPDF
FPDF 這個PHP Class允許你採用純PHP(更確切地說就是不需要使用PDFlib)來生成PDF文件。它所具有的特點包括:可選擇的unit大小,頁面格式和頁邊 距;頁眉和頁腳管理;自動分頁;自動換行與文本自動對齊;支持JPEG與PNG圖片格式;支持著色和文件超鏈接;支持TrueType,Type1與 encoding;支持頁面壓縮。
HTML2PDF
HTML2PDF能夠把一個HTML文本轉換成一個列印機友好的PDF文件。這個PHP腳本構建在FPDF PHP腳本之上。
TCPDF
TCPDF是一個用於快速生成PDF文件的PHP5函數包。TCPDF基於FPDF進行擴展和改進。支持UTF-8,Unicode,HTML和 XHTML。
html2ps
html2ps 能夠把帶有圖片,復雜表格(包含rowspan/colspan) ,layer/div和css樣式的HTML轉換成Postscript與PDF。 html2ps對CSS2.1支持非常好,並且很好地兼容不正確的HMTL。它甚至能夠轉換幾乎是採用CSS設計的網站如msn.com。
HTML_ToPDF
HTML_ToPDF能夠把任何HTML文檔轉換成在任何平台和列印機下界面格式都一樣的PDF文檔。它包括支持圖片轉換,使用樣式表來定製PDF 文件和錯誤處理。
cPdfWriter
cPdfWriter是一個能夠輸出PDF文檔的PHP5 class。基於TCPDF,FPDF和其它相關腳本。
dompdf
dompdf是一個HTML到PDF的轉換工具。它的核心是一個遵循大部份CSS2.1樣式的Rendering引擎。dompdf採用樣式驅動, 它能夠下載並讀取外部樣式,整個樣式標簽和單個HTML元素的樣式屬性。它同樣支持目當大部份HTML屬性。
2. php中什麼是第三方類庫
如果你直接使用的是第三方的類庫包,或者是類名和後綴和ThinkPHP的默認規則不符合的,我們建議你放到第三方類庫擴展目錄Extend/Vendor目錄下面,並使用vendor方法來導入。
例如,我們把Zend的Filter\Dir.php 放到Vendor目錄下面,這個時候Dir文件的路徑就是
Vendor\Zend\Filter\Dir.php,我們使用vendor方法導入就是:
Vendor('Zend.Filter.Dir');
需要注意的是,vendor方法默認導入的類庫後綴是php的而不是class.php的,如果你的第三方類庫的後綴是class.php,可以使用:
Vendor('Zend.Filter.Dir','','.class.php');
或者使用:
import('Zend.Filter.Dir',VENDOR_PATH);
通過使用第三方類庫擴展,我們可以直接使用Zend、CI或者其他框架中的類庫。
3. php中函數庫和類庫到底有什麼區別
首先你要知道什麼是函數,比如這一個
is_mail($str){//判斷的內容}
假如這個is_mail可以用來判斷用戶提交的數據是否是email格式的,這就是一個功能。判斷is_mail的功能。
使用的時候只要
if(is_mail($str))
{}
else
{}
函數庫
就是很多函數的集合。有很多功能,你就不用自己重新寫了,直接使用就可以。
而類庫,你要先理解類。
類,你可以理解為函數根據實際需求分類存放的一個地方。因為如果項目很大,就會有很多函數,如果不分類,有時候就很難找到了。根據函數的功能,把一類函數都整合到一個類裡面,使用起來就很方便。
比如資料庫操作類。
所有資料庫操作的函數都放在裡面了,你只要調用就可以了。
$db = new data();
$db->qurey();//使用$db類的qurey方法,其實就是使用qurey這個函數。
而類庫,就是很多可以直接使用的類。
總而言之,函數庫和類庫,可以大大提升開發效率。
4. PHP資料庫操作之基於Mysqli的資料庫操作類庫
此類庫簡單、易用,便於你自己修改和對功能的改善,能解決大部分
PHP
項目中執行的
SQL
操作。
初步工作
首先,請大家下載這個類庫
M.class.php 再下載一個
Mysqli
連接資料庫的類庫
MysqliDb.class.php(打包下載地址)
新建一個
includes
的文件夾,將下載下來的兩個
class
文件,放進去。
然後,請你在項目下創建一個
test.php
文件。註:UTF-8
文件格式
請先根據你機器的情況,填充以下代碼,用於連接資料庫:
復制代碼
代碼如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//資料庫伺服器地址
define('DB_USER',
'root');
//資料庫用戶名
define('DB_PWD',
'×××');//資料庫密碼
define('DB_NAME',
'×××');
//資料庫名稱
define('DB_PORT',
'3306');
//資料庫埠
function
__autoload($className)
{
require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自動載入
class
文件
}
好了,上面的這些操作都是初步工作,下面正式進入類庫的講解。
類庫講解
首先,我們得實例化
M.class.php,實例化很簡單:
復制代碼
代碼如下:
$m
=
new
M();
//這步操作代表
M.class.php
中的所有功能都封裝在了變數
$m
中
註:
1、M類庫中的方法參數說明,請到
M.class.php
文件中看詳細的注釋,這里不再進行敘述。建議在學習的時候,對照著看下文件中的參數即注釋。
2、講解代碼中用到的資料庫結構為:
復制代碼
代碼如下:
CREATE
TABLE
`user`
(
`id`
int(8)
unsigned
NOT
NULL
auto_increment,
`name`
varchar(50)
default
NULL,
`email`
varchar(100)
default
NULL,
`age`
smallint(3)
default
NULL,
`class_id`
int(8)
default
NULL,
`commit_time`
int(10)
default
NULL,
PRIMARY
KEY
(`id`),
KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
復制代碼
代碼如下:
CREATE
TABLE
`class`
(
`class_id`
int(8)
NOT
NULL
auto_increment,
`class_name`
varchar(100)
default
NULL,
PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
並添加一條測試數據。
3、M類庫中,大部分方法都分兩中類型,即:SQL方法;拼接方法,具體在實例中可以看出
4、以下稱述中的
M
為
M.class.php
文件
方法1、Insert()
添加數據
Insert
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()));
//
拼接方法:往`user`表中添加一條數據,返回值為資料庫影響的行數
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增長id)
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')");
//SQL方法,返回值為資料庫影響的行數
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
註:Insert
方法中的第二個參數若為null,可自動獲得插入表除
auto_increment
欄位之外的所有欄位,詳情請看M源文件;若要返回值為最後插入的
ID,那麼請設置
Insert
方法的最後一個參數為
true(默認是false);
方法2、Update()
修改數據
update
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Update("user",
array('name'=>'李茹茹',
'age'=>24),
"id=1");
//拼接方法,修改id為1的數據的名稱為「李茹茹」;年齡為「24」,其方法的返回值為受影響的行數
$m->Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
刪除數據
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Del('user',
'id=3');
//拼接方法:刪除`user`表中
id
為3的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:刪除`user`表中
id
為4的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:刪除多條數據,刪除`user`表中
id
為
10、11、12
的數據,返回受影響的行數
方法4、Total()
獲取記錄數,返回值都為int
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Total('user');
//拼接方法:返回
`user`表中的記錄數,無條件
$m->Total('user',
'id>1');
//拼接方法:返回
`user`表中
id
大於1的記錄數,有條件
$m->Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,註:使用SQL方法,語句中必須使用
"AS
total",否則會報錯
方法5、IsExists()
檢查數據是否存在,返回值為boolean
復制代碼
代碼如下:
$m->IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`為「焦焦」的數據,返回true,若不存在,返回false
方法6、InsertId()
獲取表下一個添加的自動增長id,注意,這里不進行添加操作,只是獲取下一個增長id
復制代碼
代碼如下:
echo
$m->InsertId('user');
//獲取`user`
表下一個添加的自動增長id
方法7、GetRow()
返回單條數據,返回值為一維數組
GetRow
方法的全部使用案例如下:
復制代碼
代碼如下:
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一維數組,例如:Array
(
[name]
=>
焦焦
[email]
=>
[email protected]
)
$data
=
$m->GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查詢
$data
=
$m->GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m->GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查詢
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`");
//如果沒有指定條件應該是顯示全部信息,但是在此方法中將默認顯示第一條(不推薦這么使用!!!)
$data
是查詢出來的一維數組。
方法8、GetOne()
返回單個數據
GetOne
方法的全部使用案例如下:
復制代碼
代碼如下:
$name
=
$m->GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一個字元串,例如:焦焦
$name
=
$m->GetOne("user",
"name",
"id=1");
//拼接方法,返回一個字元串,例如:焦焦
方法9、FetchAll()
返回所有記錄
復制代碼
代碼如下:
$data
=
$m->FetchAll("user");
//返回`user`表中的所有記錄,以二維數組的形式
$data
=
$m->FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m->FetchAll("user",
"name,email",
"id>1",
'id
DESC',
'2');
//返回兩條id>1的數據,只顯示name,email,並且以id
為倒序排序。註:請注意該方法的最後一個參數也可以為'0,2',目的是為分頁准備的,如果第一頁為'0,2'的話,那麼第二頁就是'2,2'
//該方法也支持聯表查詢和多表查詢,下面以聯表查詢為例
$data
=
$m->FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:該拼接方法中,ON
添加的位置
註:對於該
FetchAll
方法,後續我會寫一篇使用該方法進行完美分頁的文章!!請關注。
方法10、MultiQuery()
執行多條SQL語句
復制代碼
代碼如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('賈花花',
'[email protected]',
'22',
'1',
'".time()."')";
//添加一個名叫「賈花花」的學生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//刪除一條名叫「焦焦」的學生信息
//解釋:$sql
是多條
SQL
以英文;(分號)拼接起來的
$data
=
$m->MultiQuery($sql);
//返回為true,代表執行成功;為false,代表執行失敗
類庫講解完畢
到此該類庫的全部功能就講解完畢,希望你能多看看M文件,了解其內部運行的機制。M
文件不會存在執行緩慢情況,請大家放心使用。
如果在使用過程中出現
SQL
拼接錯誤,類庫會報出友善的錯誤提示。
有問題請留言,歡迎大家的批評和建議,加油!學習好運。
5. php問題,求指點
這個問題不難解決。最快捷的方法就是用PHP-ExcelReader類庫,也就是說,我要引入這個類文件,然後按照特定的演算法把裡面的數據循環讀取出來。
給你一個例子:
include_once('../plugins/excel/reader.php');
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP936');
chmod($path.$newFile.$suffix,'0777');
$data->read($path.$newFile.$suffix);
// 先讀行,再讀列,鎖定一行,分列讀取;
$num=$data->sheets[0]['numRows'];
for ($i = 1; $i <= $num; $i++) {
for ($j = 0; $j <= $data->sheets[0]['numCols']; $j++) {
$insertData[$j]=$data->sheets[0]['cells'][$i][$j];
}
// 讀一行,存一行
if(!empty($insertData[1])){
$insertData[5]=intval($insertData[5]);
$insertData[6]=intval($insertData[6]);
$insertArray = array(
'goods_number' => $insertData[2],
'goods_name' => $insertData[3],
'goods_category' => empty($insertData[5])?65:empty($insertData[5]),
'goods_brand' => empty($insertData[6])?80:empty($insertData[6]),
//'goods_image' => $insertData[2].'.jpg',
'goods_price' => $insertData[7],
'goods_market_price' => $insertData[8],
'goods_credit' => $insertData[7]*100,
'goods_credit_green'=> $insertData[7]*100,
'goods_credit_gold'=> $insertData[7]*100,
'goods_credit_platinum'=> $insertData[7]*100,
'goods_credit_diamond'=> $insertData[7]*100,
'goods_intro' => $insertData[9],
'goods_freight' => $insertData[11].','.$insertData[12].','.$insertData[13].','.$insertData[14],
'goods_provider' => 2,
'goods_stock' => 1000
);
$goodsId = insertTable('goods',$insertArray,1);
//printarr($insertArray);
$detailArray = array(
'goods_id' => $goodsId,
'goods_detail' => empty($insertData[10])?$insertData[3].'暫無產品詳細信息':$insertData[10],
'goods_params' => '暫無規格參數',
'goods_list' => '暫無包裝清單',
'goods_service' => '暫無售後服務',
'goods_history' => '暫無品牌歷史',
);
insertTable('goods_detail',$detailArray);
}
}
至於類庫你到網上去下吧,到處都是。
6. spl是什麼意思
spl,指SPL - Standard PHP Library 標准PHP類庫。
不管是二次開發,還是自己全部重新設計,我們都得要有一個大前提,那就是最大化提高系統平台生命周期,國內很多phper開發者,很多項目的生命周期短得可憐,閱其代碼堅酸難懂。接手的開發人員像被強奸的感覺,,合格的PHP程序員應把代碼看成是一種藝術。
一個操作平台是否擁有良好的可擴展性,布局,可維護性是其根本的基礎。其核心框架必需高度抽象化,有良好的命名空間與對象介面,,這樣才能算是進入貴族藝術編程世界。
SPL(Standard PHP Library) IN PHP5
下一步中大型PHP商業應用的主流的開發將會是以OO,OA軟體開發模式主領潮流,從PHP5到PHP6,google Trends足以證明這一點,過去傳統的面向過程的開發模式將會被棄之,如果你是一位真正合格程序員。
你會發現OO所帶來的好處是深遠的,不僅是軟體工程所帶來的收益,而且此種思維理念對個人思維方式定有大的變革,你會發現你做事情開始方式無處不在。
當然筆者不想去論述用面向過程寫PHP代碼所帶來的好處(如簡單的應用),那種單人時代的開發方式如兒童時代已不適合需求復雜,變化過快的現代商業環境.筆者發現,如今支持面向過程的開發者大多知識不夠全,夠不夠廣,還不足以用OO來解決商業開發,當然這不是絕對。
但一位有著C++,JAVA, Smalltalk、EIFFEL等開發語言背景的程序員,他會無一不支持OO開發模式,相反網路知識框架基礎較少,各種協議一知半解,只會PHP的開發人員他們會覺得面向過程最適合他們。
以上內容參考網路-spl (標准PHP類庫)