当前位置: 编程技术>php
本页文章导读:
▪PHP教程之PHP中shell脚本的使用方法分享
作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的.........
▪php tp验证表单与自动填充函数代码
代码如下: <?php class FormModel extends Model { // 自动验证设置 /* * 一:自动验证 自动验证的定义是这样的:array(field,rule,message,condition,type,when,params) field:代表是数据库的字段名; rule:代表是规.........
▪PHP 设计模式之观察者模式介绍
介绍 观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新! 设计原则 在观察者模式中,会改变的是主题的状态以及观察者的数目.........
[1]PHP教程之PHP中shell脚本的使用方法分享
来源: 互联网 发布时间: 2013-11-30
作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论。大多数情况下,我使用 exec() 命令和数据数组处理所有东西。或者对更简单的命令使用 shell_exec(),尤其是不关心结果时。如果仅需返回一个 PHP shell脚本,我就使用 passthru()。通常,我在不同的场合中使用不同的函数,并且有时它们是可以互换的。
这完全取决于我的心情和要实现的目的。您可能提问的另一个问题是 “它们的长处是什么?”。如果您没有头绪,或者一个项目非常适合使用 shell 命令,但不知道如何使用,那么我在这里提供一些见解。如果您正在编写一个提供各种备份或文件传输功能的应用程序,您可以选择使用 shell_exec() 或这里提供的其他命令之一运行 rsync 支持的 PHP shell脚本。您可以编写 PHP shell脚本使其包含必要的 rsync 命令,然后使用 passthru() 根据用户的命令或 cron 作业执行它。
例如,一位用户在您的应用程序中有适当的权限(比如管理员权限),他想将 50 个 PDF 文件从一个服务器发送到另一个服务器。那么,该用户需要在应用程序中导航到正确的位置,单击 Transfer,选择需要发送的 PDF,然后单击 Submit。在这个过程中,该表单应该有一个 PHP 脚本,它使用返回选项变量通过 passthru() 运行 rsync 脚本,这样您就知道是否发生问题,如下所示。
清单 1. 通过 passthru() 运行 rsync 脚本的示例 PHP 脚本
<?php
passthru('xfer_rsync.sh',$returnvalue);
if ($returnvalue != 0){
//we have a problem!
//add error code here
}else{
//we are okay
//redirect to some other page
}
?>
如果您的应用程序需要列出进程或文件,或关于这些进程或文件的数据,您可以使用本文总结的命令之一轻松实现这个目的。例如,一个简单的 grep 命令能够帮助您找到匹配特定搜索条件的文件。将它与 exec() 命令一起使用可以将结果保存到一个数组中,这允许您构建一个 HTML 表或表单,它们又进一步允许您运行其他命令。
到目前为止,我讨论了用户生成的事件 —— 用户只要按下按钮或单击链接,PHP 就运行相应的脚本。您还可以将独立的 PHP 脚本和 cron 或其他日程安排程序一起使用,从而实现一些有趣的效果。例如,如果您一个备份脚本,您可以通过 cron 运行它,或者将它打包到 PHP 脚本后在运行。
为什么要这样做?这似乎是多余的,不是吗?不是这样的 —— 您需要这样考虑,您可以通过 exec() 或 passthru() 运行备份脚本,然后根据返回代码执行一些行为。如果出现错误,您可以将其记录到错误日志或数据库中,或发送一封警告电子邮件。如果脚本成功,您可以将原始的输出转储到数据库(例如,rsync 有一个详尽(verbose)模式,对随后诊断问题十分有用)。
安全
我们在这里简要讨论一下安全性:如果您接受用户输入并将信息传递到 shell,那么最好过滤用户输入。删除您认为有害的命令和不允许的内容,比如 sudo(作为超级用户运行)或 rm(删除)。事实上,您可能不希望用户发送开放的请求,而是让他们从列表中选择。
例如,您运行一个接受文件列表作为参数的传输程序,您应该通过一系列复选框列出所有文件。用户可以选择和取消选择文件,并通过单击 Submit 激活 rsync shell 脚本。用户不能自己输入文件或使用正则表达式。
本文从两个方面介绍的PHP shell脚本的用法,希望能给你带来帮助。
PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论。大多数情况下,我使用 exec() 命令和数据数组处理所有东西。或者对更简单的命令使用 shell_exec(),尤其是不关心结果时。如果仅需返回一个 PHP shell脚本,我就使用 passthru()。通常,我在不同的场合中使用不同的函数,并且有时它们是可以互换的。
这完全取决于我的心情和要实现的目的。您可能提问的另一个问题是 “它们的长处是什么?”。如果您没有头绪,或者一个项目非常适合使用 shell 命令,但不知道如何使用,那么我在这里提供一些见解。如果您正在编写一个提供各种备份或文件传输功能的应用程序,您可以选择使用 shell_exec() 或这里提供的其他命令之一运行 rsync 支持的 PHP shell脚本。您可以编写 PHP shell脚本使其包含必要的 rsync 命令,然后使用 passthru() 根据用户的命令或 cron 作业执行它。
例如,一位用户在您的应用程序中有适当的权限(比如管理员权限),他想将 50 个 PDF 文件从一个服务器发送到另一个服务器。那么,该用户需要在应用程序中导航到正确的位置,单击 Transfer,选择需要发送的 PDF,然后单击 Submit。在这个过程中,该表单应该有一个 PHP 脚本,它使用返回选项变量通过 passthru() 运行 rsync 脚本,这样您就知道是否发生问题,如下所示。
清单 1. 通过 passthru() 运行 rsync 脚本的示例 PHP 脚本
代码如下:
<?php
passthru('xfer_rsync.sh',$returnvalue);
if ($returnvalue != 0){
//we have a problem!
//add error code here
}else{
//we are okay
//redirect to some other page
}
?>
如果您的应用程序需要列出进程或文件,或关于这些进程或文件的数据,您可以使用本文总结的命令之一轻松实现这个目的。例如,一个简单的 grep 命令能够帮助您找到匹配特定搜索条件的文件。将它与 exec() 命令一起使用可以将结果保存到一个数组中,这允许您构建一个 HTML 表或表单,它们又进一步允许您运行其他命令。
到目前为止,我讨论了用户生成的事件 —— 用户只要按下按钮或单击链接,PHP 就运行相应的脚本。您还可以将独立的 PHP 脚本和 cron 或其他日程安排程序一起使用,从而实现一些有趣的效果。例如,如果您一个备份脚本,您可以通过 cron 运行它,或者将它打包到 PHP 脚本后在运行。
为什么要这样做?这似乎是多余的,不是吗?不是这样的 —— 您需要这样考虑,您可以通过 exec() 或 passthru() 运行备份脚本,然后根据返回代码执行一些行为。如果出现错误,您可以将其记录到错误日志或数据库中,或发送一封警告电子邮件。如果脚本成功,您可以将原始的输出转储到数据库(例如,rsync 有一个详尽(verbose)模式,对随后诊断问题十分有用)。
安全
我们在这里简要讨论一下安全性:如果您接受用户输入并将信息传递到 shell,那么最好过滤用户输入。删除您认为有害的命令和不允许的内容,比如 sudo(作为超级用户运行)或 rm(删除)。事实上,您可能不希望用户发送开放的请求,而是让他们从列表中选择。
例如,您运行一个接受文件列表作为参数的传输程序,您应该通过一系列复选框列出所有文件。用户可以选择和取消选择文件,并通过单击 Submit 激活 rsync shell 脚本。用户不能自己输入文件或使用正则表达式。
本文从两个方面介绍的PHP shell脚本的用法,希望能给你带来帮助。
[2]php tp验证表单与自动填充函数代码
来源: 互联网 发布时间: 2013-11-30
代码如下:
<?php
class FormModel extends Model {
// 自动验证设置
/*
* 一:自动验证
自动验证的定义是这样的:array(field,rule,message,condition,type,when,params)
field:代表是数据库的字段名;
rule:代表是规则;
它的值要看type的类型而定;
如果是condition 是function(callback),rule是一个函数名
condition 是in,rule是一个数组
message:代表是消息提示;
condition:代表是验证条件
它的值:
self::MUST_VALIDATE 表示必须验证1
self::VALUE_VAILIDATE 表示不为空的时候验证2
self::EXISTS_VAILIDATE 表示表单存在的字段验证(默认)0
type:代表验证类型
它的值:
function(callback) 表示验证的是调用一个Model中的函数
confirm 表示验证两个字段是否相同
in 是否在某个数组范围之内
equal 验证是否等于某个值
unique 验证某个值是否唯一
regex 使用正则表达式(默认)
when:代表是是否需要执行验证
它的值:
self::INSERT_STATUS add操作的时候验证
self::UPDATE_STATUS update操作的时候验证
self::ALL_STATUS (不用说了吧)
params:参数(具体什么我现在还不太清楚)
* */
protected $_validate = array(
array('title','require','标题必须!',1),//必须验证
array('email','email','邮箱格式错误!',2),//不为空时验证
array('content','require','内容必须'),
array('title','','标题已经存在',0,'unique',self::MODEL_INSERT),
);
// 自动填充设置
//array(填充字段,填充内容,填充条件,附加规则)
/* 填充条件包括:
ADD 新增数据的时候处理(默认方式) self::MODEL_INSERT add操作的时候填充
Update 更新数据的时候处理 self::MODEL_UPDATE udate操作的时候填充
ALL 所有情况下都进行处理 self::MODEL_BOTH (不用说了)
附加规则包括:
function 使用函数
callback 回调方法
field 用其它字段填充
string 字符串(默认方式)
*/
protected $_auto = array(
array('status','1',self::MODEL_INSERT),
array('create_time','time',self::MODEL_INSERT,'function'),
);
}
?>
[3]PHP 设计模式之观察者模式介绍
来源: 互联网 发布时间: 2013-11-30
介绍
观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新!
设计原则
在观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题。——找出程序中会变化的方面,然后将其和固定不变的方面相分离!
主题和观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点! ——针对接口编程,不针对实现编程!
。
观察者模式利用“组合”将许多观察者组合进主题中。对象(观察者——主题)之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式产生的。 ——多用组合,少用继承!
代码
<?php
/**
* 观察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部统一访问 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
//下面是测试代码
?
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();
总结
当新对象要填入的时候,只需要在主题(又叫可观察者)中进行注册(注册方式很多,你也可以在构造的时候,或者框架访问的接口中进行注册),然后实现代码直接在新对象的接口中进行。这降低了主题对象和观察者对象的耦合度。
好的设计模式不会直接进入你的代码中,而是进入你的大脑中。
观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新!
设计原则
在观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题。——找出程序中会变化的方面,然后将其和固定不变的方面相分离!
主题和观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点! ——针对接口编程,不针对实现编程!
。
观察者模式利用“组合”将许多观察者组合进主题中。对象(观察者——主题)之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式产生的。 ——多用组合,少用继承!
代码
代码如下:
<?php
/**
* 观察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部统一访问 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
//下面是测试代码
?
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();
总结
当新对象要填入的时候,只需要在主题(又叫可观察者)中进行注册(注册方式很多,你也可以在构造的时候,或者框架访问的接口中进行注册),然后实现代码直接在新对象的接口中进行。这降低了主题对象和观察者对象的耦合度。
好的设计模式不会直接进入你的代码中,而是进入你的大脑中。
最新技术文章: