Entries by mickle

php中static关键字在类中的使用

static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。 static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法” 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。 static关键字可以用来修饰变量、方法。 不经过实例化,就可以直接访问类中static的属性和static的方法。 static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。 static的属性,在内存中只有一份,为所有的实例共用。 使用self:: 关键字访问当前类的静态成员。 一个类的所有实例,共用类中的静态属性。 也就是说,在内存中即使有多个实例,静态的属性也只有一份。 下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。 这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。 view plaincopy to clipboardprint?    静态属性直接调用 静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。 使用的方式是: 类名::静态属性名 view plaincopy to clipboardprint?    类没有创建,静态属性就可以直接使用。那静态属性在什么时候在内存中被创建? 在PHP中没有看到相关的资料。引用Java中的概念,来解释应该也具有通用性。静态属性和方法,在类被调用时创建。 静态方法 静态方法不需要所在类被实例化就可以直接使用。 使用的方式是类名::静态方法名 下面我们继续写这个Math类,用来进行数学计算。我们设计一个方法用来算出其中的最大值。既然是数学运算,我们也没有必要去实例化这个类,如果这个方法可以拿过来就用就方便多了。我们这只是为了演示static方法而设计的这个类。在PHP提供了 max() 函数比较数值。 view plaincopy to clipboardprint?   静态方法如何调用静态方法 第一个例子,一个静态方法调用其它静态方法时,使用self:: view plaincopy to clipboardprint? 静态方法调用静态属性 使用self:: 调用本类的静态属性。 view […]

sql注入攻击原理及防范

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。 根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解 ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let’s Go… 入 门 篇 如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。 第一节、SQL注入原理 以下我们从一个网站www.mytest.com开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。 在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:http://www.mytest.com/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示: Microsoft JET Database Engine 错误 ‘80040e14’ 字符串的语法错误 在查询表达式 ‘ID=49” 中。 /showdetail.asp,行8 从这个错误提示我们能看出下面几点: 1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。 2. 程序没有判断客户端提交的数据是否符合程序要求。 3. 该SQL语句所查询的表中有一名为ID的字段。 从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。 第二节、判断能否进行SQL注入 看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗? 其实,这并不是最好的方法,为什么呢? 首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。 其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的   那么,什么样的测试方法才是比较准确呢?答案如下: ① http://www.mytest.com/showdetail.asp?id=49 ② http://www.mytest.com/showdetail.asp?id=49 ;and 1=1 ③ http://www.mytest.com/showdetail.asp?id=49 ;and 1=2 这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了: […]

php中常用字符串处理函数集锦

在平时工作中,对字符串的处理相当的频繁,经常会用到php中的内置函数,在网上看到一篇文章把它大概的罗列出来了,我觉得很不错,拿出来和大家分享,希望在以后的学习和工作中对大家起到帮助。 addcslashes — 为字符串里面的部分字符添加反斜线转义字符 addslashes — 用指定的方式对字符串里面的字符进行转义 bin2hex — 将二进制数据转换成十六进制表示 chop — rtrim() 的别名函数 chr — 返回一个字符的ASCII码 chunk_split — 按一定的字符长度将字符串分割成小块 convert_cyr_string — 将斯拉夫语字符转换为别的字符 convert_uudecode — 解密一个字符串 convert_uuencode — 加密一个字符串 count_chars — 返回一个字符串里面的字符使用信息 crc32 — 计算一个字符串的crc32多项式 crypt — 单向散列加密函数 echo — 用以显示一些内容 explode — 将一个字符串用分割符转变为一数组形式 fprintf — 按照要求对数据进行返回,并直接写入文档流 get_html_translation_table — 返回可以转换的HTML实体 hebrev — 将Hebrew编码的字符串转换为可视的文本 hebrevc — […]

php中memcache的使用

一、memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下,memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序。 二、memcached 安装 首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz。除此之外,memcached 用到了 libevent,我下载的是 libevent-1.1a.tar.gz。 接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装: # tar -xzf libevent-1.1a.tar.gz # cd libevent-1.1a # ./configure –prefix=/usr # make # make install # cd .. # tar -xzf memcached-1.1.12.tar.gz # cd memcached-1.1.12 # ./configure –prefix=/usr # make # make […]

magento学习笔记(四)

正确的设置网页的h1,h2,对SEO是很有帮助的,一般的原则是一个页面只有一个h1,而h2,h3的个数不限,h1 相当于主题思想,h2,h3是围绕h1的分支内容。 那在Magento中如何最好的设置h1,h2呢。 在Magento1.4的默认模板这方面还是做的比较到位的,大家可以参考一下,如果是定制模板h1,h2的设置可以需要做些调整,最佳设置如下: 首页: 网站logo(网站名称) 是h1, 首页如果有产品,产品名称是 h2。 产品列表页:分类名称用 h1, 产品名称 h2,网站logo无标签。 产品细节页:产品名称h1,网站logo无标签。 具体要修改的文件: 要修改的几个文件是: 首页:Magetno模板目录/template/catalog/list.phtml 产品列表页:Magetno模板目录/template/catalog/category/view.phtml,Magetno模板录/template/catalog/product/list.phtml 产品详细页:Magetno模板目录/template/catalog/product/view.phtml 当然css文件要做相应的调整,以保持原来网站的风格样式。 另外,如果是要调整1.3版本的网站,需要核心代码做些调整,以便可以设置logo的h1只在首页出现

magento学习笔记(三)

认识magento中xml文件与phtml文件的关系,了解这两种magento结构文件的联系,是magento模板制作的最基础知识。 本例以magento  的base下的default模板为例 进入正题,我来说说xml可以做到,但是phtml做不到的事情。 1.定义页面结构(1栏,2栏,3栏) .xml中定义页面结构,.phtml默认没有此功能。在magento中默认的页面结构有1栏结构,2栏结构,3栏结构。这个页面结构就是在xml文件中定义的。 如在:appdesignfrontendbasedefaultlayoutpage.xml 中   <default translate=”label” module=”page”>         <label>All Pages</label>         <block type=”page/html” name=”root” output=”toHtml” template=”page/3columns.phtml”> 这个template=”page/3columns.phtml”就是在定义所有的页面默认使用3栏结构。 在:appdesignfrontendbasedefaultlayoutcatalog.xml        <catalog_product_view translate=”label”>         <label>Catalog Product View (Any)</label>         <!– Mage_Catalog –>         <reference name=”root”>             <action method=”setTemplate”><template>page/2columns-right.phtml</template></action>         </reference> 在这个文件里面<template>page/2columns-right.phtml</template>就是在跟新<catalog_product_view translate=”label”>的页面结构,就是将详细产品页更新为2栏-右栏结构,不再使用page.xml文件中所设置的3栏结构。 所以大家想改某个页面的结构直接将这些定义结构的地方代码换掉就行了。 随便打开一个.xml文件,搜下column这个关键字。有的话,然后在看下外层的xml标签,基本就知道是在设置哪个页面的结构了,这就是一个快速学习magento模板制作的途径。 顺便说一下:对于magento开发者来说,在这些地方改下页面结构是必要的,但是对于使用者,magento后台的大多数编辑页面中,都是设置layout的地方,对于使用者,可以在这些地方设置你的页面结构。 2.编辑左右栏的内容,中间栏的内容 magento左右栏怎么添加block?这个是大多数magento模板初学者会遇到的问题,答案就是,在xml添加。在xml中声明添加到左栏还是右栏,添加使用哪个.phtml文件。 看下面的siderbar magento边栏block 此广告图片就是在xml中添加的。 文件路径:appdesignfrontendbasedefaultlayoutcatalog.xml   <reference name=”right”>           <block type=”catalog/product_compare_sidebar” before=”cart_sidebar” name=”catalog.compare.sidebar” template=”catalog/product/compare/sidebar.phtml”/> […]

magento学习笔记(二)

magento模板开发过程中比较让人迷惑的就是magento的结构控制,在这《magento模板中XML与phtml关系》一系列的文章中,我将对此进行入门的讲解。 在magento官网模板设计教程中已经初步讲解了模版中.xml与.phtml的关系。 模板文件分别存放于app和skin文件夹。app文件夹存放的是模板的结构文件。skin文件夹存放的是模版的css信息,也就是样式文件。 app文件夹下的模板文件夹的结构如下图 magento的app文件夹下的模版文件结构 layout文件夹存放的是此模板的.xml文件(也就是模版的结构文件),template是.phtml模板文件。 在layout的任何一个.xml文件中我们可以看到 Page Header top-container 等标签,这些都是在控制magento各个页面的结构。 在template中的.phtml文件中我们可以看到 getChildHtml(‘header’) ?> …….. 这样的代码,可以看到html 并且声明一个css的class,这样在.phtml中就是在控制模板的样式。定义了css的class那么在skin的css文件就有用了。getChildHtml(‘header’)是在输出header这个block也就是说,在.phtml文件中我们对于XML文件中声明好的block进行输出,想输出在哪个div里面就在哪个div中使用getChildHtml(‘header’),也就是说phtml在对xml定义的结构进行进一步的细化,并且让css加入到模板的构建中来。 不要迷惑,看下总结 总结: 1.xml与.phtml同样都在控制模板的结构,但是要先在.xml中声明下,才能在.phtml中使用getChildHtml( )函数输出摸一个结构模块。也就是xml在先,phtml在后。 2. .xml文件与phtml同样控制文件结构,但是phtml中使用html的控制结构标签如 ,并且可以写上css的类。.phtml就是一个php文件。它对模板的结构使用div等html标签进行更详细的排版,并且引入css修饰样式。

magento 学习笔记(一)

Magento 是一套专业开源的电子商务系统。Magento基于zend framework,设计得非常灵活,具有模块化架构体系和丰富的功能,易于与第三方应用系统无缝集成,其面向企业级应用,可处理各方面的需求,以及建设一个多种用途和适用面的电子商务网站,包括购物、航运、产品评论等等,充分利用开源的特性,提供代码库的开发,非常规范的标准,易于与第三方应用系统无缝集成。 Magento是免费下载的。可以到http://www.magentocommerce.com/download下载。Magento官方网站提供两种Magento下载方式,一种是Installer的方式,就是只包含必要的文件的Installer安装器再通过它下载Magento文件并进行完全安装。另一种方式则是直接下载完整的Magento安装包进行安装。两种方式都提供了不同的压缩格式,有.zip,.tar.gz等等,你可以根据自己的需要进行选择。提醒:如果你是一个开发者,并且熟悉SVN的话,你可以通过SVN来checkout最新的版本。要了解更多请看:http://www.magentocommerce.com/svn。当你成功下载完Magento之后,接下来就是在你的服务器上面安装Magento了。 安装和配置magento其实很简单,按照着安装时的每个步骤进行选择或安装就可以顺利安装。 这里介绍完整的安装包的安装方法。 1. 下载 .zip or .tar.gz 文件并且解压缩 2. 上传到你的web空间或者本地测试空间,注意要用二进制方式 3. 为magento创建数据库和用户名和密码 4. 请确认 app/etc , var , 和 media 这几个文件夹是可写的. * 比如文件夹权限为755,在linux下 5. 如果你的服务器原来安装的是PHP4,那你需要PHP5的CGI二进制版本。请参考下面的PHP5 CGI Setup介绍 6. 如果你把magento装到了 http://www.example.com/magento/, 那输入这个链接开始magento安装向导 7. 主要就是输入数据库连接的参数,和第3步设置的一样,输入数据库用户名和密码等 8. 到这里就完成啦,你可以看到进入后台和前台的链接。 安装完Magento之后,你会可以看到Magento的前台,如果你想进入后台,可以通过域名后加admin的方式访问后台,例如:http://www.example.com/admin。在登陆页面中,你输入安装时设置的用户名和密码登陆后台。

HTTP下载文件名乱码解决方案

HTTP下载文件名乱码解决方案 由于目前国际字符编码还未真正意义上的统一,编码标准多元化,在日常处理文件上传下载的时候,造成我们在处理文件名的时候会不可避免的出现乱码的情况。针对这种情况, 我们想到了一种解决方案,特此拿出来和各位童鞋们分享一下。 先贴一段代码,此为文件下载的类。 class Trs_Utils_Downloader { private $file=null; private $fileRealPath =””; private $fileName = “”; private $fileExist =false; private $readBytes = 0; private $mode = “r”; public function __destruct() { if(null!==$this->file){ fclose($this->file); } } /** * * @param $fileRealPath 文件的绝对路径 * @param $fileName 真实文件名 * @param $mode 文件的读写模式 * @param $readBytes 每次读入缓冲区的字节数,默认1024 bytes */ […]

Zend framework 集成fckeditor

最近由于项目需要,我尝试把fckeditor集成到zend framework中去。相对于常规的集成方法,ZF中要麻烦一点,在次我们要做的是把Fckeditor写成一个Zend Framework 插件形式.,这样就可以让整个站点调用到FCK,这样无论是前台和后台都行.. 1、下载最新的fckeditor 编辑器。 2、php结合zf环境是搭建完好且能正常运行。 总共步骤有5步。 第一步:新建Fckeditor.php类,即是以Fckeditor下的fckeditor_php5.php为基础的。 第二步:把fckeditor与zf整合 第三步:在zf控制层(controller)调用fckeditor插件 第四步:在视图中显示Fckeditor编辑器 第一步:新建Fckeditor.php类 最重要的一点就出来了..我把Fckeditor里面的fckeditor_php5.php这个文件写成如下插件形式: 名称就是./Library/Common/Plugin/Fckeditor.php 大致代码如下: InstanceName = $instanceName ; $this->BasePath = ‘/fckeditor/’ ; $this->Width = ‘100%’ ; $this->Height = ‘200’ ; $this->ToolbarSet = ‘Default’ ; $this->Value = ” ; $this->Config = array() ; } public function Create() { echo $this->CreateHtml() ; } //……. //后面的代码是和FCK里fckeditor_php5.php文件一样的. […]