Php5打不开php7网站,PHP5.x升级到PHP7.x后Drupal网站出现的问题

我记忆中我们从2010年开始使用Drupal搭建网站,从开始的Drupal 6到随后主流的Drupal 7再到目前最新的Drupal 8,始终都是使用的PHP 5.x,前几年PHP 7刚刚出来的时候我们也安装过,但发现网站很多报错后就退回了PHP 5.x。

今年Drupal 8的最新版本已经说了不再支持PHP 5.x,需要升级到PHP 7.x,再加上我们看了一些文章说PHP 7的性能比PHP 5提升几倍,这对我们也很有吸引力,想到迟早也得升级的,于是再次尝试升级PHP版本。

a84129f7fba6b6269f37bb53b042bf19.png

PHP 7的安装、与Apache、MySQL的配合等都是我们同事来负责的,安装memcached插件的时候好像遇到一些问题,耗费了一些时间,不过后来都克服了。然后我来查看服务器上的Drupal站点,马上看到了各种问题,下面来一一记录问题和解决的办法:

开始网站都打不开了,显示配置文件settings.php中报错,是数组的一个问题,是我们的写法不规范,原来PHP 5有一定容错性,但PHP 7检查更严格,我们修改后解决:

if (!is_array($databases['default']['default']['prefix'])) $databases['default']['default']['prefix'] = array();//这是新增的一行

​$databases['default']['default']['prefix']['default'] = '';

变量类型报错:Notice: A non well formed numeric value encountered in,这也是PHP 7对语法检查更严格了,解决办法是添加intval函数将文本变量转为整形变量:

$nid = arg(1);

改为

$nid = intval(arg(1));

与上面一样的报错,但出现在Drupal的第三方插件中,解决办法与上面类似,去修改这个地方改变变量类型:

Notice: A non well formed numeric value encountered in views_litepager_plugin_pager_lite->pre_render()

舍弃的函数写法:

Deprecated function: Function create_function() is deprecated in views_php_handler_area->render

这个问题处理起来麻烦一些,下面详细些记录,报错截图如下:

7ecde85eaa7db327cc188b395845cab7.png

- $function = create_function('$view, $handler, $results', ' ?>' . $this->options['php_output'] . '<?php ');

+ $code = $this->options['php_output'];

+ $function = function($view, $handler, $results) use ($code) {

+ eval('?>' . $code);

+ };

- $function = create_function('$view, $handler, &$static', $this->options['php_setup'] . ';');

+ $code = $this->options['php_setup'];

+ $function = function($view, $handler, &$static) use ($code) {

+ eval($code);

+ };

折腾了几个小时,算是把目前发现的一些报错都消除了,后面还要再继续检查Drupal日志、Apache报错日志等,并让同事检查、留意是否还有报错,如果遇到问题继续修复并记录到这里来。观察几天后,如果没有问题就可以再到其它服务器上安装PHP 7,到时候还要看MediaWiki是否可以顺利迁移到PHP 7。

2019-6-18补充:还可以在程序中添加:error_reporting(E_ALL ^ E_DEPRECATED); 来让这种报错不显示,或者在php.ini里面设置error_reporting = E_ALL &~E_NOTICE &~E_DEPRECATED。

$arrContextOptions = array(

"ssl" => array(

"verify_peer" => false,

"verify_peer_name" => false,

),

);

$response = file_get_contents("https://maps.co.weber.ut.us/...json", false, stream_context_create($arrContextOptions));

echo $response;

?>

2019-7-3补充:Warning: count(): Parameter must be an array or an object that implements Countable 在 composer_manager_sa_requirements() (行 35 在 /mnt/gb/www/emoji/sites/all/modules/composer_manager/composer_manager_sa/composer_manager_sa.install). 这个报错,修改composer_manager_sa.install,多加一行:

...

elseif ($vulnerabilities === NULL) {

$severity = REQUIREMENT_WARNING;

$description = $t('Composer security check is waiting to run on cron.');

$vulnerabilities = array();//jamesqi 2019-7-3

}

else {

$severity = REQUIREMENT_ERROR;

$formatted = composer_manager_sa_plain_text($lock_file, $vulnerabilities);

$description = '

' . check_plain($formatted->fetch()) . '
';

}

$requirements['composer_manager_security_advisories'] = array(

'title' => $t('Composer library security updates'),

'value' => format_plural(count($vulnerabilities), '@count security advisory.', '@count security advisories.'),

'description' => $description,

'severity' => $severity,

);

...

2019年7月17日补充:error.log中出现PHP Fatal error:  Uncaught Error: Call to undefined function cache_get() in /.../includes/module.inc:762这种报错,可能是settings.php是老版本drupal 6基础上修改的,需要用新版本drupal 7的基础上修改来覆盖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值