双XAMPP环境(PHP5/PHP7)能否共用同一Apache虚拟主机DocumentRoot?
当然可以!这绝对是个聪明的做法,能帮你省掉大量重复复制代码的麻烦。下面我一步步给你讲怎么配置,还有要注意的关键细节:
本质就是让两个分别对应PHP5和PHP7的Apache实例,把虚拟主机的DocumentRoot指向同一个本地代码目录——这样你修改一次代码,两个环境都能实时同步,完全不用再手动复制粘贴。
第一步:找到两个XAMPP的Apache虚拟主机配置文件
分别打开PHP5版XAMPP的apache\conf\extra\httpd-vhosts.conf,以及PHP7版XAMPP的同路径文件。第二步:为两个环境配置不同的虚拟主机域名
建议给两个环境设置不同的测试域名,比如PHP5环境用local.php5.yoursite.com,PHP7环境用local.php7.yoursite.com,这样浏览器输入不同域名就能一键切换测试环境。以PHP5的配置为例,把这段代码添加到
httpd-vhosts.conf里:<VirtualHost *:80> ServerName local.php5.yoursite.com DocumentRoot "C:/path/to/your/shared/code/folder" <Directory "C:/path/to/your/shared/code/folder"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>PHP7的配置几乎一样,只需要把
ServerName改成local.php7.yoursite.com,DocumentRoot保持和上面相同的路径即可。第三步:修改本地hosts文件绑定域名
打开系统的hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts,Mac/Linux是/etc/hosts),添加两行绑定规则:127.0.0.1 local.php5.yoursite.com 127.0.0.1 local.php7.yoursite.com这样浏览器输入这两个域名时,会直接指向本地的Apache服务。
第四步:解决端口冲突问题
注意!如果两个XAMPP的Apache默认都用80端口,同时启动会直接冲突。你需要修改其中一个的端口,比如把PHP5版的Apache端口改成8080:
打开PHP5版XAMPP的apache\conf\httpd.conf,找到Listen 80改成Listen 8080,然后对应的虚拟主机配置里的<VirtualHost *:80>也要改成<VirtualHost *:8080>。访问时用local.php5.yoursite.com:8080即可。
- PHP版本兼容性要盯紧
虽然共享目录省了麻烦,但PHP5和PHP7的语法差异不小(比如mysql_*函数在PHP7中被移除,魔术方法、错误处理的逻辑变化等)。开发时尽量写兼容两者的代码,或者用版本判断处理差异,比如:if (version_compare(PHP_VERSION, '7.0.0', '<')) { // PHP5兼容逻辑 $conn = mysql_connect($host, $user, $pass); } else { // PHP7+逻辑 $conn = mysqli_connect($host, $user, $pass); } - 缓存和临时文件要注意
两个Apache实例可能有各自的缓存(比如OPcache),如果修改代码后看不到变化,可以重启对应的Apache服务,或者在开发阶段暂时关闭OPcache。 - 权限问题别忽略
确保两个Apache服务的运行用户都有对共享代码目录的读写权限,不然可能会出现日志无法写入、上传文件失败等问题。
内容的提问来源于stack exchange,提问作者MSaif

