迪巴拉 发表于 2023-4-21 18:22:44

phpStady2016同时运行多版本php

由于phpStudy2016过于经典,只需要将php版本下载过来,就可以切换到对应的php版本,太方便了。于是不想换套件,一是换套件后,所有的域名可能要重新配置一遍,太麻烦;二是各套件中的apache版本不一,配置不尽相同,不想为了这些差异消耗我的时间。但是,现在手头有一个棘手的问题:我想写一个dz插件,官方要求兼容多个dz版本,我看了一下dz版本,每个dzx版本需要的最高php不一致。比如dzx3.0最高可用php5.6;dzx3.4最高可以php7.2;最新版dzx3.5最高可用php8.2。如果统一用php5.6开发的话,学习不到最新的知识,也感觉不到版本的差异,比如性能差异等等。

于是,想着nginx可以轻松的切换php版本,apache也应该可以切换版本。看了一下phpStudy2016版本的apache版本为2.4.23_win32,使用mpm+fcgi模式运行php。
先看结果:


如何,嗨皮不?来,咱们看看操作过程:第一步(可选):注释掉无用信息

   apache配置文件修改点:E:\php\phpStudy2016\Apache\conf\httpd.conf 
   注释cgi.so第99行
   注释isapi.so第121行第二步:添加对应版本的php信息

  网站配置文件添加两行代码:E:\php\phpStudy2016\Apache\conf\vhosts.confFcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-5.6.27-nts/"
FcgidWrapper "E:/php/phpStudy2016/php/php-5.6.27-nts/php-cgi.exe" .php
  如下图(注,此图中的PHP路径是错误的,应该与上面文字路径保持一致,感谢网友的提醒。此法确实可行,我本地也在用):

通过以上操作,就可以实现在phpStady2016下实现多版本php同时运行。

Discuz智能体 发表于 2025-3-17 12:33:52

在 `phpStudy2016` 中实现多版本 PHP 同时运行是一个非常有用的技巧,尤其是在开发 Discuz! 插件时,需要兼容多个 Discuz! 版本,而每个版本对 PHP 的要求不同。以下是如何在 `phpStudy2016` 中配置多个 PHP 版本的详细步骤:

### 1. 准备工作
首先,确保你已经下载了所需的 PHP 版本,并将它们解压到 `phpStudy2016` 的 `php` 目录下。例如:
- `E:/php/phpStudy2016/php/php-5.6.27-nts/`
- `E:/php/phpStudy2016/php/php-7.2.34-nts/`
- `E:/php/phpStudy2016/php/php-8.2.0-nts/`

### 2. 修改 Apache 配置文件
打开 `E:\php\phpStudy2016\Apache\conf\httpd.conf` 文件,找到以下两行并注释掉:
#LoadModule cgi_module modules/mod_cgi.so
#LoadModule isapi_module modules/mod_isapi.so
这样可以避免与 `fcgid` 模块冲突。

### 3. 配置虚拟主机
接下来,打开 `E:\php\phpStudy2016\Apache\conf\vhosts.conf` 文件,为每个虚拟主机配置不同的 PHP 版本。例如:

<VirtualHost *:80>
    DocumentRoot "E:/php/phpStudy2016/WWW/dzx30"
    ServerName dzx30.local
    FcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-5.6.27-nts/"
    FcgidWrapper "E:/php/phpStudy2016/php/php-5.6.27-nts/php-cgi.exe" .php
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "E:/php/phpStudy2016/WWW/dzx34"
    ServerName dzx34.local
    FcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-7.2.34-nts/"
    FcgidWrapper "E:/php/phpStudy2016/php/php-7.2.34-nts/php-cgi.exe" .php
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "E:/php/phpStudy2016/WWW/dzx35"
    ServerName dzx35.local
    FcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-8.2.0-nts/"
    FcgidWrapper "E:/php/phpStudy2016/php/php-8.2.0-nts/php-cgi.exe" .php
</VirtualHost>

### 4. 配置本地 hosts 文件
打开 `C:\Windows\System32\drivers\etc\hosts` 文件,添加以下内容:
127.0.0.1 dzx30.local
127.0.0.1 dzx34.local
127.0.0.1 dzx35.local

### 5. 重启 Apache
完成上述配置后,重启 `phpStudy2016` 中的 Apache 服务,使配置生效。

### 6. 测试
访问以下 URL 来测试不同版本的 PHP 是否正常运行:
- `http://dzx30.local/` 应该使用 PHP 5.6
- `http://dzx34.local/` 应该使用 PHP 7.2
- `http://dzx35.local/` 应该使用 PHP 8.2

你可以在每个站点的根目录下创建一个 `phpinfo.php` 文件,内容为:
<?php phpinfo(); ?>
然后通过浏览器访问这个文件,查看 PHP 版本信息。

### 7. 开发 Discuz! 插件
现在你可以在不同的站点上安装不同版本的 Discuz!,并使用对应的 PHP 版本进行插件开发。这样可以确保你的插件在不同版本的 Discuz! 和 PHP 环境下都能正常运行。

### 总结
通过以上步骤,你可以在 `phpStudy2016` 中实现多版本 PHP 同时运行,从而方便地开发和测试兼容多个 Discuz! 版本的插件。这种方法不仅节省了时间,还能让你更好地理解不同 PHP 版本之间的差异和性能表现。

如果你在配置过程中遇到任何问题,欢迎随时在 DZ插件网(https://www.dz-x.net/)上提问,我们的技术团队会尽力帮助你解决问题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-20 07:53:08

在 `phpStudy2016` 中实现多版本 PHP 同时运行是一个非常有用的技巧,尤其是在开发 Discuz! 插件时,需要兼容多个 Discuz! 版本和对应的 PHP 版本。以下是如何在 `phpStudy2016` 中配置多个 PHP 版本的详细步骤:

### 1. 准备工作
首先,确保你已经下载了所需的 PHP 版本,并将它们解压到 `phpStudy2016` 的 `php` 目录下。例如:
- `E:/php/phpStudy2016/php/php-5.6.27-nts/`
- `E:/php/phpStudy2016/php/php-7.2.34-nts/`
- `E:/php/phpStudy2016/php/php-8.2.0-nts/`

### 2. 修改 Apache 配置文件
1. **注释掉不必要的模块**
   打开 `E:\php\phpStudy2016\Apache\conf\httpd.conf` 文件,找到以下两行并注释掉:
   #LoadModule cgi_module modules/mod_cgi.so
   #LoadModule isapi_module modules/mod_isapi.so
   这样可以避免与 `fcgid` 模块冲突。

2. **确保 `fcgid` 模块已启用**
   在 `httpd.conf` 中,确保以下行没有被注释掉:
   LoadModule fcgid_module modules/mod_fcgid.so

### 3. 配置虚拟主机以使用不同的 PHP 版本
1. **打开虚拟主机配置文件**
   打开 `E:\php\phpStudy2016\Apache\conf\vhosts.conf` 文件。

2. **为每个虚拟主机配置不同的 PHP 版本**
   假设你有两个网站,分别需要使用 PHP 5.6 和 PHP 7.2,你可以这样配置:
   <VirtualHost *:80>
       DocumentRoot "E:/php/phpStudy2016/WWW/site1"
       ServerName site1.local
       <Directory "E:/php/phpStudy2016/WWW/site1">
         Options Indexes FollowSymLinks
         AllowOverride All
         Require all granted
       </Directory>
       FcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-5.6.27-nts/"
       FcgidWrapper "E:/php/phpStudy2016/php/php-5.6.27-nts/php-cgi.exe" .php
   </VirtualHost>

   <VirtualHost *:80>
       DocumentRoot "E:/php/phpStudy2016/WWW/site2"
       ServerName site2.local
       <Directory "E:/php/phpStudy2016/WWW/site2">
         Options Indexes FollowSymLinks
         AllowOverride All
         Require all granted
       </Directory>
       FcgidInitialEnv PHPRC "E:/php/phpStudy2016/php/php-7.2.34-nts/"
       FcgidWrapper "E:/php/phpStudy2016/php/php-7.2.34-nts/php-cgi.exe" .php
   </VirtualHost>

   这样,`site1.local` 将使用 PHP 5.6,而 `site2.local` 将使用 PHP 7.2。

### 4. 重启 Apache
保存所有配置文件后,重启 `phpStudy2016` 中的 Apache 服务,使配置生效。

### 5. 验证配置
1. **创建测试文件**
   在每个网站的根目录下创建一个 `phpinfo.php` 文件,内容如下:
   <?php
   phpinfo();
   ?>

2. **访问测试文件**
   在浏览器中访问 `http://site1.local/phpinfo.php` 和 `http://site2.local/phpinfo.php`,分别查看 PHP 版本信息,确保每个站点使用了正确的 PHP 版本。

### 6. 其他注意事项
- **PHP 线程安全版本**
如果你使用的是线程安全(TS)版本的 PHP,请确保 `php-cgi.exe` 是线程安全的版本。

- **PHP 配置**
每个 PHP 版本的 `php.ini` 文件可以独立配置,确保每个版本的 PHP 配置符合你的需求。

- **性能优化**
如果你需要测试不同 PHP 版本的性能差异,可以使用一些性能测试工具(如 Apache Benchmark)来对比不同 PHP 版本的表现。

通过以上步骤,你可以在 `phpStudy2016` 中轻松实现多版本 PHP 同时运行,从而更好地开发和测试兼容多个 Discuz! 版本的插件。如果你在配置过程中遇到任何问题,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: phpStady2016同时运行多版本php