IIS6.0+PHP5.3+MySQL+Zend Guard Loader(ZendOptimizer的升级版),discuz论坛 Notice: Undefined index解决方法

By | 2013年12月25日

首先我们去zend的官方网站去看看?http://www.zend.com/products/guard/downloads

 

可以明显看出,ZendOptimizer只支持到 php 5.2版本,而最新的 php5.3 则不支持。如果我们需要使用php5.3,则可以使用ZendOptimizer的升级版本,即Zend Guard Loader.

 

需要注意的是:Zend Guard Loader支持的服务器系统如下。

Linux x86

Linux x86-64

Windows x86 2000 / XP / 2003 / Vista

Mac OS X 10.4

如果是windows 系统,暂时只能是32位的 2003/vista.至于32位的win7是否支持,我暂时没有试过。

 

本文将详细讲解IIS 6.0+PHP 5.3.18 (因为是使用FastCgi模式,所以我们选择VC9 x86 Non Thread Safe)+Mysql 5.5.20+Zend Guard Loader (Runtime for PHP 5.3)(即ZendOptimizer的升级版)+phpMyAdmin 3.4.9环境配置过程。操作系统以Windows.Server.2003为例,其他系统仍可以参考。

 

第一步,下载相关软件

本次实例所使用的是系统是Windows.Server.2003 32位版本,因此以下软件都是下载对应这个版本的,使用其他版本的windows系统的同学请自行下载相对应软件。如链接失效,请直接在官方网站查找。

FastCGI 1.5 for IIS 6 and 5.1
官方下载网页:http://www.iis.net/download/FastCGI
下载地址:http://go.microsoft.com/?linkid=9707432

如果是win7,或者是windows server 2008R2等更高级的系统,则不需要自己下载 FastCgi

Zend Guard Loader (Runtime for PHP 5.3)

官方下载网页:http://www.zend.com/products/guard/downloads
下载地址:http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-Windows.zip

 

第二步,安装配置软件

1、安装IIS

打开“控制面板”,进入“添加或删除程序”,点击“添加/删除windows组件”,弹出“windows组件向导”对话框。双击“应用程序服务器”,再双击“Internet信息服务”,选中“万维网服务”(注:此选项下还可进一步作选项筛选,请根据自己需要选用,如下图所示),点确定即安装完成。

2、安装FastCGI 1.5 for IIS 6 and 5.1

IIS6里面没有集成FastCGI,所以需要安装这个才能跑起PHP。这个没什么好说的,直接安装,默认会更改系统的PHP环境,安装完成后,打开IIS管理器,网站上点右键-属性-主目录-配置,如果有PHP选项就修改,没有就添加配置如下图

打开FASTCGI配置文件C:\WINDOWS\system32\inetsrv\fcgiext.ini,看最后有没有下面这段,如果没有就加上
[Types]
php=PHP
[PHP]
ExePath=D:\Program Files\Php\php-cgi.exe

对于512M的更祥细的可以如下:

[Types]
php=PHP

[PHP]
ExePath=d:\php\php\php-cgi.exe
maxInstances=50
InstanceMaxRequests=200
ActivityTimeout=600
RequestTimeout=600
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:d:\php\php\
在上面的配置中:
ExePath 指定了FastCGI解析程序的路径,
instanceMaxRequests 指定了每个实例可以处理的最大请求数,
maxInstances 指定可以启动的最大实例数目,
EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000,
requestTimeout 指定了请求的超时时间为600秒,
activityTimeout 指定了活动会话超时时间为900秒。

一下是建议值:
maxInstances=
把这个值改小

建议
512M 内存的改maxInstances=50
1G 内存的改maxInstances=80
2G 内存的改maxInstances=140

再修改
InstanceMaxRequests=
把这个值改小

建议
512M 内存的改InstanceMaxRequests=200
1G 内存的改InstanceMaxRequests=300
2G 内存的改InstanceMaxRequests=500

改完, 重启IIS。

3、安装配置PHP

PHP5.3有 VC9 版本和 VC6 版本,VC6 版本是使用 Visual Studio 6 编译器编译的,如果你的 PHP 是用 Apache 来架设的,那你就选择 VC6 版本。VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你的 PHP 是用 IIS 来架设的,那你就选择 VC9 版本。

打开下载页面,你还能看到有Thread Safe 和 Non Thread Safe 版本。
先从字面意思上理解,Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源。Non Thread Safe 是非线程安全,在执行时不进行线程(Thread)安全检查。

再来看 PHP 的两种执行方式:ISAPI 和 FastCGI。

ISAPI 执行方式是以 DLL 动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以 ISAPI 来执行 PHP,建议选择 Thread Safe 版本;

而 FastCGI 执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI 来执行 PHP,建议选择 Non Thread Safe 版本。

这里我采用的是PHP 5.3.18 VC9 x86 Non Thread Safe,以 FastCGI 来执行 PHP。下载中间的安装包,直接安装

 

选择适合的安装路径,下一步选择IIS FastCGI,如下图。下一步,安装完成。

安装过程中选择开启哪些PHP扩展,自己决定。这些都可以在PHP.INI里开启关闭的。

安装后找到PHP安装目录下的PHP.INI文件,找到下面
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
; date.timezone =
更改为
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Shanghai

IIS上新建一网站,放入phpinfo.php文件,代码为<?php phpinfo(); ?> 。至此,PHP服务端搭建基本完成,下面继续讲解MySQL+Zend Guard Loader(ZendOptimizer)+phpMyAdmin的配置。

4、安装Mysql 5.5.20

下载安装包,双击安装,点下一步默认是Typical,建议改成Custom,因为Typical模式不允许改变安装路径,只能安装在C盘。选中Custom选项。然后一直点下一步,选择安装的路径,和安装的组件,我这里都是默认选项,可以根据自己情况来选。一直到完成。到Finish的一步,上面有个选项,选上,这是进入配置MySQL的。

下面我们来看看配置选项,配置开始,选下一步,
选择Detailed Configuration,如下图

下一步,这个选项是选择mysql应用于何种类型,第一种是开发服务器,将占用尽量少的内存,

第二种是普通web服务器,将占用中等数量内存,

最后一种是这台服务器上面只跑mysql数据库,将占用全部的内存,

这里选择第二项,你可根据自己的需求,选择其它选项。

下一步,这里是选择数据库用途,

第一种是多功能用途,将把数据库优化成很好的InnoDB存储类型和高效率的MyISAM存储类型,

第二种是只用于事务处理类型,最好的优化InnoDB,但同时也支持MyISAM,

最后一种是非事务处理类型,适合于简单的应用,只有不支持事务处理的MyISAM类型是被支持的。一般选择第一种多功能的。

下一步,这里是选择InnoDB的数据存放位置,一般默认好了,不需要改动。

下一步,这里是选择mysql允许的最大连接数,第一种是最大20个连接并发数,

第二种是最大500个并发连接数,

最后一种是自定义,你可以根据自己的需要选择。

这里我选择第三项自定义,输入20(你可以根据你的具体需求选择或者输入)。

下一步,这里是选择数据库监听的端口,一般默认是3306,如果改成其它端口,以后连接数据库的时候都要记住修改的端口,否则不能连接mysql数据库,建议不作修改,用mysql的默认端口:3306。
将端口设置后面的“Add firewall exception for this port”勾选中,如果你开启了Windows防火墙,将自动把这里设置的端口(3306)排除在外(允许连接网络)

(如果你没有开启Windows防火墙这里就不要勾选,Windows server 2003 正版默认是没有开启的)。
下面的Enable Strict Mode勾去掉,改为不选。

下一步设置mysql的默认编码,默认是latin1,建议选择第三项自定义,把它改成utf8。

点下一步,这一步把mysql设置成windows的服务,service name是命名MySQL的服务名称,下面的launch the mysql server automatically勾选中表示,该服务为自动运行。这样以后就可以通过windows服务启动和关闭mysql数据库了。然后把下面的Include Bin Directory in Windows PATH勾选中(这个表示自动修改环境变量,在PATH的值中增加../bin目录)。

点下一步,这一步是设置mysql的超级用户密码,这个超级用户非常重要,对mysql拥有全部的权限,设置的密码一定要记好。在两个输入框中(New root password、Confirm)把要设置的密码分别输入两次。出于安全考虑,一般不要选“Enable root access from remote machines”,允许数据库外连是很危险的。“Create An Anonymous Account”是创建一个匿名帐号,这样会导致未经授权的用户非法访问你的数据库,有安全隐患,建议不要勾选。

怎样安装mysql server6(数据库服务器)

再下一步,MySQL已配置完成,查看“控制面板”的“管理工具”中, “服务”是否有“MySQL”进程。

5.1、安装ZendOptimizer

下载ZendOptimizer 3.3.9版本的ZendOptimizer.so(linux下的),适用于php5.2.17,在php5.2.17以上就用需用ZendOptimizer了

在php.ini中加入下面的代码:
Zend Optimizer options
zend_optimizer.optimization_level=1023
zend_extension=/home/webcangt/public_html/ZendOptimizer.so
装好后在Phpinfo中看到如下图:

5.2 安装Zend Guard Loader,适用于Php5.3及以上

由于ZendOptimizer不支持PHP5.3,使用PHP5.3以上版本的用户就安装Zend Guard Loader (Runtime for PHP 5.3)。

很简单解压出ZendLoader.dll,放到PHP的ext目录。我的是C:\Program Files\PHP\ext。然后修改php.ini,在文件末端添加以下代码

[Zend.loader]
zend_extension=C:\Program Files\PHP\ext\ZendLoader.dll
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=

注意:1、zend_extension的路径不需要加引号!!
2、Zend Guard Loader支持的操作系统:
Linux x86
Linux x86-64
Windows x86 2000 / XP / 2003 / Vista
Mac OS X 10.4

这是部分童鞋按网上部分的教程操作之后,还是不生效的原因。

配置完成,打开刚刚的phpinfo.php文件,可以看到一段话“with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies”如图所示。

?

如果运行 discuz的时候提示

Notice: Undefined index: fromuid in ・・・・・index.php on line 120
Notice: Undefined index: fromuid in ・・・・・index.php on line 122

首先,这个不是错误,是warning。所以如果服务器不能改,每个变量使用前应当先定义。

解决方法:服务器配置修改

修改php.ini配置文件,error_reporting = E_ALL & ~E_NOTICE

发表回复