pear安装

如果你需要用php写一个系统,coding from scratch不是很现实,如果你追求效率,那么使用已经写好的php类绝对是不二的选择。我今天就安装了最牛逼玩意儿,pear!

啥是pear呢?

PEAR is short for “PHP Extension and Application Repository” and is pronounced just like the fruit. The purpose of PEAR is to provide:

  • A structured library of open-source code for PHP users
  • A system for code distribution and package maintenance
  • A standard style for code written in PHP, specified here
  • The PHP Extension Community Library (PECL), see more below
  • A web site, mailing lists and download mirrors to support the PHP/PEAR community

简单翻译一下PEAR是“PHP Extension and Application Reporsitory”的简称,也就是php扩展和程序库,发音和fruit一样,PEAR的目标是:

  • 成为php用户开源代码的类库
  • 一个用于包维护和代码分发的系统
  • php代码的一种标准风格
  • php扩展社区酷
  • 支持php/pear社区的一个网站、邮件列表、下载镜像

pear不光是类库,我觉得叫类库仓库比较适合,pear和linux系统上的apt或者yum类似,维护类库以及他们的依赖性。

我的环境是windows 7,php 5.2.10(D:\phpnow\php-5.2.10-Win32目录)

下载安装好php之后,需要手动运行go-pear.bat。

D:\phpnow\php-5.2.10-Win32>go-pear.bat

Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :

选择系统级别安装还是本地安装,默认system,直接回车

Below is a suggested file layout for your new PEAR installation.  To
change individual locations, type the number in front of the
directory.  Type ‘all’ to change all of them or simply press Enter to
accept these locations.  以下是默认的pear的临时、数据、配置、测试、执行目录的设置,默认回车

1. Installation base ($prefix)                   : D:\phpnow\php-5.2.10-Win32
2. Temporary directory for processing            : D:\phpnow\php-5.2.10-Win32\tmp
3. Temporary directory for downloads             : D:\phpnow\php-5.2.10-Win32\tmp
4. Binaries directory                            : D:\phpnow\php-5.2.10-Win32
5. PHP code directory ($php_dir)                 : D:\phpnow\php-5.2.10-Win32\pea
6. Documentation directory                       : D:\phpnow\php-5.2.10-Win32\doc
7. Data directory                                : D:\phpnow\php-5.2.10-Win32\dat
8. User-modifiable configuration files directory : D:\phpnow\php-5.2.10-Win32\cfg
9. Public Web Files directory                    : D:\phpnow\php-5.2.10-Win32\www
10. Tests directory                               : D:\phpnow\php-5.2.10-Win32\tes
11. Name of configuration file                    : C:\Windows\pear.ini
12. Path to CLI php.exe                           : D:\phpnow\php-5.2.10-Win32.

1-12, ‘all’ or Enter to continue:
Beginning install…
Configuration written to C:\Windows\pear.ini…(pear配置文件默认写入到这里
Initialized registry…
Preparing to install…
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Archive_Tar-1.3.2.tar…
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Console_Getopt-1.2.3.tar…
installing phar://go-pear.phar/PEAR/go-pear-tarballs/PEAR-1.7.2.tar…
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Structures_Graph-1.0.2.tar…
pear/PEAR can optionally use package “pear/XML_RPC” (version >= 1.4.0)
install ok: channel://pear.php.net/Archive_Tar-1.3.2
install ok: channel://pear.php.net/Console_Getopt-1.2.3
install ok: channel://pear.php.net/Structures_Graph-1.0.2
install ok: channel://pear.php.net/PEAR-1.7.2
PEAR: Optional feature webinstaller available (PEAR’s web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR’s PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR’s PHP-GTK2-based installer)
PEAR: To install optional features use “pear install pear/PEAR#featurename”

↑然后直接通过默认的channel:pear.php.net 开始直接下载安装pear了,这些包是默认初始化安装的,之后可以添加、删除、更新。

******************************************************************************
WARNING!  The include_path defined in the currently used php.ini does not
contain the PEAR PHP directory you just specified:
<D:\phpnow\php-5.2.10-Win32\pear>
If the specified directory is also not in the include_path used by
your scripts, you will have problems getting any PEAR packages working.

Current include path           : .;C:\php5\pear
Configured directory           : D:\phpnow\php-5.2.10-Win32\pear
Currently used php.ini (guess) :
Press Enter to continue:

接下来,需要将pear配置目录D:\phpnow\php-5.2.10-Win32\pear加入php.ini的include_path指令中。打开php.ini跳转到include_path,每个路径使用分号分隔,.表示当前目录,所以:

include_path = “.;d:\phpnow\php-5.2.10-Win32\PEAR”

然后重新启动apache,让php.ini的修改生效。

** WARNING! Old version found at D:\phpnow\php-5.2.10-Win32, please remove it or be sure to use the new d:\phpnow\php-5.2.10-win32\pear.bat command

The ‘pear’ command is now at your service at d:\phpnow\php-5.2.10-win32\pear.bat

然后可以通过pear.bat命令来对pear系统进行各种管理。
* WINDOWS ENVIRONMENT VARIABLES *
For convenience, a REG file is available under D:\phpnow\php-5.2.10-Win32\PEAR_ENV.reg .
This file creates ENV variables for the current user.

Double-click this file to add it to the current user registry.

运行php目录下的PEAR_ENV.reg将PEAR的各种目录加入环境变量中。

接下来需要测试pear时候已经安装成功,新建一个php文件,写入内容:

require_once 'System.php';
var_dump(class_exists('System'));

如果页面返回 bool(true) 表明安装成功。

一些常用的pear命令
安装包
  pear install packagename

下载包,但不安装
  pear download packagename
  pear download-all

安装已经下载的包
  pear install filename.tgz

列出channel里面所有的包
  pear remote-list

列出已经安装的包
  pear list

列出可升级的包
  pear list-upgrades

更新包
  pear upgrade packagename
  pear upgrade-all

删除包
  pear uninstall packagename

就大概说到这里,感兴趣的可以转移到官方网站了解详情,下载一个手册也够你看1年的了,囧。

主页:http://pear.php.net/

文档:http://pear.php.net/manual/

bugs:http://pear.php.net/bugs/

server 2003上跑asp超时问题

问题是,打开站点静态html文件和不需要连接oracle数据库的asp文件可以打开,有连数据库的文件无法打开。

尝试了各种方法,包括重新建立站点、重新建立应用池、分配权限等无果。

事件查看器报错是应用池超时。

最后

net stop w3svc

net start w3svc

搞定了。

太奇怪了。

Microsoft ScriptControl 控件使用指南

Microsoft ScriptControl 控件使用指南

随着动态网页的出现,脚本语言已经被越来越多的人认识、接受并撑握。在程序中加入对脚本的支持一方面可以最大限度的扩展程序的应用范围,另一方面也方便程序员利用现有脚本提供的一些特别的功能(如正则表达式等)。下面结合我个人的一点经验谈一谈这方面的应用。
很显然要自己去实现一个脚本解释器是不现实的。好在已经有了可以复用的组件,那就是Microsoft ScriptControl。这是一个ActiveX控件,随Windows2000一起发布,如果要在2000以前的Windows中使用则需要安装该控件(可以到MS的网站上找到)。

ScriptControl接口

属性名称 类型 备注
AllowUI BOOL 检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面元素不可见。
CodeObject Object 脚本暴露给宿主调用的对象。只读。
Modules Modules 宿主提供给脚本的组件库模块。只读。(COM组件通常都是以对象收集的形式向用户提供可以留给用户二次开发的对象集合,每一个收集即一个Modules)
Language String 设置或获取脚本引擎解释的语言,例如:VBScript、JScript。
Name String 脚本引擎的名称。只读。
Procedures Procedures 返回模块中定义的过程的集合
SitehWnd HWND 在脚本中显示UI的父窗口句柄
State Enum 设置或返回控件的状态,如果为0,控件只执行语句但不转发事件,为1则为加入的本控件接受的对象转发事件。
Timeout Long 控件的执行脚本的超时值,-1表示不超时
UseSafeSubset BOOL 设置或返回宿主程序是否关心安全。宿主程序的安全级别可以从此属性设置
Error Error 错误对象,发生错误时,此属性返回一个错误对象
方法名称 参数 功能
AddCode Code As String 往脚本引擎中加入要执行的脚本
AddObject Name As String, Object As Object, [AddMembers As Boolean = False] 往脚本引擎加入一个对象,以便在脚本中可以使用该对象提供的方法等。
Eval Expression As String 表达式求值
ExecuteStatement Statement As String 解释并执行脚本语句
Reset 丢弃所有的对象和代码,将State属性置0。
Run ProcedureName As String, ParamArray Parameters() As Variant 运行一个指定的过程
事件名称 功能
Error 有错误发生时激发该事件
TimeOut 执行过程超时时发生

一般使用方法

1、在程序中加入ScriptControl
2、定义一个ScriptControl的实例
3、调用AddCode等方法向脚本引擎中加入要执行的脚本。
4、调用Run执行要执行的脚本函数。

宿主与脚本的通讯

1、  宿主调用脚本:这个过程比较简单,只要调用Run就可以将参数传递到脚本。
2、  脚本调用宿主:在初始化过程中调用AddObject接口,将宿主的一个或多个对象暴露给脚本,这时就可以在脚本中调用宿主对象的方法。在VC++中这个对象不是普通的C++类,它必须支持自动化,在脚本中也只能调用对象中自动化接口(在VB中这个个程相对比较简单)。

脚本调试

任何人写的代码都不可能一次就很完美,但是脚本由于执行的位置特殊,调试方法也不一样。首先下载一个脚本调试器(我用的是Microsoft Script Debugger, 在MS网站有下载,另据说其它的如VJ++也可以),安装以后在菜单上没有启动菜单。

调试器的启动

在一般的高级语言中都可以方便的设置断点,但是在启动脚本调试器以前如何开始调试呢?在IE中脚本出错会自动提示是否调试,还可以在脚本中加入中断代码(VBScript: Stop JavaScript: debugger),但是在ScriptControl还需要修改一下注册表才可以,你需要将HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings下的JITDebug的值改为1(默认为0)
一个实例来源

asp解析json

第一种方法:在服务器上运行jscript

<script language="JScript" runat="Server">
function toObject(json) {
    eval("var o=" + json);
    return o;
}
</script>
<%
Dim json
json = "{'uid':'1','username':'abc','email':'123@163.com'}"
Set json = toObject(json)
Response.Write json.uid & "<br/>"
Response.Write json.username & "<br />"
Response.Write json.email & "<br />"
Set json = Nothing
%>

第二种方法:使用MSScriptControl.ScriptControl,和第一种方法类似,只是在不同的环境下执行js。

这里有一个例子和parser。 第三种方法:另外一个parser。 第四种方法:使用aspjson

asp中的option explicit

字面理解,option就是设置,explicit的意思:详述的,明确的;毫不隐瞒的,露骨的。 option explicit 表示所有的变量要先声明,再使用 如果使用,Option Explicit 语句必须写在模块的所有过程之前。 如果模块中使用了 Option Explicit,则必须使用 Dim、Private、Public、ReDim 或 Static 语句来显式声明所有的变量。如果使用了未声明的变量名在编译时间会出现错误。 使用 Option Explicit 可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。 一个简单的例子:

option explicit
dim dimedvar
myvar=10 '报错:变量未定义: 'myvar'
dimedvar="dimed" '没有报错

asp错误:错误的 ‘Next’

写了段代码

for i=0 to ubound(arr,2)
    if (arr(2,i)="日期") then
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','datetime', '100', '', ''))")
    else if (arr(2,i)="整数") then
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','number', '100', '', ''))")
    else
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','varchar', '100', '', ''))")
    end If
Next

结果报错

Microsoft VBScript 编译器错误 错误 ‘800a041f’ 错误的 ‘Next’ /report/report_add.asp,行 188 Next ^

搞了2个小时,查了文档无果(其实是因为没仔细看)

If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If

找到了答案 。把else if改成elseif,搞定。真是太粗心了。

IIS 超过响应缓冲区限制

IIS报错:

Response   对象   错误   ‘ASP   0251   :   80004005’
超过响应缓冲区限制
/test.asp,行   0
此   ASP   页的执行造成响应缓冲区超过其配置限制。

代码大概如下:

if request.querystring("table_name") <> "" then
    table_name=request.querystring("table_name")
    sql="SELECT f1,f2 FROM table_info WHERE table_name='"&table_name&"'"
    set rs=conn.execute(sql)
    do while not rs.eof or rs.bof
        response.write rs(0)
    loop
end if

因为知道是缓冲区大小超出限制,说明response.write输出了大量的数据。
默认情况下iis是开启了缓存的,所以要等到数据输出完毕然后才从内存将数据发送到浏览器输出。
所以我在代码前面加入:

response.buffer=false

来关闭缓存,也可以到iis ,网站 -> 启动缓存 -> 设置为false (IIS7)。
发现了大量同一个字段数据输出,才知道是没有写rs.movenext ,囧。
在loop上一行加上rs.movenext , 然后最好开启缓存,对性能绝对有提升。

ORACLE按照笔画、部首、拼音排序的实现

公司自定义表格过多,不好查找,需要按拼音查询,网上找到此文。

Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。
1、设置NLS_SORT参数值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
2、Session级别的设置,修改ORACLE字段的默认排序方式:
按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
按偏旁:alter session set nls_sort = NLS_SORT=SCHINESE_RADICAL_M;
3、语句级别设置排序方式:
按照笔划排序
select * from dept order by nlssort(name,’NLS_SORT=SCHINESE_STROKE_M’);
按照部首排序
select * from dept order by nlssort(name,’NLS_SORT=SCHINESE_RADICAL_M’);
按照拼音排序,此为系统的默认排序方式
select * from dept order by nlssort(name,’NLS_SORT=SCHINESE_PINYIN_M’);
4、修改系统参数(数据库所在操作系统):
set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh)
setenv NLS_SORT SCHINESE_RADICAL_M (csh)
HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注册表)
Oracle 官方说明

NLS_SORT NLS_SORT specifies the collating sequence for ORDER BY queries. NLS_COMP NLS_COMP specifies the collation behavior of the database session.

Property Description
Parameter type String
Syntax NLS_SORT = { BINARY | linguistic_definition }
Default value Derived from NLS_LANGUAGE
Modifiable ALTER SESSION
Range of values BINARY or any valid linguistic definition name
  • If the value is BINARY, then the collating sequence for ORDER BY queries is based on the numeric value of characters (a binary sort that requires less system overhead).
  • If the value is a named linguistic sort, sorting is based on the order of the defined linguistic sort. Most (but not all) languages supported by the NLS_LANGUAGE parameter also support a linguistic sort with the same name.Note:
    Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.

You must use the NLS_SORT operator with comparison operations if you want the linguistic sort behavior.

Property Description
Parameter type String
Syntax NLS_COMP = { BINARY | LINGUISTIC | ANSI }
Default value BINARY
Modifiable ALTER SESSION
Basic No

Values:

  • BINARY

Normally, comparisons in the WHERE clause and in PL/SQL blocks is binary unless you specify the NLSSORT function.

  • LINGUISTIC

Comparisons for all SQL operations in the WHERE clause and in PL/SQL blocks should use the linguistic sort specified in the NLS_SORT parameter. To improve the performance, you can also define a linguistic index on the column for which you want linguistic comparisons.

  • ANSI

A setting of ANSI is for backwards compatibility; in general, you should set NLS_COMP to LINGUISTIC
来源

忘记mysql root密码

备忘一下。
以windows平台、xampp 1.7.3\ MySQL 5.1.41 为例
停掉当前的mysqld服务,也可以直接杀死mysqld.exe进程。
开个cmd,运行 mysqld –safe-mode –skip-grant-tables
再开个cmd, 运行mysql , 因为当前进入的是安全模式,所以不需要任何密码,直接进。
mysql>update user set password=password('new_password') where user='root';
mysql>quit
关闭安全模式mysqld,正常启动mysql,root的密码已经修改为 new_password

乘今天太阳热huaoer,晒一晒,免得发霉。