封面:恵&帆波(Pixiv ID:71713820)
当我发现 PHP8 已经 Release 的时候,我已经火星了。PHP8 引入了一系列 exciting 的特性(虽然这还是改变不了它比较屎的本质),于是我就希望火速在开发环境用上 PHP8。
我这边的垃圾环境是 AppServ 一键包 v8.6.0,自带 PHP5.6 和 PHP7.1,Apache 版本是 2.4,都还是能达到及格线的水平,但 PHP8 就得自己想办法了。
那么第一步当然是下载。我这边的开发环境是 Windows,需要注意 PHP8 需要 VS16(也就是 VC2015-2019)运行库,可以在微软官网下载(x86 x64)。
把下载到的 PHP8 压缩包解压到 AppServ/php8
之类的位置,方便后续操作。
然后我们需要新建 php.ini
。由于是开发环境使用,我直接复制 php.ini-development
为 php.ini
使用。特别注意最好修改其中 extension_dir
配置项,使用绝对路径将其指向 AppServ/php8
,例如:
extension_dir = "F:\AppServ\php8\ext"
到现在 PHP8 方面的准备工作完成了,可以尝试执行 PHP8 的 Interactive Shell 小小过瘾一把。(在 PHP8 安装目录下打开终端,执行 ./php -a
)
下面需要完成 Apache 和 PHP8 的对接工作。第一步是备份 httpd.conf
,第二步是检查你的备份是不是真的备份好了,第三步是确认你备份了 httpd.conf
。
httpd.conf
在 Apache 安装目录的 conf
文件夹中。
备份完毕之后,打开 httpd.conf
,找到类似这样的一段:
<IfModule mod_php7.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
复制一遍添加在下方,把 mod_php7.c
中的 7
删掉,改为下面这个样子:
<IfModule mod_php.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
保存。这样准备工作也完成了,下面找到 AppServ/php5/extras/swver.php
文件,这是用于切换 PHP 版本的脚本,目前它应该只支持在 PHP5 和 PHP7 之间切换,把它改成这样:
<?php
error_reporting(0);
$conf = "F:/AppServ/Apache24/conf/httpd.conf";
$php5ini = "F:/AppServ/php5/";
$php7ini = "F:/AppServ/php7/";
$php8ini = "F:/AppServ/php8/";
echo "\n";
echo " Change PHP version for AppServ\n\n";
AppServCMD();
function AppServCMD() {
global $conf, $php5ini, $php7ini, $php8ini;
define('STDIN', fopen("php://stdin", "r"));
echo " Please choose your PHP Version : ";
echo "\n";
echo " 5) PHP 5.6\n";
echo " 7) PHP 7.1\n";
echo " 8) PHP 8.0\n";
echo " 0) Exit\n";
echo "\n";
echo " Select choice : ";
$input = trim(strtolower(fgets(STDIN)));
$input = ereg_replace('\"', "\\\"", $input);
$input = ereg_replace('\'', "\'", $input);
// $len = strlen($input);
switch ($input) {
case "5":
$ver = "5.6";
break;
case "7":
$ver = "7.1";
break;
case "8":
$ver = "8.0";
break;
case "0":
echo "\n\n\n\n Okay do nothing...... bye\n\n\n\n";
sleep(5);
exit;
break;
default:
echo "\n You must choose 5, 7 or 8 only !!!";
echo "\n Please try again.....";
sleep(5);
exit;
break;
}
echo "\n Please wait .............\n\n";
echo "\n Changing to PHP version -------> $ver <--------\n\n";
exec("net stop apache24");
$file = file($conf);
$data = "";
foreach ($file as $vars) {
if (preg_match("/LoadModule php/", $vars)) {
switch ($input) {
case "5":
$vars = preg_replace("/php\\d/", "php5", $vars);
$vars = str_replace("php_module", "php5_module", $vars);
break;
case "7":
$vars = preg_replace("/php\\d/", "php7", $vars);
$vars = str_replace("php_module", "php7_module", $vars);
break;
case "8":
$vars = preg_replace("/php\\d/", "php8", $vars);
$vars = str_replace("php8_module", "php_module", $vars);
break;
default:
break;
}
// echo "$vars";
}
if (preg_match("/PHPIniDir/", $vars)) {
switch ($input) {
case "5":
$vars = "PHPIniDir \"$php5ini\"\r\n";
break;
case "7":
$vars = "PHPIniDir \"$php7ini\"\r\n";
break;
case "8":
$vars = "PHPIniDir \"$php8ini\"\r\n";
break;
default:
break;
}
// echo "$vars";
}
$data .= $vars;
}
### Write to httpd.conf
$handle = fopen("$conf", "w");
fwrite($handle, $data);
fclose($handle);
sleep(2);
exec("net start apache24");
echo "\n ########## Completed ##########\n\n\n\n";
sleep(2);
} // end function
保存后运行开始菜单中的“PHP Version Switch”,选择 8
,不出意外的话就 OK 了。
如果出了意外,用备份的 httpd.conf
覆盖目前的,然后洗洗睡吧。
版权声明:本文是原创文章,版权归 无限UCW 所有。
本文链接:https://ucw.moe/archives/using-php8-in-old-appserv.html
本站所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由地转载和修改,但请务必注明文章来源并且不可用于商业目的。
赞一个
十分感谢, 已配置成功,
话说 httpd.conf 的LoadModule php_module
php8 居然不是LoadModule php8_module.
PHP8 官方发布的编译好的版本中模块名是不带版本号的,我当时也被这个坑了一下
说点儿啥~
php都8了?!?!震惊体