我只是尝试从 php7.4 切换到 php8.2,如下更改 .httaccess:
DirectoryIndex index.php
AddHandler application/x-httpd-php82 .php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
我没有成功。这是
的输出sudo update-alternatives --config php
.htaccess 存储在与 info.php 存储相同的文件夹中。为什么没有使用 php8.2 版本?我想根据用于不同子域的代码在不同的 php 版本之间切换。这是 info.php 的输出:
这是 Vhost 的提取:
<Directory /var/www/testshop.leitner-sales.at>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
首先,欢迎来到 Stack Overflow,很高兴你能更新,虽然有点晚了;P 你会喜欢 php ^8。
现在通常 php 可以通过多种方式运行,例如 CLI 和 GUI(服务器上下文)。在带有
apache
的 php
的库存安装中,用户请求将转发到 PHP 的 .so
文件。这个文件其实就是用C写的源码直接编译PHP的神器。
这就是说如果您还没有重新启动
apache
,可能找不到新编译的处理程序。
让我们深入挖掘一下。您将 apache 中的
handler
添加到 .htaccess
文件中,这是我从未见过的,但此处理程序定义(又名它指向的可执行文件)是在服务器配置中定义的。通常是httpd.conf
。很多东西不能添加到 .htaccess
中,但必须在启动时加载,而不是调用时加载。当您在命令行中输入 php
时,您实际上使用的是与 apache 不同的可执行 php。因此你的 php-cli
vs php-cgi
。
# In httpd.conf or a configuration file included by it
<IfModule mod_php7.c>
AddHandler application/x-httpd-php74 .php
Action application/x-httpd-php74 /cgi-bin/php74-cgi
</IfModule>
<IfModule mod_php8.c>
AddHandler application/x-httpd-php80 .php
Action application/x-httpd-php80 /cgi-bin/php80-cgi
</IfModule>