燕之庐网站建设 - 优质网站设计公司

Posts Tagged ‘pear’

php, 产业新闻

2009/12/28

PHP100编程安全性小结

Tags: ,

规则 1:绝不要信任外部数据或输入

关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。

对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。

规则 2:禁用那些使安全性难以实施的 PHP 设置

已经知道了不能信任用户输入,还应该知道不应该信任机器上配置 PHP 的方式。例如,要确保禁用 register_globals。如果启用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替换同名的 GET 或 POST 字符串。通过禁用这个设置,PHP 强迫您在正确的名称空间中引用正确的变量。要使用来自表单 POST 的变量,应该引用 $_POST['variable']。这样就不会将这个特定变量误会成 cookie、会话或 GET 变量。

要 检查的第二个设置是错误报告级别。在开发期间,希望获得尽可能多的错误报告,但是在交付项目时,希望将错误记录到日志文件中,而不是显示在屏幕上。为什么 呢?因为恶意的黑客会使用错误报告信息(比如 SQL 错误)来猜测应用程序正在做什么。这种侦察可以帮助黑客突破应用程序。为了堵住这个漏洞,需要编辑 php.ini 文件,为 error_log 条目提供合适的目的地,并将 display_errors 设置为 Off。

规则 3:如果不能理解它,就不能保护它

一些开发人员使用奇怪的语法,或者将语句组织得很紧凑,形成简短但是含义模糊的代码。这种方式可能效率高,但是如果您不理解代码正在做什么,那么就无法决定如何保护它。

规则 4:“纵深防御” 是新的法宝

即使使用 PHP regex 来确保 GET 变量完全是数字的,仍然可以采取措施确保 SQL 查询使用转义的用户输入。

纵深防御不只是一种好思想,它可以确保您不会陷入严重的麻烦。

网站建设

php

2009/11/26

PEAR项目发布十个稳定包 PHP共享类库升级

Tags: , ,

上周PEAR项目发布了十个稳定的包。这其中包括能标记PHP代 码和检查代码是否符合标准的PHP_CodeSniffer 0.2.0,能将类似于re2c格式的lexer文件转换为PHP5lexer格式的PHP_LexerGenerator 0.3.0,登录单元功能的Log 1.9.9 ,有多种发邮件接口的类以及其它十个包。
下面是一个详细列表:
PHP_CodeSniffer 0.2.0: 它能对PHP5脚本进行标记,并检查代码是否符合编码标准。
PHP_LexerGenerator 0.3.0: 使用一个解析器来将类似于re2c格式的lexer文件转换为PHP5 lexer格式。
PHP_ParserGenerator 0.1.2: 一个格式转换功能的类。
Selenium 0.1.5: 这是一个Selenium Rc 的PHP 客户。
Log 1.9.9: 它提供了一个出色的登录系统。
Mail 1.1.14: 它提供了一个基于PEAR库有多种接口的邮件发送类。
Text_Wiki 1.2.0RC1: 它可以将Wiki格式或BBCode格式转换为XHTML 、LateX 或纯文本格式。
HTML_QuickForm 3.2.7:它提供了一个创建,检查和处理FORM的功能
Validate_AU 0.1.0: 这是一个针对Australia的数据检查包
HTML_Menu 2.1.3: 它可以生成多样的HTML菜单

网站建设

php

2009/11/14

PEAR的安装

Tags:

go-pear.org
go-pear.org是一个WEB站点,这个站点很特殊,里面就只有一个文件,只一个单独的PHP脚本,你可以下载并且执行它。这个文件将执行最近的稳定发行包。go-pear是交互平台,可以让你你在你的服务器上面用命令行来获得PEAR
PHP发行包里面有一个特殊的PEAR安装包,另一方面go-pear提供了一个最新稳定版的PEAR发行包。当然go-pear不知道你的目录结构,便可以计算出,来完成PEAR的安装过程。

前提:
因为go-pear是用PHP写的一个脚本,因此你必须在服务器上有一个PHPCGICLI程序来执行这个脚本。默认情况下CLI程序已经随着PHP模块安装了。试着运行php v来看一下是否可用:

PHP 5.0.0 (cli), Copyright (c) 1997-2004 The PHP GroupZend Engine v2.0, Copyright (c) 1998-2004 Zend Technologies

注:在我的Windows平台上PHP5.1.6上面要使用php –v来执行这个命令,下面有好多命令一样。
默认情况下php命令行程序在UNIX下安装于/usr/local/binWindows下安装于C:\php。在WindowsPHPCLI版程序也许叫做php-cli

得到PEAR
如果你的PHP安装包没有包含PEAR,你可以使用go-pear做为通程序来获得PEAR。前提是你需要一个已安装的GLICGI版本的PHP
你可以下载go-pear脚本并且执行它,像下面这样在命令行中执行:
$lynx sourcehttp://go-pear.org| php
这个脚本从http://go-pear.org获得脚本内容,并由PHP来执行。
如果你的系统上lynx无效,可以用其它的方法来直接获得go-pear:
$wget O-http://go-pear.org| php 使用GNUS wget
fetch ohttp://go-pear.org|php 使用fetchFreeBSD
GET http:/go-pear.org | php 使用Perl LWPGET工具。
Windows平台,你可以使用PHPURL流来获得,这个要求url_incluesphp.ini中没有被禁用。
C:\>php-cli r “include(‘http://go-pear.org’);”
还有一种就是直接用浏览器打开http://go-pear.org,把首页另存为go-pear.php然后在命令行中运行。
C:\php go-pear.php

输出也许像下面这样:

Welcome to go-pear!



Go-pear will install the ‘pear’ command and all the files needed by


it. This command is your tool for PEAR installation and maintenance.


Go-pear also lets you download and install the PEAR packages bundled


with PHP: DB, Net_Socket, Net_SMTP, Mail, XML_Parser, PHPUnit.


If you wish to abort, press Control-C now, or press Enter to continue:

注:在我的php5.1.6环境中,有一个c:\php下有go-pear.bat我直接运行,出现选择systemlocal直接回车就行了。
按回车继续,出现下面的信息:

HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter fornone:

输入代理信息,如果直接上网,直接按回车就行了。
如果设置了HTTP代码环境,go-pear将检查你的http_proxy环境变量,并使用你指定的HTTPproxy来下载PEAR包,如果不是,只需要直接回车就可以了。
现在,到了最关键的地方:

Below is a suggested file layout for your new PEAR installation. Tochange individual locations, type the number in front of thedirectory. Type ‘all’ to change all of then, or simply press Enter toaccept these locations.
1.  Installation prefix          :/usr/local
2. Binaries directory : $prefix/bin
3. PHP code directory : $prefix/share/pear
4.  Documentation base directory : $php_dir/docs
5.  Data base directory          : $php_dir/data
6.  Tests base directory         : $php_dir/tests1-
6, ‘all’ or Enter to continue:

每一个设置都会设定一个值(prefix,bin_dir,php_dir,doc_dir,data_dir,test_dir )
下面是这些设置的说明:
Installation prefix 你安装PEAR的根目录。下面的五个选项将使用它作为根目录。
Binaries directory. 程序和PEAR包中PHP脚本安装的地方。pear将在这里执行。记得要把这个路径加到人的PATH环境中去。
PHP code directory   PHP代码安装位置。这个路径必须在php.iniinclude_path中包含。
Documentation base directory文档的基本目录。,默认情况下是$php_dir/doc,每一个包的文档做为$doc_dr/Package/file来安装。
Database directory    PEAR安装程序保存数据文件的地方。
Tests base directory 包旧的测试脚本安装的地方。包的名字也添加到这个路径。

当设置完这些路径,按回车确定:

The following PEAR packages are bundled with PHP: DB, Net_Socket,Net_SMTP,Mail, XML_Parser, PHPUnit2.Would you like to install these as well? [Y/n] :

根据配置,go-paer决定在哪里安装包,直接按回车继续:

Loading zlib: ok
Downloading package: PEAR………….ok
Downloading package: Archive_Tar……ok
Downloading package: Console_Getopt….ok
Downloading package: XML_RPC……….ok
Bootstrapping: PEAR……………….(remote) ok
Bootstrapping: Archive_Tar…………(remote) ok
Bootstrapping: Console_Getopt………(remote) ok
Downloading package: DB……………ok
Downloading package: Net_Socket…….ok
Downloading package: Net_SMTP………ok
Downloading package: Mail………….ok
Downloading package: XML_Parser…….ok
Downloading package: PHPUnit2………ok
Extracting installer………………ok
install ok:
PEAR 1.3.1install ok:
Archive_Tar 1.2install ok:
Console_Getopt 1.2install ok:
XML_RPC 1.1.0install ok:
DB 1.6.4install ok:
Net_Socket 1.0.2install ok:
Net_SMTP 1.2.6install ok:
Mail 1.1.3install ok:
XML_Parser 1.2.0install ok:
PHPUnit2 2.0.0beta2The ‘pear’ command is now at your service at /usr/local/bin/pear

至此PEAR也就安装成功

说明一下:我自己用的是Windows系统,PHP是5.1.6
在我的PHP目录下只有一个go-pear.bat,还有一个PEAR目录,里面有一个go-pear.phar(这个应该是就是书上说的go-pear.php)
我用php C:/php/pear/go-pear.phar,倒还真执行了,
其实直接执行go-pear.bat
会出选择system或local,这个好像是为了让选择PEAR的安装配置,好像是可以装多个
直接回车后就到配置PEAR的环境的地方了,估计这里是做一下确认吧
我的确认后就直接开始安装了
但安装完后DB,XML_parser等都没装上去

我是自己招待命令 pear install DB命令安装上去的

安装成功后会在C:/php目录下产生一个pear.bat,这个文件就是pear程序,好多操作都要通过这个程序来完成。

另外就是要修改php.ini中的include_path!1!!!!

php

PEAR版本号说明

Tags:

原文:PHP5 Power Programming Chapter 10 . Using PEAR
PEARPHP的官方开源类库, PHP Extension and Application Repository 的缩写。Pear在英文中是梨子的意思。PEAR将PHP程序开发过程中常用的功能编写成类库,涵盖页面呈面、数据库访问、文件操作、数据结构、缓存操 作、网络协议等许多方面,用户可以很方便地使用。PEAR的大部分Package采用LGPL、PHP、BSD许可证,可以自由地使用源码。关于PEAR 更详细的信息,请访问pear.php.net
不要重复发明轮子!”PEAR是为PHP代码的重用而开发的。使用PEAR可以大大提高PHP程序的开发效率。前人已经完成的工作,我们可以直接使用,不需要重复开发,更可以保证开发代码的质量。
PEAR概念
首先介绍一个PPEAR的一些概念,即packages , releasesversioning scheme

Packages
当你从PEAR安装一些东西,就得去下载和安装一些特殊的 发行包。每一包都包含下面的信息:
包名称 例如:HTML_QuickForm
概要,描述,和主页的URL
一个或多个的维护人员
License信息
许多发行版本
Pear包和其它包(如:LinuxRPM ,Debian包,System V UNIX PKG格式)是不一样的。一个最主要的区别是PEAR包是基于多个平台设计的,不是为了一种操作系统设计的,大部分PEAR包是平台无关性的,PEAR包可以安装在支持PHP的任何平台上,包括现在流行的类UNIX系统和微软的Windows,以及苹果的MacOS X.

Releases
PHP一样,PEAR的代码连同安装指令一起压缩到一个tar.gz或者zip文件中。PEAR包也同样是通过tar.gz(tgz)文件来发布的,里面包含了可以被PEAR安装程序读取的安装指令。
除了这个包的细节内容外,每一个发行包都包含:
版本号
文件列表和安装指令
发行版别(stable,beta ,alpha , devel ,或者snapshot)
在安装PEAR包时,默认是安装最近稳定的发行包,例如:

$ pear install XML_Parserdownloading XML_Parser-1.1.0.tgz …Starting to download XML_Parser-1.1.0.tgz (7,273 bytes)…..done: 7,273 bytesinstall ok: XML_Parser 1.1.0

通过执行命令:pear installXML_Parser,可以来安装最近的稳定的确良XML_Parser包,例子中的版本为 1.1。
为什么不把PEAR包做成像RPM包一样有多种原因,最主要的原因是,PHP是可以在各个平台上运行的,所以PEAR包也得要在各个平台上运行,这就意味 着要做一个RPM包在Windows下,Darwiin下都可以运,这个工作量是很大的,因此最佳的选择就是用PHP来执行安装程序来在各个平台上运行是 最方便的, 也是最简单的。

Version Nubmers
Version Number Format 版本号格式
PEAR一般由三个数字和一些特殊字符组成。语法如下:

Major [ . minor [ . patch ]] [ dev | a | b | RC | pl [ N ]]


下面是一些例子:

Version String


Major Version


Minor Version


Patch Level


ReleaseState


1


1





1b1


1




b1


1.0


1


0




1.0a1


1


0



a1


1.2.1


1


2


1



1.2.1dev


1


2


1


dev


2.0.0-dev


2


0


0


dev


1.2.1RC1


1


2


1


RC1


大多数PEAR包的版本号是由二个或三个数字加上一些发行状态部分,例如:”b1”
下面是一个发行状态的列表:

额外的


说明:


Dev


实验中,用于测试的发行版本


A


第一个版本,不是最终的,也许有许多BUG,并且很多API不是最终的.


B


第二个版本;API或多或少的稳定,但仍有一些BUG。.


RC


Release candidate;如果这个发行版没有问题,那么RC版将会再发行,成为最终的版本。


Pl


Patch level;在发行版本后做的一些修改,但不是经常的。



Comparing Version Numbers
有时候要对二个PEAR发行包进行比较以确定哪一个包比较新。例如,运行pear list-upgrades命令时,你安装的包的版本号将与pear.php.net上面的最新包的版本号进行比较,来确定哪一个是新的。

这个比较过程,首先是从major版本开始的,如果Amajor版本号大于B,那么AB新。如果major相同,那么minor版号将用同样的方法比较,但是如果只有B拥有minor版本号,那么B将比A新。如果ABminor版本号也相同,patch level将用同样的方法比较,如果patch level也相同,那么发行状态将决定结果。

比较extra段是很麻烦的事情,如果A没有extra段,而B有,不能自动的认为B是新的。dev , a ,b , RC,被认为比没有extra段旧,而pl (patch level )被认为是新的。

下面是一版本比较例子:

Version A


Version B


Newest?


Reason?


1.0


1.1


B


B有比较大的minor版本号


2.0


1.1


A


A有比较大的major版本号.


2.0.1


2.0


A


A有 patch level; B 没有.


2.0b1


2.0


B


A “beta”发行状态 “老于” 没有发行状态.


2.0RC1


2.0b1


A


RC比beta新在major.minor相同时.


1.0


1.0.0


B


这个很微妙,加了一个位让版本更新


php

2009/10/20

PEAR安装

Tags: , ,

今天在网上看了大量关于PEAR安装的文档,包括pear.php.net里的安装介绍,因为没有真对性的安装过程,看得我有些云里雾里,不知所以然。以下是我对pear安装的一些理解。

pear 文档里介绍说,只要你安装的是php 4.3.0以上的,并且没有使用“./configure flag –without-pear”选项,则pear的基础安装已经集成在系统里。其它pear包通过pear安装管理器进行安装,而安装管理器也已经在系统 里。但是,在windows下如果使用installer来安装php,并没有把pear安装到系统里。如果按照.zip 打包文件安装php,可以把pear直接解压到pear目录下,但也还没有安装到系统里。 另外关于pear包在windows里安装的文档已经过时。

因此,如果是按installer安装php的话,可以这样把pear安装到系统里(如果不是用php 的installer 安装php,可以参考以下内容):

  • 下载.zip的php安装文件,如:php-4.3.6-win32.zip。
  • 解开其中的两个目录cli 和pear及一个文件go-pear.bat到PHP所安装的目录。
  • 在命行下到php目录下,运行go-pear.bat(其内容其实为

    cliphp.exe -d output_buffering=0 PEARgo-pear.php )它会给你安装pear命令和安装一些pear包

  • 输入HTTP代理服务(如http://192.168.0.1:808),若无代理服务器则直接回车
  • 当前路径缺省正确的话就按回车,如果需修改则按个修改
  • 提示以下包会同php捆绑。选择Y
  • …提示使用本地包,提示安装成功
  • 如果在php.ini里没有include_path项,则使用pear有问题,提示是否修改php.ini。回答Y,提示修改了php.ini
  • 按回车,安装完毕,已经在php目录下创建pear.bat,以后可以使用,以及在pear目录下安装的一些pear包。可以使用php目录下的PEAR_NEV.reg方便修改环境变量,双击即可
  • pear list看包列表,pear help帮助文件

其实到现在才把pear安装到在Windows环境下的PHP里, include_path里有了PEAR所在目录。

另 外在linux机器上,象我的虚拟主机,没有提供shell权限,用phpinfo()查看,没有任何pear的信息。但不见它使用 “./configure flag –without-pear”选项。但不管怎样,PEAR包肯定是不能用的了,叫他们专门安装PEAR好象是不可能的事。如何在这样的虚似主机上使用 PEAR呢?以下是我的过程:

  • 下载所需要的包,如基础包PEAR-1.3.1.tgz和数据库包DB-1.6.2.tgz
  • 把包解压缩到本地
  • 在主机上的虚拟目录.htdoc或.www之外建立一个include文件夹。然后将刚才解压出来的文档上传到该目录(如DB包可以只上传DB.php和DB目录,PEAR包上传OS,PEAR,SCRIPT目录和PEAR.php文件)
  • 因为无法修改php.ini文件,所以我们在要使用包的脚本文件上加上:


    <?php
    ini_set
    ("include_path",'/var/.../includes/'.PATH_SEPARATOR.ini_get("include_path"
    ));
    ?>

  • 然后就可以使用PEAR了,如下:


    <?php
    require_once"DB.php"
    ;

    $mime= ...
    ?>

好了,现在在Windows和Linux上都可以使用PHP的PEAR了。