设为首页 收藏本站
查看: 1600|回复: 0

[经验分享] PHP过滤器

[复制链接]

尚未签到

发表于 2015-8-23 14:42:18 | 显示全部楼层 |阅读模式
  在java中实现过滤器,很简单,只需要在web.xml中配置如:

<filter>
<filter-name>iSpaceAuth</filter-name>
<filter-class>
com.skylark.console.servlet.ISpaceLoginFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>iSpaceAuth</filter-name>
<url-pattern>/console/*</url-pattern>
</filter-mapping>
  要想在PHP中实现一个类似的功能,因为我的需求是这样的,有个开发好了的OA系统,要集成到我们的应用中,OA要对外来的数据进行过滤,在给自己处理。这样就等于我必须写一个Php文件进行过滤,然后OA系统的文件都必须include该文件。这多恐怖,要重复的改好多代码,而且,代码的耦合度相当的高。
  查找PHP手册发现了有一些过滤的东西,
  一、过滤函数
  filter_has_var — Checks if variable of specified type exists 检查变量是否是指定的类型
  filter_id — Returns the filter ID belonging to a named filter 通过过滤器名得到过滤器的ID
  filter_input_array — Gets external variables and optionally filters them
  filter_input — Gets a specific external variable by name and optionally filters it
  filter_list — Returns a list of all supported filters 返回支持的过滤器列表
  filter_var_array — Gets multiple variables and optionally filters them 得到多个变量的值,每个变量选择一个过滤器
  filter_var — Filters a variable with a specified filter 用指定的过滤器过滤变量
  以前没使用过这个东东,今天试用下。


<?php
function convertSpace($string){
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));
?>
  
  会输出 Peter is a great guy!
  发现PHP提供的过滤器只是对输入数据的过滤。不能像java一样,对整个项目访问进行过滤。java的过
  滤器还能指定过滤规则。看到这个规则让我想起了apache有个rewrite_rules的模块。让所有的访问都
  重定向到一个文件,那个文件就相当于一个过滤器了。我个那个文件取名filter
  


RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*)host [NC]
RewriteRule ^(.*) filter.php  
  虽然这样是可以实现。但是文件的组织方式必须是有规则的,就像单入口访问一样的。通过在filter.php通过new一个访问对象,
  调用一个方法来访问页面。
  单入口的代码


<?php
require_once './config.php';

$act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : 'index';
$ctl = isset($_REQUEST['ctl']) ? trim($_REQUEST['ctl']) : 'default';
$ctl = strtolower($ctl);
$act = strtolower($act);
require_once ROOTPATH.'/'.'lib'.'/controller/'.$ctl.'.php';
$ctl = ucfirst($ctl).'Controller';
$act = $act.'Action';
$app = new $ctl($act);
  但是该OA实现的不是单入口访问。这样的话访问的页面就一直是filter.php跳转之后又跳回来了。

  最后在发现在PHP的配置文件php.ini中可以配置 auto_prepend_file,该值的作用是在每个文件访问
  之前include该文件。这样include的文件就相当一个过滤器了。哈哈!该配置文件要重启服务啊,有点
  郁闷,那有没有改了之后不用重启服务的方法呢?当然有了,那就是采用.htaccess文件了。配置如
  下。


RewriteEngine on
php_value auto_prepend_file "D:/web/htdocs/demo1/filter.php"  不过这样有个缺点就是,当访问量大的时候,性能会受到影响。而直接在php.ini文件中改得花就不用 会了。还有个优点就是如果把.htaccess文件某个目录,只对该目录有效。那么在web目录下不是所有 的项目都会添加该文件。 下面我们来测试下。我建个项目叫demo该项目下的文件有
DSC0000.png
  
  
  
  index.php


<?php
echo "index.php \n";
  filter.php 代码


<?php
echo 'filter'."\n";
$fileName = pathinfo($_SERVER['SCRIPT_FILENAME']);

if($fileName['filename'] == 'index')
{
header("location:".'./test.php');
}
  test.php


<?php
echo 'test';

  我们在url 中输入 http://localhost/demo/index.php
  结果是:filter test
  
  虽然实现了但是还是java的相差太多了.java的过滤器可以实现多个,这个就不行了。还可以指定哪些访
  问要过滤,这个就不行了。
  
  附:
  1、apache  rewrite模块的启用方法。
  在http.conf文件中找到LoadModule rewrite_module modules/mod_rewrite.so把前面的# 删除。
  



  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103043-1-1.html 上篇帖子: 简单,方便,功能全的php分页类 下篇帖子: ZendStudio php WebService制作一:简单WebService Demo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表