【转载】 Apache使用fcgid模块配置多个PHP版本共存(无需 php7apache24.dll)
转载
- https://blog.csdn.net/zhouzme/article/details/53995566
- https://www.cnblogs.com/fps2tao/p/9401224.html
原因
尝试使用 qt 实现 phpstudy
注意
配置完成后还是报错 403,需要修改 httpd.conf 中 Options 追加 ExecCGI
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks ExecCGI
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
正文
因为涉及多个时期开发的项目维护,每个项目使用的PHP版本都不同,想要在本地开发并调试就非常麻烦了,必须得想办法同时使用多个PHP版本才行
于是总结了下面方法做个记录,apache 用的不多,只是本地开发测试环境用apache感觉简单方便点儿。
如果用 Nginx 来配置多个PHP版本的话应该会更简单了吧,修改下PHP的listen端口就好了。
一、根据 apache 版本下载对应的 mod_fcgid-版本-win64-VC14.zip
下载地址: https://www.apachelounge.com/download/
我当前的版本是 mod_fcgid-2.3.10-win64-VS16 ,将压缩包内 \mod_fcgid-2.3.10-win64-VS16\mod_fcgid-2.3.10\mod_fcgid.so
的这个文件移动到 \apache\modules\mod_fcgid.so
二、修改 httpd.conf 末尾 添加
注意了,这里的 FcgidMaxRequestLen 很重要也很坑爹。
当你上传文件的时候发现总是出现500错误,而程序其实没有错误。
实际上是因为上传内容体积过大,即便修改了php.ini 中配置的上传参数也没有用的,必须修改这里才行,nginx下也会有类似的问题
LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
FcgidMaxRequestsPerProcess 1000
FcgidMaxProcesses 15
FcgidIOTimeout 120
FcgidIdleTimeout 120
AddType application/x-httpd-php .php
# 全局默认使用的PHP版本配置
FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php5.6"
FcgidWrapper "C:/ProgramFiles(x86)/php5.6/php-cgi.exe" .php
# 上传文件的最大尺寸 100MB
FcgidMaxRequestLen 104857600
三、对需要不同 PHP 版本的设置 httpd-vhosts.conf 添加下面代码(第三步是针对不同网站设置,不需要可以忽略)
FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"
FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php
注意:FcgidWrapper 中的路径使不能存在 空格 的,否则无法启动 Apache 了
因为历史原因我的软件都给装在了这个Program Files (x86)文件夹下面,又懒得换路径,为了兼容,我这里创建了文件夹的符号链接
命令格式:mklink /d "新生成的符号链接文件夹名称和绝对路径" "源文件夹绝对路径"
修改 httpd-vhosts.conf 配置后的样子:
同样的,如果你还需要其他版本则直接下载对应版本的PHP后解压,然后指向那个目录就行了
<VirtualHost *:80>
DocumentRoot "E:\Website\domain.com\www"
ServerName www.domain.com
ServerAlias *.domain.com
FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"
FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php
</VirtualHost>
测试
我测试了三个版本,php5.6(全局默认使用的版本), php7.0,php7.1
httpd-vhosts.conf 配置如下:
Listen 81
Listen 82
Listen 83
<VirtualHost *:81>
DocumentRoot "E:\Website\local81"
ServerName 127.0.0.1
</VirtualHost>
<VirtualHost *:82>
DocumentRoot "E:\Website\local82"
ServerName 127.0.0.1
FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"
FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php
</VirtualHost>
<VirtualHost *:83>
DocumentRoot "E:\Website\local83"
ServerName 127.0.0.1
FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.1"
FcgidWrapper "C:/ProgramFiles(x86)/php7.1/php-cgi.exe" .php
</VirtualHost>
地 址 :https://www.cnblogs.com/xiaqiuchu/articles/16724444.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2019-09-23 【转载|不建议使用】Laravel 生成二维码的方法