发新话题
打印

[原创]PEAR的使用,这两天的学习笔记

[原创]PEAR的使用,这两天的学习笔记

这两天一个人过,无聊透顶。看小电影都索然无味,还是看点东西,进步一下。PEARPHP的一个扩展包,包含了很多模块,会让PHPer省了很多重复工作。


PEAR的使用
PEAR的使用,安装、注意事项、实例



[安装]
运行环境:windows 2000 Pro +SP4 + WAMP

下载 PEAR-1.4.6.tgz(基本包),用WINRAR解压缩,放到c:/wamp/www(网站发布目录)下。如c:/wamp/www/PEAR

下载 DB-1.7.6.tgz(用来操作数据库),用WINRAR解压缩,放到c:/wamp/www/PEAR 下。如c:/wamp/www/PEAR/DB

下载 HTML_QuickForm-3.2.5.tgz (用来操作表单),用WINRAR解压缩,放到c:/wamp/www/PEAR 下。如c:/wamp/www/PEAR/HTML/QuickForm

下载 HTML_Common-1.2.2.tgz (HTML_QuickForm需要依赖),用WINRAR解压缩,放到c:/wamp/www/PEAR 下。如c:/wamp/www/PEAR/Common

下载 Mail-1.1.9.tgz (用来发送邮件),用WINRAR解压缩,放到c:/wamp/www/PEAR 下。如c:/wamp/www/PEAR/Mail
同时需要下载下面三个包:
Net_SMTP-1.2.7.tgz 存放目录:c:/wamp/www/PEAR/Net/smtp.php (只需要一个smtp.php)
Net_Socket-1.0.6.tgz 存放目录:c:/wamp/www/PEAR/Net/socket.php(只需要一个socket.php)
Mail_Mime-1.3.1.tgz 存放目录:c:/wamp/www/PEAR/Mail/mime.php (还有mimeDecode.php和mimePart.php)

安装完成。
以上包用来实现、对表单、数据库、邮件发送的操作。

[调用]

创建common.inc.php文件
复制内容到剪贴板
代码:
<?php
//申明pear目录位置
ini_set('include_path', 'c:/wamp/www/pear' . PATH_SEPARATOR . ini_get('include_path'));

//引用pear::QuickForm
require_once("HTML/QuickForm.php");
$form = new HTML_QuickForm('form', 'post');

//引用pear::DB
$dbuser ='数据库用户名;
$dbpw = '数据库密码';
$dbhost='数据库主机地址';
$dbname='数据库库名称';

require_once( 'DB.php');
$dsn = "mysql://$dbuser:$dbpw@$dbhost/$dbname";
$db =& DB::connect($dsn);
if (PEAR::isError($db)) {
echo 'Standard Message: ' . $db->getMessage() . "<br>";
echo 'Standard Code: ' . $db->getCode() . "<br>";
echo 'DBMS/User Message: ' . $db->getUserInfo() . "<br>";
echo 'DBMS/Debug Message: ' . $db->getDebugInfo() . "<br>";
exit();
}

//判断email格式函数
function isemail($email) {

}

//引用mail,使用SMTP方式发送
require_once('Mail.php');
$recipients = '回复邮件地址';
$headers['From'] = 'public@wuhuren.com';
$headers['To'] = '收件人地址';
$headers['Subject'] = '邮件主题';
$body = '这是一封来自芜湖人的邀请信'';
$params = array('host'=>'邮件服务器地址',
'auth'=>true, //使用auth,默认是关闭的,需要打开。
'username'=>'test@msn.com',
'password'=>'test@msn.com邮箱密码',
//'debug'=>true, //用于调试,如果需要可以去掉注释
//'persist'=>true
);
// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('smtp', $params);

// 以上是对所有包的申明,需要时,直接调用common.inc.php文件
?>
[实例]
创建pear.php文件,内容如下。
涉及到一个数据表mailtable,含有6个字段,见$form_val数组元素。
复制内容到剪贴板
代码:
<?php
/**
* Project: pear test
* File: pear.php
*
*  PEAR测试
*
* @link [url]http://www.wuhuren.com/[/url]
* @copyright 2002-2006 wuhuren.com
* @author zack <[email]chinaw3@hotmail.com[/email]>
* @package pear
* @version 0.0.1
*/

require_once("common.inc.php");

//表单

$form->addElement('header', null, '发邮件表单');
$form->addElement('html', '', '<hr><br><br><br>');
$form->addElement('header', 'header', '发送邀请函至:');
$form->addElement('text', 'nick', '好友真实姓名:');
$form->addElement('text', 'email', '邮件地址:');
$form->addElement('textarea','remark','推荐内容:');
$form->addElement('submit', 'submit', '发送邀请函');

$form->addRule('email', '需正确填写', 'isemail'); // 使用自定义的函数,也可以使用内置的email判断规则
$form->addRule('nick', '需正确填写','rangelength',array(4, 10));



// Try to validate a form
if ($form->validate()) {
echo '<h1>Hello, ' . htmlspecialchars($form->exportValue('nick')) . '!</h1>';
$table_name = 'mailtable';
$form_val = array(
'nick' => htmlspecialchars($form->exportValue('nick')),
'email' => $form->exportValue('email'),
'sender' => "zack",
'senddate' =>date('Y-m-d'),
'keyval' =>'dafds89kkllcu',
'remark' => $form->exportValue('remark')
);
$res = $db->autoExecute($table_name,$form_val,DB_AUTOQUERY_INSERT);
if (PEAR::isError($res)) {
die($res->getMessage());
}else {
// Sendmail to nick
$result = $mail_object->send($recipients, $headers, $body);
if (PEAR::isError($result)) {
die($result->getMessage());
}else {
echo "已经送出".$db->affectedRows()."封邮件至".$form_val['nick']."!";
}
}
}
$form->display();
?>
[注意]

如果MySQL数据库是4.2.x(具体不记得了,可以查看www.mysql.com说明)版本以上,需要修改DB包里的mysql.php文件。

原因:数据库对字符集做了分开定义,见mysql服务器环境变量
复制内容到剪贴板
代码:
character set client         utf8         gb2312
character set connection         utf8         gb2312
character set database         gb2312         gb2312
character set results         utf8         gb2312
character set server         gb2312         gb2312
character set system         utf8         utf8
character sets dir         c:\wamp\mysql\share\charsets\         c:\wamp\mysql\share\charsets\
collation connection         utf8_general_ci         gb2312_chinese_ci
collation database         gb2312_chinese_ci         gb2312_chinese_ci
collation server         gb2312_chinese_ci         gb2312_chinese_ci
这个变化对从低版本MYSQL上移植来的用户说,不知道的会搞死人,在MY.INI文件中设置default-char... 都不行。

【修改方法】
在操作前先执行
复制内容到剪贴板
代码:
mysql_query("SET NAMES gb2312");
可以直接修改DB包里的mysql.php文件
打开c:/wamp/www/PEAR/DB/mysql.php
找到
复制内容到剪贴板
代码:
if ($dsn['database']) {
if (!@mysql_select_db($dsn['database'], $this->connection)) {
return $this->mysqlRaiseError();
}
$this->_db = $dsn['database'];
}

return DB_OK;
替换成
复制内容到剪贴板
代码:
if ($dsn['database']) {
if (!@mysql_select_db($dsn['database'], $this->connection)) {
return $this->mysqlRaiseError();
}
$this->_db = $dsn['database'];
mysql_query("SET NAMES gb2312");
}

return DB_OK;
这样可以在选择数据库后,先更新操作字符集。以后调用不用操心了。
PHP开发资源网 - 全力打造中文PHP第一社群

TOP

TOP

楼主  想问下在

http://blog.chinaunix.net/u/3732/article_42503.html

[连载]--实战PEAR -- PHP程序员进阶手册
原创在哪??
文中尾部  pear/wiki  指的是哪个wiki啊

TOP

发新话题