PHP环境配置教程与问题汇总,包括不同操作系统,不同的Web应用服务器,有用的PHP缓存扩展等。

一、配置教程

(一)Windows Server 2016 配置指南 之 PHP7 环境搭建篇 https://yq.aliyun.com/articles/5546 附VC++运行库 在Windows环境下,PHP(x86或x64)需要对应版本的VC++运行库才能正常运行,一般高版本的PHP需要高版本的VC++运行库。VC++运行库下载地址: https://visualstudio.microsoft.com/zh-hans/downloads/(从“ 其他工具和框架”中寻找),PHP官网Windows版本下载页面也有提供: https://windows.php.net/download/(从左侧Which version do I choose?中寻找) 注:VC15在其VC++运行库安装包运行界面上的版本号是14.16.27027,版本号全称与简称并非完全一致。

二、集成安装包

(一)WAMP http://www.wampserver.com/ (二)XAMPP for Windows: https://www.apachefriends.org/(同时提供XAMPP for Linux、XAMPP for OS X) (三)WNMP https://sourceforge.net/projects/wnmp-env/

三、PHP缓存扩展

(一)WinCache Extension

WinCache Extension(Windows缓存扩展,全称Windows Cache Extension for PHP)是IIS官网发布的一款PHP缓存扩展(加速器) ,用于提高PHP应用程序在Windows操作系统上的运行速度。加载PHP引擎并启用该扩展后,任何PHP应用程序可以为PHP提供的Windows缓存扩展,而无需修改任何代码。 2009年,WinCache Extension 1.0正式发布了,以后更新的各版本下载地址:http://www.iis.net/expand/WinCacheForPhp 2017.8.3以来, WinCache Extension一直没有官方更新,可以到其项目网站下载前微软开放人员维护的更新版本:https://sourceforge.net/projects/wincache/files/development/ 安装要求:Windows下的PHP运行环境必须是FastCGI的。我曾经装过WAMP集成包,后来换成FastCGI以后发现比WAMP速度上要快,加上这个WinCache Extension ,速度应该会更好。 安装方法: 1、下载与PHP版本相符(x86或x64也要一致,官网只提供PHP7.0以上的X64版本)的 WinCache扩展exe文件,双击,点击Browse,选择默认文件夹安装(注,这里可以随便选择一个文件夹,不一定是默认的,也可以直接安装到PHP目录下的ext目录下)。 2、复制php_wincache.dll到PHP目录下的ext目录下(如果第一步直接安装到此目录,可忽略此步骤); 3、打开php.ini,在末尾添加 extension = php_wincache.dll 扩展; 4、建立phpinfo.php测试页面,打开并查找名为“wincache”的扩展项,看是否正确配置。 至此配置全部完成,还可对比开关此扩展前后的PHP页面执行速度,有的居然达到了0.007。附PHP官网手册中的安装方法:http://php.net/manual/zh/wincache.installation.php,如需详细配置,可在php.ini中添加以下设置:

[wincache]
extension=php_wincache.dll
wincache.fcenabled = 1
wincache.fcachesize = 1024M
wincache.maxfilesize = 2M
wincache.filecount 16384
wincache.ocenabled = 1
wincache.ocachesize = 1024M
wincache.chkinterval = 300
wincache.ttlmax 7200
wincache.ignorelist = “index.php|wp-login.php|user.php”
wincache.ucenabled = 1
wincache.fcndetect = 1
wincache.fcenabledfilter = NULL
wincache.enablecli = 1
wincache.ucachesize = 128
wincache.scachesize = 128

注:wincache仅适应iis下搭建PHP,若是在windows下面运行其它php web服务器 wincache不是很好,可以考虑使用zend效果会更好(php5.5版本已经整合zend opache)。

(二)APCu

APCu是剥离了操作码缓存的APC,相当于APC的进化版。
第一个APCu代码库的​​版本为4.0.0,当时是从APC主分支的头派生的。从APCu 5.0.0开始提供PHP 7支持。APCu可以提供兼容模式,从而可以减少对APC适用部件的替换。
如果需要了解apc的请参考以下链接 https://www.php.net/manual/zh/intro.apc.php
Windos开发环境下如何安装Apcu:在以下链接可以找到对应PHP版本(注意区分x86或64,以及nts或nt)的dll文件,下载后放到php/ext目录。 https://pecl.php.net/package/apcu

修改php.ini文件,加上:

[apcu]
extension=php_apcu.dll
apc.enabled=1
apc.shm_size=64M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php

重启apache,nginx,php-fpm 查看phpinfo(),是否有apcu扩展。注意,有时安装APCU扩展后,会导致FastCGI进程意外退出的情况。

(三)XCache Extension

1、从http://xcache.lighttpd.net/pub/Releases/下载XCache的WIN版本,解压后将其中的php_xcache.dll放在PHP的ext目录下。 2、将下面xcache配置部分放在php.ini文件的末尾,并将zend_extension_ts更改为上一步中的地址。 3、如需要同时打开Zend Optimizer,则必须将xcache配置放在Zend Optimizer配置前面。 ———-以下部分放在php.ini文件的末尾(含Zend Optimizer配置)———

;; 本文件只是例子, 请在 php.ini 里设置以便生效 [xcache-common] ;; 安装成 zend extension (推荐), 路径一般是 “$extension_dir/xcache.so” zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so ;; Windows 系统例子: zend_extension_ts=”D:/WebServ/PHP/ext/php_xcache.dll” ;; 或者您也可把 XCache 安装成 extension, 注意确保您的 extension_dir 设置正确, 并把 xcache.so 或者 php_xcache.dll 放到该目录里面 ; extension = xcache.so ;; 或者 Win32 系统: ; extension = php_xcache.dll [xcache.admin] xcache.admin.enable_auth = On xcache.admin.user = “xadm” ; xcache.admin.pass = md5($您的密码) xcache.admin.pass = “0502f8be8eb39845901db7484e8db25b” [xcache] ; 这里的多数选项仅在 ini 里可以修改, 这里列出的都是默认值, 除非另外说明 ; select low level shm/allocator scheme implemenation xcache.shm_scheme = “mmap” ; 禁用: xcache.size=0 ; 启用: xcache.size=64M 之类 (任意>0的值) 同时请注意您的系统 mmap 上限 xcache.size = 0M ; 建议设置为 cpu 数 (cat /proc/cpuinfo |grep -c processor) xcache.count = 1 ; 只是个参考值, 您可以放心地存储多于此数量的项目(php脚本/变量) xcache.slots = 8K ; 缓存项目的 ttl, 0=永久 xcache.ttl = 0 ; 扫描过期项目的时间间隔, 0=不扫描, 其他值以秒为单位 xcache.gc_interval = 0 ; 同上, 只是针对变量缓存设置 xcache.var_size = 8M xcache.var_count = 1 xcache.var_slots = 8K ; 默认, 允许 ini_set() xcache.var_ttl = 0 ; 最大ttl值 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 ; 仅测试用 xcache.test = Off ; /dev/zero 时无效 xcache.readonly_protection = Off ; 对于 *nix 系统, xcache.mmap_path 是文件路径而不是目录, (可以不存在 但是必须能创建). ; 如果您期望启用 ReadonlyProtection, 可以使用类似 “/tmp/xcache” ; 2 个 php 组不会共享同一个 /tmp/xcache ; 对于 Win32 系统, xcache.mmap_path=匿名MAP名字, 不是文件路径. 建议使用 XCache 字眼避免跟其他软件冲突 xcache.mmap_path = “/dev/zero” ; 仅用于 *nix 系统 ; 设置为空(禁用) 或者类似 “/tmp/phpcore/” ; 注意该目录应该能被 php 写入文件 (跟 open_basedir 无关) xcache.coredump_directory = “” xcache.cacher = On xcache.stat = On xcache.optimizer = Off [xcache.coverager] ; 如果 xcache.coveragedump_directory 设置为空则本设置自动为 Off xcache.coverager = Off ; 请确保本目录能被 coverage viewer 脚本读取 (注意 open_basedir) ; 依赖于 xcache.coverager=On xcache.coveragedump_directory = “” [Zend] zend_extension_manager.optimizer_ts=”C:\Program Files\phpser\Zend\lib\Optimizer-3.3.0″ zend_extension_ts=”C:\Program Files\phpser\Zend\lib\ZendExtensionManager.dll”

四、PHP Manager

IIS官网提供PHP管理工具PHP Manager for IIS。 在IIS官网搜索PHP Manager,目前有1.2、1.5等版本,分别适用于不同的IIS版本。下载安装后,即可在IIS中看到PHP Manager设置项,点击进去,可以看到其中包括PHP Setup、PHP Settings、PHP Extensions等三方面的管理功能。比如,开关扩展,切换PHP版本都比较方便 。

五、PHP环境升级或网站搬迁中的小问题

(一)PHPinfo页面测试打开错误

网站搬迁或PHP版本升级过程中,遇到HTTP错误500“无法在应用程序配置中找到scriptProcessor”时,请检查以下几项是否设置正确:

1.FastCGI设置中是否添加了应用程序并配置了正确的php-cgi.exe路径?处理程序映射是否添加*.php并配置了正确的php-cgi.exe路径?如通过PHP Manager for IIS配置PHP,一般在注册该PHP版本时,这些设置就会自动设置好。

2.网站目录中是否存在旧有的web.config文件(可能包含原服务器或原PHP环境的配置)?如有,则可在备份后删除web.config文件(重启IIS会生成一个新的web.config文件),然后刷新网站即可。后续如出现URL重写等问题(如伪静态设置失效等),则复制相应的伪静态设置代码到新生成的web.config文件中,WordPress中,只需在后台设置-固定链接中,重新提交一下,即可自动重写伪静态设置代码。

(二)PHP临时文件夹权限错误

phpMyAdmin – Error Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)

打开phpMyAdmin时遇到以上错误,是因为session变量需要系统的临时文件空间,并需要读写的权限。解放办法:在php.ini里找到session.save_path = ,默认值为”C:\Windows\temp”,给予Users用户写入权限即可;或者另外设置一个有效的文件夹路径,例如session.save_path = “c:\php\temp”,并给予Users用户写入权限 。

(三)FastCGI 进程意外退出

HTTP 错误 500.0 – Internal Server Error ……php-cgi.exe – FastCGI 进程意外退出

这个问题可能有多种原因,参考解决方法有:

一、逐一关闭APCU等各种缓存扩展后再试。

二、设置PHP所在目录的环境变量。右键计算机-》属性-》高级系统设置-》环境变量,设置path路径,增加PHP所在目录。

三、直接命令行到 PHP所在目录。使用 php -v检查哪些库文件不能加载,并进行处理,一般这些不能加载的库也都用不到。

四、运行PHP安装目录下的php.exe和php-cgi.exe,如出现“msvcr110.dll”丢失的提示,则需下载相应版本的VC库(如PHP7.3对应VC15)。

五、重启服务器,清空内存。

(四)PHP7下出现的新问题

在 PHP7 下出现的错误 Fatal error: Cannot redeclare imagecreatefrombmp(),这个错误在 PHP5.6 下面不会出现,只出现在 PHP7 版本,因为在 PHP7 中,imagecreatefrombmp() 是内建函数。

详见官方文档:http://php.net/manual/en/function.imagecreatefrombmp.php 解决办法:把自己定义的函数名改名就可以了,例如改成 imagecreatefrombmp2().

(五)MYSQL密码特殊字符问题

MYSQL密码中包含大小写字母和数字之外的某些特殊字符时,部分PHP程序会报错,调整密码即可解决。 PHP5.6.40报错: Parse error: syntax error, unexpected ‘”‘ in C:\Web\jcwh\doc\config.php on line 56 PHP7.3.2报错: Fatal error: Constant expression contains invalid operations in C:\Web\jcwh\doc\config.php on line 56

(六)带空格的路径要加上引号

手动设置php.ini时,当路径包含空格(如Program Files)时,需在完整路径的两端加上英文引号。

附:Windows下三种配置方式之比较

注:IIS7以后基本都用FastCGI方式了 在Windows IIS 6.0下配置PHP,通常有CGI、ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异。 1、CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。 2、ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI。 在Windows Server 2003的IIS6下配置ISAPI方式的PHP,配置方法是,在IIS的“WEB服务扩展”中,添加一个新的WEB服务扩展,程序后缀为PHP,ISAPI程序为php5isapi.dll,然后再“环境变量”-“系统变量”中增加变量名PHPRC,数值为php.ini的路径,在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射”Tab页。点击“添加…”,在“可执行文件”设为: c:\php\php5isapi.dll,扩展名设为.php,选择“确认文件是否存在”,然后“确定”保存设置。重启服务器即可完成PHP的配置。 3、FastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。 FastCGI已经集成于IIS7,也支持IIS6,在IIS6中的安装方法可参见微软的官方文档(http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/),我这里简单翻译一下。 先点这里(http://www.iis.net/expand/FastCGI)下载一个32位的FastCGI extension for IIS,然后将其安装,安装后的文件应该放到system32\inetsrv目录下。 之后打开system32\inetsrv目录,执行下面的语句,其中c:\php为你的PHP目录,可以修改为其他数值。 cscript fcgiconfig.js -add -section:”PHP” -extension:php -path:”c:\php\php-cgi.exe” 在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射”Tab页。点击“添加…”,在“可执行文件”设为: c:\windows\system32\inetsrv\fcgiext.dll,扩展名设为.php,选择“确认文件是否存在”,然后“确定”保存设置。 修改php.ini文件,增加如下语句: fastcgi.impersonate = 1 cgi.fix_pathinfo = 1 cgi.force_redirect = 0 之后打开system32\inetsrv目录,执行以下语句: cscript fcgiconfig.js -set -section:”PHP” -InstanceMaxRequests:10000 cscript fcgiconfig.js -set -section:”PHP” -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000 最后,配置c:\php目录的安全性,使得IIS_WPG组对于这个目录有读取和执行的权限。 这时候,基于FastCGI的PHP就成功配置到IIS6上了。 不过根据我自己的测试,FastCGI的性能比ISAPI的好像高不了多少,不知道Windows Server 2008下的IIS7是不是会好一些。这里是微软提供的基于内置FastCGI的IIS7安装PHP的方法:http://learn.iis.net/page.aspx/375/set-up-fastcgi-for-php/