Submitted by admin on 2011, June 9, 7:03 PM
下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法。
图表库
下面的类库可以让你很简的创建复杂的图表和图片。当然,它们需要GD库的支持。
pChart - 一个可以创建统计图的库。
Libchart - 这也是一个简单的统计图库。
JpGraph - 一个面向对象的图片创建类。
Open Flash Chart - 这是一个基于Flash的统计图。
RSS 解析
解释RSS并是一件很单调的事情,不过幸好你有下面的类库可以帮助你方便地读取RSS的Feed。
MagpieRSS - 开源的PHP版RSS解析器,据说功能强大,未验证。
SimplePie - 这是一个非常快速,而且易用的RSS和Atom 解析库。
缩略图生成
phpThumb - 功能很强大,如何强大还是自己去体会吧。
支付
你的网站需要处理支付方面的事情?需要一个和支付网关的程序?下面这个程序可以帮到你。
PHP Payment Library - 支持Paypal, Authorize.net 和2Checkout (2CO)
OpenID
PHP-OpenID - 支持OpenID的一个PHP库。OpenID是帮助你使用相同的用户名和口令登录不同的网站的一种解决方案。如果你对OpenID不熟悉的话,你可以到这里看看:http://openid.net.cn/
数据为抽象/对象关系映射ORM
ADOdb - 数据库抽象
Doctrine - 对象关系映射Object relational mapper (ORM) ,需要 PHP 5.2.3+ 版本,一个非常强大的database abstraction layer (DBAL).
Propel - 对象关系映射框架- PHP5
Outlet - 也是关于对象关系映射的一个工具。
注:对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
PDF 生成器
FPDF - 这量一个可以让你生成PDF的纯PHP类库。
Excel 相关
你的站点需要生成Excel?没有问题,下面这两个类库可以让你轻松做到这一点。
php-excel - 这是一个非常简单的Excel文件生成类。
PHP Excel Reader - 可以解析并读取XLS文件中的数据。
E-Mail 相关
不喜欢PHP的mail函数?觉得不够强大?下面的PHP邮件相关的库绝对不会让你失望。
Swift Mailer - 免费的超多功能的PHP邮件库。
PHPMailer - 超强大的邮件发送类。
单元测试
如果你在使用测试驱动的方法开发你的程序,下面的类库和框架绝你能帮助你的开发。
SimpleTest - 一个PHP的单元测试和网页测试的框架。
PHPUnit - 来自xUnit 家族,提供一个框架可以让你方便地进行单元测试的案例开发。并可非常容易地分析其测试结果。
php | 评论:0
| Trackbacks:0
| 阅读:891
Submitted by admin on 2011, May 23, 12:04 AM
php | 评论:0
| Trackbacks:0
| 阅读:840
Submitted by admin on 2011, May 22, 5:18 PM
这是一个完全符合RFC2822和RFC2821的代码。只检查单个email地址。
function check_email_address($email) {
// First, we check that there@#s one @ symbol, and that the lengths are right
if (!ereg("[^@]{1,64}@[^@]{1,255}", $email)) {
// Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++) {
if (!ereg("^(([A-Za-z0-9!#$%&@#*+/=?^_`{|}~-][A-Za-z0-9!#$%&@#*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
return false;
}
}
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++) {
if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
return false;
}
}
}
return true;
}
RFC2822:定义了email的格式
RFC2821:定义了email中@前后的用户名和服务器名的最大长度,4.5.3.1节
另外RFC2234定义了ABNF和一些常用的terminal:
网上大多数的邮件地址检查代码都没有按照这些RFC来写。
另外还可以加上检查邮件服务器是否存在的代码。这个在网上有的是。
php | 评论:0
| Trackbacks:0
| 阅读:991
Submitted by admin on 2011, May 22, 5:18 PM
这个类可以用来检查URL地址的合法性,目前支持ftp,file,http,https,gopher,news,nntp,telnet,wais.功能:
检查URL的合法性
class urlcheck{
var $regex = array(//协议名(注意在这里必须写成小写) => 对应的正则表达式
'ftp' => '$this->ftpurl',
'file' => '$this->fileurl',
'http' => '$this->httpurl',
'https' => '$this->httpurl',
'gopher' => '$this->gopherurl',
'news' => '$this->newsurl',
'nntp' => '$this->nntpurl',
'telnet' => '$this->telneturl',
'wais' => '$this->waisurl'
);
var $lowalpha;
var $hialpha;
var $alpha;
var $digit;
var $safe;
var $extra;
var $national;
var $punctuation;
var $reserved;
var $hex;
var $escape;
var $unreserved;
var $uchar;
var $xchar;
var $digits;
var $urlpath;
var $password;
var $user;
var $port;
var $hostnumber;
var $alphadigit;
var $toplabel;
var $domainlabel;
var $hostname;
var $host;
var $hostport;
var $login;
//ftp
var $ftptype;
var $fsegment;
var $fpath;
var $ftpurl;
//file
var $fileurl;
//http,https
var $search;
var $hsegment;
var $hpath;
var $httpurl;
//gopher
var $gopher_string;
var $selector;
var $gtype;
var $gopherurl;
//news
var $article;
var $group;
var $grouppart;
var $newsurl;
//nntp
var $nntpurl;
//telnet
var $telneturl;
//wais
var $wpath;
var $wtype;
var $database;
var $waisdoc;
var $waisindex;
var $waisdatabase;
var $waisurl;
function check($url){
$pos = @strpos($url,':',1);
if($pos<1) return false;
$prot = substr($url,0,$pos);
if(!isset($this->regex[$prot])) return false;
eval('$regex = '.$this->regex[$prot].';');
return ereg('^'.$regex.'$',$url);
}
function urlcheck(){
$this->lowalpha = '[a-z]';
$this->hialpha = '[A-Z]';
$this->alpha = '('.$this->lowalpha.'|'.$this->hialpha.')';
$this->digit = '[0-9]';
$this->safe = '[$.+_-]';
$this->extra = '[*()\'!,]';
$this->national = '([{}|\^~`]|\\[|\\])';
$this->punctuation = '[<>#%"]';
$this->reserved = '[?;/:@&=]';
$this->hex = '('.$this->digit.'|[a-fA-F])';
$this->escape = '(%'.$this->hex.'{2})';
$this->unreserved = '('.$this->alpha.'|'.$this->digit.'|'.$this->safe.'|'.$this->extra.')';
$this->uchar = '('.$this->unreserved.'|'.$this->escape.')';
$this->xchar = '('.$this->unreserved.'|'.$this->reserved.'|'.$this->escape.')';
$this->digits = '('.$this->digit.'+)';
$this->urlpath = '('.$this->xchar.'*)';
$this->password = '(('.$this->uchar.'|[?;&=]'.')*)';
$this->user = '(('.$this->uchar.'|[?;&=]'.')*)';
$this->port = $this->digits;
$this->hostnumber = '('.$this->digits.'.'.$this->digits.'.'.$this->digits.'.'.$this->digits.')';
$this->alphadigit = '('.$this->alpha.'|'.$this->digit.')';
$this->toplabel = '('.$this->alpha.'|('.$this->alpha.'('.$this->alphadigit.'|-)*'.$this->alphadigit.'))';
$this->domainlabel = '('.$this->alphadigit.'|('.$this->alphadigit.'('.$this->alphadigit.'|-)*'.$this->alphadigit.'))';
$this->hostname = '(('.$this->domainlabel.'\\.)*'.$this->toplabel.')';
$this->host = '('.$this->hostname.'|'.$this->hostnumber.')';
$this->hostport = '('.$this->host.'(:'.$this->port.')?)';
$this->login = '(('.$this->user.'(:'.$this->password.')?@)?'.$this->hostport.')';
$this->ftptype = '[aidAID]';
$this->fsegment = '(('.$this->uchar.'|[?:@&=])*)';
$this->fpath = '('.$this->fsegment.'(/'.$this->fsegment.')*)';
$this->ftpurl = '([fF][tT][pP]://'.$this->login.'(/'.$this->fpath.'(;[tT][yY][pP][eE]='.$this->ftptype.')?)?)';
$this->fileurl = '([fF][iI][lL][eE]://('.$this->host.'|[lL][oO][cC][aA][lL][hH][oO][sS][tT])?/'.$this->fpath.')';
$this->search = '(('.$this->uchar.'|[;:@&=])*)';
$this->hsegment = '(('.$this->uchar.'|[;:@&=])*)';
$this->hpath = '('.$this->hsegment.'(/'.$this->hsegment.')*)';
$this->httpurl = '([hH][tT][tT][pP][sS]?://'.$this->hostport.'(/'.$this->hpath.'([?]'.$this->search.')?)?)';
$this->gopher_string = '('.$this->xchar.'*)';
$this->selector = '('.$this->xchar.'*)';
$this->gtype = $this->xchar;
$this->gopherurl = '([gG][oO][pP][hH][eE][rR]://'.$this->hostport.'(/('.$this->gtype.'('.$this->selector.'(%09'.$this->search.'(%09'.$this->gopher_string.')?)?)?)?)?)';
$this->article = '(('.$this->uchar.'|[;/?:&=])+@'.$this->host.')';
$this->group = '('.$this->alpha.'('.$this->alpha.'|'.$this->digit.'|[-.+_])*)';
$this->grouppart = '([*]|'.$this->group.'|'.$this->article.')';
$this->newsurl = '([nN][eE][wW][sS]:'.$this->grouppart.')';
$this->nntpurl = '([nN][nN][tT][pP]://'.$this->hostport.'/'.$this->group.'(/'.$this->digits.')?)';
$this->telneturl = '([tT][eE][lL][nN][eE][tT]://'.$this->login.'/?)';
$this->wpath = '('.$this->uchar.'*)';
$this->wtype = '('.$this->uchar.'*)';
$this->database = '('.$this->uchar.'*)';
$this->waisdoc = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'/'.$this->wtype.'/'.$this->wpath.')';
$this->waisindex = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'[?]'.$this->search.')';
$this->waisdatabase = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.')';
$this->waisurl = '('.$this->waisdatabase.'|'.$this->waisindex.'|'.$this->waisdoc.')';
}
}
php | 评论:0
| Trackbacks:0
| 阅读:903
Submitted by admin on 2011, April 24, 11:42 PM
之前看到过好多关于PHP导出Excel的文章,自己也通过不少方法实现过,
例如,echo一个Table,然后将header修改为Excel即可。
其实在众多方法中感觉Pear中的Spreadsheet_Excel_Writer很是好用。
关于Spreadsheet_Excel_Writer的安装本文不予介绍,可通过Google找到
答案:) 也可参考: http://pear.php.net/package/Spreadsheet_Excel_Writer/download
<?php
//调用Writer.php
require_once 'Spreadsheet/Excel/Writer.php';
//创建Workbook
$workbook = new Spreadsheet_Excel_Writer();
//定义导出Excel文件名
$workbook->send('test.xls');
//创建Worksheet
$worksheet =& $workbook->addWorksheet('My first worksheet');
//设置字体大小
$format_column = & $workbook->addformat(array('Size'=>9,'Bold'=>1));
//数据写入
//标题行(第一行)
$worksheet->write(0, 0, 'Name', $format_column);
$worksheet->write(0, 1, 'Age', $format_column);
//第一个人(第二行)
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
//第二个人(第三行)
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
//第三个人(第四行)
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);
//关闭Workbook
$workbook->close();
?>
-------------------me
直接导出,会乱码
保存再下载,就正常
增加
$workbook->setVersion(8);
$worksheet->setInputEncoding("utf-8");
再将中文转为UTF8
$lqzy=iconv("GBK","UTF-8",$r['lqzy']);
因为页面本身是gb2312
如果页面本身是utf8,应该不用转,感觉excel只支持utf8
-------------------------------
1.在根目录下建立文件夹,名为”Spreadsheet\Excel
2.在http://pear.php.net/package/PEAR/download下载PEAR,然后安装:也可执行PHP目录里的go-pear.bat
3.把 PEAR解压后的pear.php 复制到 “Spreadsheet\Excel” 路径下
4.在http://pear.php.net/package/Spreadsheet_Excel_Writer/download下载Spreadsheet_Excel_Writer
5.在http://pear.php.net/package/OLE/download下载 OLE-1.0.0RC1.gz ,安装:cmd进入php目录,我的是D:\php 运行命令“OLE-1.0.0RC1 ”。
6.把Spreadsheet_Excel_Writer 中的“Writer.php” 和 “Writer” 文件夹复制到“Spreadsheet/Excel/” 路径下
7.把OLE-1.0.0RC1 中的 “OLE.php” 复制到“Spreadsheet/Excel/” 路径下,“PPS.php” 和 “PPS” 文件夹复制到“Spreadsheet/Excel/OLE路径下
8.把Console、System.php都复制到Spreadsheet\Excel路径下
php | 评论:0
| Trackbacks:0
| 阅读:1092
Submitted by admin on 2011, April 16, 11:35 PM
- $fileURL=;
-
- $filename=;
- $file = @ fopen($fileURL,"r");
- if (!$file) {
- echo "文件找不到";
- } else {
- Header("Content-type: application/octet-stream");
- Header("Content-Disposition: attachment; filename=" . $filename);
- while (!feof ($file)) {
- echo fread($file,50000);
- }
- fclose (file);
- }
php | 评论:0
| Trackbacks:0
| 阅读:958
Submitted by admin on 2011, April 7, 9:05 PM
和Spreadsheet_Excel_Writer类似,Spreadsheet_Excel_Reader是用来读取Excel内容的工具。
可以方便的将Excel数据导入到数据或者其他用途。
如下代码:
<?php
//调用Reader
require_once 'Spreadsheet/Excel/Reader/reader.php';
//创建 Reader
$data = new Spreadsheet_Excel_Reader();
//设置文本输出编码
$data->setOutputEncoding('GB2312');
//读取Excel文件
$data->read("c:\test.xls");
//$data->sheets[0]['numRows']为Excel行数
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
//$data->sheets[0]['numCols']为Excel列数
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
//显示每个单元格内容
echo $data->sheets[0]['cells'][$i][$j];
}
}
?>
另,由于日期型的特殊性,在取值时可能会产生错误,可将Excel单元格类型设为Text,
将日期以文本形式读取,如需日期型字符再通过PHP对其进行处理即可(strtotime()结合date())。
php | 评论:0
| Trackbacks:0
| 阅读:907
Submitted by admin on 2011, April 3, 2:08 AM
在使用PHP过程中发现,自己编写的php代码因为都是源代码方式放在服务器上的所以很容易就被别人拿走随便修改(变成自己开发的)使用了。
为了保住自己的劳动成果,我一直寻找一种可以加密php代码的软件。
最著名的就是Zend公司的Zendencoder了,但是不是开源软件(要价很高,也没有找到破解版)。
既然收费的用不起,我们就用开源的。我找到了php_screw这个开源软件,目前最新版本是1.3
网址
http://sourceforge.net/projects/php-screw/
我的安装环境
系统:Slackware 10
软件:Apache 1.3.31
PHP 4.3.7
以上环境全部是slackware 10默认安装后自带的。具体的Apache+php+mysql安装方法参照如下
支持php的Apache环境安装
获得软件
下载php_screw-1.3 (http://prdownloads.sourceforge.net/php-screw/php_screw-1.3.tgz?download)
安装
1.将获得的php_screw-1.3.tgz文件放到/usr/local目录下,然后用tar解压缩
tar zxvf php_screw-1.3.tgz
2.进入/usr/local/php_screw-1.3目录开始安装
cd /usr/local/php_screw-1.3
phpize
./confiugre
3.设置自己用来加密的密码
vi my_screw.h
-- Please change the encryption SEED key (pm9screw_mycryptkey) into the
values according to what you like.
The encryption will be harder to break, if you add more values to the
encryption SEED array. However, the size of the SEED is unrelated to
the time of the decrypt processing.
* If you can read and understand the source code, to modify an original
encryption logic will be possible. But in general, this should not
be necessary.
OPTIONAL: Encrypted scripts get a stamp added to the beginning of the
file. If you like, you may change this stamp defined by
PM9SCREW and PM9SCREW_LEN in php_screw.h. PM9SCREW_LEN must
be less than or equal to the size of PM9SCREW.
4.编译
make
5.拷贝modules目录下的php_screw.so文件到/usr/lib/php/extension目录下
cp modules/php_screw.so /usr/lib/php/extension/
6.编辑php.ini文件
在php.ini文件里,加入如下语句
extension=php_screw.so
7.重新启动Apache
/etc/rc.d/rc.httpd restart
8.编译加密工具
cd tools
make
9.将tools目录下加密用的工具screw拷贝到适当目录
cp screw /usr/bin/
经过以上的10步,就已经把php_screw-1.3全部安装完成了。并且现在的php也已经支持解释加密过的php文件了
使用
1.现写一个要加密的php文件。
我写了如下的一个用来测试php速度的compute.php文件
<?
$a=0;
$t=time();
for($i=0;$i<5000000;$i++)
{$a=$a*$i;}
$t1=time();
echo "<p>";
echo "It used:";
echo $t1-$t;
echo "seconds";
?>
将上面的compute.php文件放到/var/www/htdocs目录下。通过浏览器访问,将显示出php在大量计算时的速度(只能粗略估计一下)
2.将我们写的php文件加密
cd /var/www/htdocs/
screw compute.php
我们加密后,现在目录下的compute.php文件就是我们已经加密的了。而源文件被改名为compute.php.screw存放了。
我们现在再测试一下compute.php,看看能否正常使用?速度如何?
我比较了一下,加密前后的速度大概一样,基本没有太多的损失。
php | 评论:0
| Trackbacks:0
| 阅读:879