Apache + PHP 安装日志
背景:想用 drupal 弄一个论坛,其系统要求是 Apache + PHP + MySQL (推荐),又因为最近在玩Linux,所以...
机子是windows2003系统。
首先:安装 Apache (装的是apache_2.2.11-win32-x86-openssl-0.9.8i.msi ),安装时一路“next”。
有文章说:“安装过程,任何目录和文件名都不要使用空格” 。不过我是装在“D:\Program Files”,运行正常......
由于本机的IIS已经占用了80端口,所以为 Apache 配置了1080的端口(很奇怪的就是配8080竟然不行,可能是被其他程序占用了,没细查)。
但是,输入:http://localhost:1080/ 后,一直没有反映 。查看logs\error.log 如下:
并且 Httpd.exe 占用 CPU 资源很高。
网上一些做法是:(Window下APACHE的Win32DisableAcceptEx的问题)
<IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
这样可以允许并发连接更大一些。同时性能上也不会有明显的降低.
以上是一种情况。而我的情况是:cpu占有率降低,但还是出错,logs\error.log 如下:
[Mon Dec 24 16:48:06 2007] [notice] Child 1916: Exit event signaled. Child process is ending.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Released the start mutex
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Waiting for 250 worker threads to exit.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: All worker threads have exited.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Child process is exiting
[Mon Dec 24 16:48:07 2007] [notice] Parent: child process exited with status 0 -- Restarting.
[Mon Dec 24 16:48:07 2007] [notice] Apache/2.0.55 (Win32) configured -- resuming normal operations
[Mon Dec 24 16:48:07 2007] [notice] Server built: Oct 9 2005 19:16:56
[Mon Dec 24 16:48:07 2007] [notice] Parent: Created child process 3028
[Mon Dec 24 16:48:07 2007] [notice] Disabled use of AcceptEx() WinSock2 API
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Child process is running
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Acquired the start mutex.
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Starting 250 worker threads.
[Mon Dec 24 16:48:08 2007] [notice] Child 3028: Listening on port 80.
解决办法:Apache错误:[error] (OS 10038)在一个非套接字上尝试了一个操作
cmd下
netsh winsock reset
然后重启,并且不用设置 Win32DisableAcceptEx。
其实发生上述错误都是 windows 中某些软件更改了 winsock 导致的。
另:在查询资料时找到这个:apache2.2.11 详细配置优化
接下来是安装 PHP (首先弄了个 PHP 5.0.0 后下来最新的 PHP 5.2.9-2 zip package) 参考了很多安装文章。
首先,很多文章都说最好是下载解压版的, installer 版的好像有限制的......(没试过)。
第二,PHP解压后,“把 php5ts.dll 放到 Windows 路径中,最好的位置是 Windows 的 system 目录”(某文章说)。若不行就把PHP目录下的所有 dll 文件都复制到c:/windows/system32/下(另一篇文章说,-_-!)。而“复制 D:\PHPServer\php5 目录下的php5ts.dll,libmysql.dll 到C:\windows\system32”。(又一文章说)(@_@)。最后我是效仿这篇文章的第4点 :将 PHP 目录添加到环境变量 Path 中(但在安装 PHP 5.2.9-2没设置环境变量也是可以运行的,可能我还没用用到这篇文章里所说的 extension 吧)。安装 phpMyAdmin 证实若用到 extension 时必须把其相应的 lib***.dll 文件复制到 c:/windows/system32/下,设置环境变量不起作用。譬如 extiension php_mysql.dll 需要将 php 目录下的 libmysql.dll 文件复制到 c:/windows/system32/下,否则提示无法加载 MySQL extension。libmcrypt.dll 也要复制到 system32/下,否则 phpMyAdmin 会提示 Access denied for user ’(乱码)’@’localhost’ (using password: YES)无法登录,phpMyAdmin 应该用到了 extiension php_mcrypt 加密解密。
第三,就是配置PHP了,将“php.ini-recommended”文件复制到“c:/windows”下,更名为“php.ini”(我也是没有复制过去的)(另,很多文章说用 php.ini-recommended 而不是 php.ini-dist ,有文章解释说“php.ini-recommended 在对默认设置作了性能和安全上的优化”)。
第四,修改 php.ini :
(2)查找 cgi.force_redirect 字串.默认值为1.将其修改为0.并取消前面的;号
用到哪些 extensions 去掉其前面的 “;” 号
extension=php_mcrypt.dll(用于支持PhpMyAdmin)
extension=php_mysql.dll(MySql模块,开启之后才能访问MySql数据库)
extension=php_mysqli.dll(MySql模块)
extension=php_curl.dll
extension=php_gd2.dll
第五,配置Apache以支持php5:
设置php起始页:
DirectoryIndex index.php index.html default.php default.html index.htm
</IfModule>
可以自己增加需要的起始页文件名。注意文件名之间用空格隔开,而不是用逗号。
有两种方法使得 PHP 工作在 Windows 下的 Apache。一是使用 CGI 二进制文件,另一是使用 Apache 模块 DLL(这种做法比较好)。
1. PHP 以 CGI 方式安装到 Apache
将如下指令插入到 Apache 的 httpd.conf 配置文件中
AddType application/x-httpd-php .php #(支持 php 扩展名)
Action application/x-httpd-php "/php/php-cgi.exe" #(注意是 php-cgi.exe,不是 php.exe,否则会出现如下错误)
以CGI的方式安装到 Apache时,logs\error.log 出现了以下错误
原因是:php5下面装成cgi模式调用的是php-cgi.exe 不是php.exe。
2. PHP 以模块方式安装到 Apache
找到 #LoadModule ssl_module modules/mod_ssl.so 这行,在此行后加入
PHPIniDir "D:/php5/"LoadModule php5_module "D:/php5/php5apache2_2.dll"
#(其中D:/php5/php5apache2_2.dll是你安装php的相应路径.注意不要把php5apache2_2.dll,php5apache2.dll和php5apache.dll混淆.php5apache.dll只适用于apache 版本1的.PHP5压缩包里的php5apache2.dll只适用于apache2.0.*版本,如果是2.2.*以上版本,必须使用php5apache2_2.dll.否则就可能会出现如下的问题)
有很多文章是 “添加 php 扩展名支持 ” 如下句的
以模块方式安装到 Apache时,出现错误:
或者:
"The requested operation has failed"
解决办法可参考:http://www.phpfans.net/bbs/viewthread.php?tid=857&extra=page%3D1(不过这是针对 php 5.1.* 的)
或者:在http://snaps.php.net/index.php下载最新的开发版,用其中的php5apache2_2.dll替换(好像也是针对 php 5.1.*的)
本机 php 5.0.0 以上两种方法都不行,至今还没找到解决办法(谁知道,谢谢告知) 反正都是下载了最新的 php 版本了,所以最后干脆 用 php 5.2.9-2 了......安装的很顺利,可能是之前错得多了。哈~
注意,如果安装后出现You don’t have permission to access / on this server.
更改 如下
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all #Deny from all(修改这里)
</Directory>
由于用的是 php 5.0.0 安装完后运行(我是以CGI方式运行的)出现如下错误
而实际上这个文件和路径都是正确的
解决方法:win2k下appserv启用php_mycrypt.dll时“找不到指定模块”的问题
php_mcrypt.dll 需要 libmcrypt.dll 支持,php并不默认提供。(php 5.2.9-2 是提供的)
注意 libmcrypt.dll 有多个版本,你可通过实验找到与你的php版本相适应的libmcrypt.dll。
最新的下载地址http://files.edin.dk/php/win32/mcrypt/
163k
不过 php 5.0.0 要到http://files.edin.dk/php/win32/mcrypt/old/ 下一个247K才行
最后附上PHP 手册
顺便说说 phpMyAdmin 登录后 出现“配置文件现在需要绝密的短语密码(blowfish_secret)”
解决办法:从PhpMyAdmin\libraries目录下 找到config.default.php 文件,找到$cfg['blowfish_secret'],其值为空或值太少,随意添加个值就 ok 了。
另,在较早版本中 好像是设置根目录下 config.inc.php 文件的。