如何让Drupal 6单独使用PHP 5.6,其余项目保留PHP 7.2.3?
当然可以做到!针对你Ubuntu 16.04服务器的情况,我分Apache和Nginx两种最常用的服务器环境,整理了具体操作步骤:
如果你用的是Apache服务器
Ubuntu 16.04上的Apache搭配php-fpm是实现多PHP版本共存的最优方案,步骤如下:
确保PHP 5.6-FPM正常运行
先检查服务状态:sudo systemctl status php5.6-fpm如果没安装,直接执行安装命令:
sudo apt-get install php5.6-fpm启动并设置开机自启:
sudo systemctl start php5.6-fpm sudo systemctl enable php5.6-fpm给Drupal 6站点单独配置PHP版本
找到你的Drupal 6站点的Apache配置文件(一般在/etc/apache2/sites-available/目录下),打开后在<VirtualHost>块里添加这段配置,强制该站点使用PHP 5.6-FPM:<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost/" </FilesMatch>要是不知道PHP 5.6-FPM的sock路径,去
/etc/php/5.6/fpm/pool.d/www.conf里找listen这一行就行,或者临时建个phpinfo.php查一下。重启Apache生效
sudo systemctl restart apache2
如果你用的是Nginx服务器
Nginx本身不处理PHP请求,都是转发给php-fpm,所以配置起来更直接:
确认PHP 5.6-FPM状态
和Apache环境一样,先确保服务在运行:sudo systemctl status php5.6-fpm没安装的话执行安装命令:
sudo apt-get install php5.6-fpm修改Drupal 6站点的Nginx配置
找到站点的Nginx配置文件(通常在/etc/nginx/sites-available/),找到处理PHP请求的location ~ \.php$块,把原来指向PHP 7.2-FPM的fastcgi_pass改成PHP 5.6的sock路径:location ~ \.php$ { include snippets/fastcgi-php.conf; # 替换成PHP 5.6-FPM的sock路径 fastcgi_pass unix:/run/php/php5.6-fpm.sock; }同样,sock路径不对的话去
/etc/php/5.6/fpm/pool.d/www.conf里找listen的值。验证配置并重启Nginx
sudo nginx -t sudo systemctl restart nginx
验证配置是否成功
在Drupal 6站点根目录新建一个phpinfo.php文件,内容:
<?php phpinfo(); ?>
访问这个文件,看页面里的PHP Version是不是5.6就知道了。记得用完删掉这个文件,别留安全隐患!
另外说一句,你之前遇到的mbstring.http_input报错,本质是Drupal 6和PHP 7+兼容性极差——PHP 7.0及以上已经移除了mbstring.http_input这类全局配置项,切换到PHP 5.6后这个问题会自动消失,正好完美适配Drupal 6的需求。
内容的提问来源于stack exchange,提问作者user9465677

