php 学习笔记

来源:互联网 发布:淘宝公益宝贝是什么 编辑:程序博客网 时间:2024/03/29 13:04
 
一、             DOM对XML操作
$dom = new DOMDocument("1.0");
// save and display tree
echo $dom->saveXML();
对想添加的每一元素或文本节点,通过元素名或文本内容调用DOM文档对象的createElement()或createTextNode()方法。这将创建对应于元素或文本节点的新对象。
通过调用节点的appendChild()方法,并把其传递给上一步中创建的对象,并在XML文档树中将元素或文本节点添加到父节点。
通过使用属性,你也可以添加适合的信息到元素。对于PHP DOM API,添加属性需要两步:首先用DOM文档对象的createAttribute()方法创建拥有此属性名字的节点,然后将文档节点添加到拥有属性值的属性节点。
虽然不经常使用CDATA模块和过程向导,但是通过调用DOM文档对象的createCDATASection()和createProcessingInstruction()方法, PHP API 也能很好地支持CDATA和过程向导,请见程序清单E。
一旦已经实现你的目标,就可以将结果保存在一个文件或存储于PHP的变量。通过调用带有文件名的save()方法可以将结果保存在文件中,而通过调用saveXML()方法可存储于PHP的变量。
二、             使用 htmlentities 函数对实体编码
三、             字符集转换:
$html = mb_convert_encoding('<title>测试test</title>', 'gb2312', 'utf-8');
header("Cache-Control: no-cache, must-revalidate");
header('Content-type: text/html;charset=utf-8');
四、             Zend 框架组件包括:
Zend_Controller
此模块为应用程序提供全面的控制。它将请求转化为特定的行为并确保其执行。
Zend_Db
此模块基于 PHP 数据对象 (PDO) 并提供一种通用方式来访问数据库。
Zend_Feed
此模块使使用 RSS 和 Atom 提要变得简单。
Zend_Filter
此模块提供字符串过滤函数,如 isEmail() 和 getAlpha()。
Zend_InputFilter
对于 Zend_Filter,此模块是用来操作数组的,如表单输入。
Zend_HttpClient
此模块使您能轻易地执行 HTTP 请求。
Zend_Json
此模块使您能够轻易地将 PHP 对象转换成 JavaScript 对象符号,反之亦然。
Zend_Log
此模块提供通用日志功能。
Zend_Mail
此模块使您能够发送文本文件和多部分 MIME 电子邮件。
Zend_Mime
此模块被 Zend_Mail 用来解码 MIME 消息。
Zend_Pdf
此模块用来创建新的 PDF 文档,及加载和编辑现有文档。
Zend_Search
此模块使您能在现有文本上执行复杂搜索。例如,您可以建立一个搜索引擎,该引擎可以基于相关性或其他因素返回结果。
Zend_Service_Amazon、Zend_Service_Flickr 以及 Zend_Service_Yahoo
这些模块提供对这些 Web 服务 API 的简单访问。
Zend_View
此模块处理 MVC 模式的 “视图” 部分。
Zend_XmlRpc
此模块使您能够轻易地创建 XML-RPC 客户机。(已为将来计划好服务器功能。)
五、             MVC 模式将应用程序的职责分为三层:
模型
这里的模型概念性地表示了应用程序中的实体,它类同于一个类或者是面向对象世界中的对象。在一些实现中,模型只包含实体的结构。而在另一些实现中,模型还包含了与对象相关的业务逻辑。在本例中,模型仅包含实体的结构。
视图
视图是指页面的外观。它不包含,或至少不应该包含任何业务逻辑。在本例中,视图是能放置信息的模板,本例中为 HTML。
控制器
控制器是处理业务逻辑的地方。它具有两方面的职责,控制对象及其可视化表现,后者是由通过操纵视图来实现的。
六、             print_r 打印对象包含的数据
七、             Zend 控制类
class IndexController extends Zend_Controller_Action
当没有相应的指定时会自动去调用IndexController.php文件中IndexController类中的indexAction动作。
八、             首页动作,可以分到相应的控制和动作
<?php
include("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Controller_Front");
$controller = Zend_Controller_Front::getInstance()
              ->setParam('noViewRenderer', true)
               ->setParam('useDefaultControllerAlways',true)
               ->setControllerDirectory('G://www.mingwww.cn//controllers')
              ->throwExceptions(true)
              ->returnResponse(false);
$controller->dispatch();?>
九、             视图处理
$view = new Zend_View();
$view->setScriptPath('views');
$view->title = 'Chomp! The online feedreader';
$view->slogan = 'all the feeds you can eat';
echo $view->render('indexIndexView.php');
十、             没有相应动的处理
public function noRouteAction() 在Controles中的处理
{
        $this->_redirect('/');
}
十一、      对URL的管理
这些部分采用这样的布局: http://hostname/controller/action/parameters
如果我们要调用 http://localhost/user/ 这一 URL,Zend 框架会将请求发送至 UserController,但由于此 URL 并未指定任何行为,因而会使用 indexAction
十二、      建立会话,保存登录状态
session_start();
$_SESSION['RSS_SESSION'] = session_id();
$_SESSION['firstname'] = $rowsFound[0]['firstname'];
$_SESSION['username'] = $rowsFound[0]['username'];
if (isset($_SESSION['username'])) 判断对话是否存在。
十三、      当没有相应的动作,在相应的动作里加入__CALL处理没有相应的方法。
function __call($action, $arguments)
{
        echo "Action = " . $action . "<br />";
        echo "Arguments = " . $arguments;
}
十四、      连接到数据库
$params = array(
            'host' => 'localhost',
            'username' => 'chompuser',
            'password' => 'chomppassword',
            'dbname' => 'chomp'
        );
$DB = Zend_Db::factory('pdoMysql', $params);
//获取数据集
$row = array(
            'firstname' => $_POST['fName'],
            'LastName' => $_POST['lName'],
            'EmailAddress' => $_POST['email'],
            'Username' => $_POST['user'],
            'Password' => $_POST['pass']
        );
//通过ZEND的操作语句可以直接生成
$table = 'users';
$rowsAffected = $DB->insert($table, $row);
 
//也可以直接通过SQL语句直接操作
$DB->query($sql);查询一个语句
十五、      生成查询语句
$select = $DB->select();
$select->from('users', '*');
$select->where('Username = ?', $_POST['username']);
$select->where('Password = ?', $_POST['password']);
$sql = $select->__toString();
echo $sql;
fetchAll() 函数检索所有满足 select 语句的记录并将其放入一个二维数组。其中第一维是行,第二维是列。因而表达式 $rowsFound[0]['username'] 引用了所找到的第一行的 username 列。
判断是否存在
$rowsFound = $DB->fetchAll($select);
if (isset($rowsFound[0]["username"]))
{
       $this->_redirect('/');没有记录时导向别的地方
}
十六、      更新数据
$record = array (
               'firstname' => $_POST['fName'],
           'lastname' => $_POST['lName'],
           'emailaddress' => $_POST['email'],
           'username' => $_POST['user'],
            'password' => $_POST['pass']
            );
$row = $DB->quoteInto('Username =?', $_SESSION['username']);
$rowsAffected = $DB->update($table, $record, $row);
十七、      删除数据
$table = 'subscribedfeeds';
$where = "username='$username' and feedname='$feedTitle'";
$rowsAffected = $db->delete($table, $where);
十八、      建立注册库,之后引用
include 'Zend/Db.php';
$params = array(
            'host' => 'localhost',
            'username' => 'chompuser',
            'password' => 'chomppassword',
            'dbname' => 'chomp'
            );
$DB = Zend_Db::factory('pdoMysql', $params);
Zend_Registry::set('view', $view);
$view=Zend_Registry::get('view');
之后在Action中可以引用
require_once 'Zend/Db.php';
$DB = Zend::registry('DB')
如何使用 Zend_InputFilter 模块完成以下任务:
十九、      Zend_Feed 和 Zend_Inputfilter 模块
自动将数据从 POST、GET 和 SESSION 数组传送到 Zend 对象
过滤传入的 GET 或 POST 数据
关于 RSS 提要
如何使用 Zend_Feed 模块阅读 RSS 提要中的数据。
如何或在数据库中保存、查看以及删除提要条目,以便随后访问。
二十、      对数据库表的要求
use chomp;
create table feeds (feedname varchar(256), link varchar(512));
create table subscribedfeeds (username varchar(20), feedname varchar(256));
create table savedentries(username varchar(20), feedname varchar(256),channelname varchar(256), link varchar(512));
insert into feeds values
('Fox Sports', 'http://feeds.feedburner.com/foxsports/rss/headlines'),
('Google News', 'http://news.google.com/?output=rss'),
('Yahoo News', 'http://rss.news.yahoo.com/rss/topstories');
insert into subscribedfeeds values ('tsa', 'Google News');
数据库中的表的设置
feeds
此表用于存储可用提要。它包含两个字段:feedname 和 link。
subscribedfeeds
此表用于保存用户订阅的所有提要。订阅一条提要即为此表添加了一行,该行包含用户及订阅的这个提要的名称。它包含两个字段:username 和 feedname。
savedentries
此表用于存储用户已保存的全部 RSS 提要条目。以便使用户能在以后再次访问。它包含四个字段:username、feedname、channelname(文章标题)和 link。
二十一、            自动装载类
<?php
session_start();
include 'Zend.php';
function __autoload($class)
{
    Zend::loadClass($class);
}
$view = new Zend_View;//注册视图
$view->setScriptPath('views');
Zend::register('view', $view);
二十二、            InputFilter 类
getAlpha
只返回字母字符
getAlnum
只返回字母/数字字符
getDigits
只返回数字
getRaw
返回原始数据(未经过过滤及测试)
testAlnum
如只包含字母字符及数字,返回其值,否则返回 FALSE
testAlpha
如只包含字母字符,返回其值,否则返回 FALSE
testCcnum
若是有效信用卡号码,返回其值,否则返回 FALSE
testDate
若是有效日期,返回其值,否则返回 FALSE
testEmail
若是有效的电子邮件地址(目前还未在 Zend 框架下实现),返回其值,否则返回 FALSE
testName
若是有效的人名,返回其值,否则返回 FALSE
testRegex
若同正则表达式相匹配,返回其值(我们会用此方法测试有效的电子邮件地址),否则返回 FALSE
testPhone
若是有效的电话号码,返回其值,否则返回 FALSE
testUri
若是有效的 URL,返回其值,否则返回 FALSE
testZip
若是有效的邮政编码,返回其值,否则返回 FALSE
noTags
返回过滤掉所有 HTML 标记的值
对GET,POST,SESSION的验证
$filterGet = new Zend_InputFilter($_GET);
$filterPost = new Zend_InputFilter($_POST);
$filterSession = new Zend_InputFilter($_SESSION);
Zend::register('fGet', $filterGet);
Zend::register('fPost', $filterPost);
Zend::register('fSession', $filterSession);
二十三、            InputFilter处理
$username = $filterPost->testAlnum('username');
$password = $filterPost->getRaw('password');
$password2 = $filterPost->getRaw('password2');
$email = $filterPost->testRegex('email', "^[a-z0-9]+[a-z0-9_-]*(/.[a-z0-9_-]+)*@[a-z0-9_-]+(/.[a-z0-9_-]+)*/.(
[a-z]+){2,}$^");
$lName = $filterPost->testName('lName');
$fName = $filterPost->testName('fName');
如果数据不正常,返回假或空字串
二十四、            Zend_HTTP_Client
二十五、            Zend_PDF
<?php
require_once 'Zend/Pdf.php';
$pdf = new Zend_Pdf();
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$pageHeight = $page->getHeight();
$pageWidth = $page->getWidth();
echo 'Height = '.$pageHeight.'/n';
echo 'Width = '.$pageWidth.'/n';
$pdf->pages[0] = ($page);
$pdf->save("chomp.pdf");
?>
Zend_Pdf_Page::SIZE_A4,Zend_Pdf_Page::SIZE_A4_LANDSCAPE,Zend_Pdf_Page::SIZE_LETTER,Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE。请注意,在单个文档中,可以有不同尺寸的页面。
$chompImage = new Zend_Pdf_Image_JPEG(dirname(__FILE__) . '/chomp.jpg'); 调入一个JPG文件
$page->drawImage($chompImage, $leftPos, $bottomPos, $rightPos, $topPos); 向PDF写入图形
$style->setLineColor(new Zend_Pdf_Color_RGB(0.9, 0, 0));
$style->setFillColor(new Zend_Pdf_Color_GrayScale(0.2));
$style->setLineWidth(3);
$style->setFont(new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA_BOLD), 32); $page->setStyle($style);
$page->drawText('Chomp! To go', $rightPos + 32, $topPos - 48);
$page->drawRectangle(18, $pageHeight - 18, $pageWidth - 18, 18, Zend_Pdf_Const::SHAPEDRAW_STROKE);
首先要创建样式对象并为其设置属性。线条的颜色在这里设置为 RGB 值(在 0 至 1 的范围上设置的红色、绿色和蓝色),这主要应用于图形,一会便可看到。填充色这里设置为深灰色,这也可以应用在图形中,但在本例中更重要的是设置文本的颜色。行宽属性决定了您的文本行的宽度。
Zend_Pdf_Page::SHAPEDRAW_FILLNSTROKE、Zend_Pdf_Page::SHAPEDRAW_STROKE 和Zend_Pdf_Page::SHAPEDRAW_FILL。第一种选择包含了线和一种填充,所以如果我们在这里使用它,将会得到一个带红边的深灰色矩形。
输出到游览器
header('Content-type: application/pdf');
echo $pdf->render();
二十六、            EMAIL处理
电子邮件的结构是由消息头和消息体组成的。消息头包括关于消息的信息,诸如接收人、发送人、日期、消息 ID、发送人服务器 IP 地址、路由信息及多用途因特网邮件扩展(Multipurpose Internet Mail Extensions,MIME)类型。MIME 类型 将消息的类型确定为简单的文本消息、HTML 消息或带有附件的消息。消息体 仅仅是消息中的文本,可以扩充为很多行并可能带有附件。
Zend_Mail 组件包括:
Zend_Mail_Message
Zend_Mail_Abstract
Zend_Mail_Mbox
Zend_Mail_POP3
Zend_Mail_Transport_POP3
Zend_Mail_Maildir
Zend_Mail_Imap
Zend_Mail_Transport_Imap
require_once 'Zend/Mail/Transport/Smtp.php';
$tr = new Zend_Mail_Transport_Smtp('mail.example.com');
Zend_Mail::setDefaultTransport($tr);
$email = $row['emailaddress'];
$fName = $row['firstname'];
$lName = $row['lastname'];
$feedName = $row['feedname'];
$mail = new Zend_Mail ();
$mail->setFrom ('alerts@chomp.backstopmedia.com', 'Chomp! Alerts');
$mail->addTo ($email, "$fName $lName");
$mail->setSubject ('Your feeds have been updated');
$mail->setBodyText ("One of your subscribed feeds, $feedName, ". "has been updated.");
$mail->send ();
二十七、            Smary模板技术
基本使用方法
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
变量的显示方法
{* I am a Smarty comment, I don't exist in the compiled output *} 注释
$foo}        <-- displaying a simple variable (non array/object)
{$foo[4]}     <-- display the 5th element of a zero-indexed array
{$foo.bar}    <-- display the "bar" key value of an array, similar to PHP $foo['bar']
{$foo.$bar}   <-- display variable key value of an array, similar to PHP $foo[$bar]
{$foo->bar}   <-- display the object property "bar"
{$foo->bar()} <-- display the return value of object method "bar"
{#foo#}       <-- display the config file variable "foo"
{$smarty.config.foo} <-- synonym for {#foo#}
{$foo[bar]}   <-- syntax only valid in a section loop, see {section}
{assign var=foo value='baa'}{$foo} <-- displays "baa", see {assign}
{* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}
{include file='header.tpl'} 功能函数
$smarty->left_delimiter = '<!--{'; 改变变量的引用方式
$smarty->right_delimiter = '}-->';
 
 
原创粉丝点击