外贸网站建设,外贸网站建设公司,跨境电商独立站

PBOOTCMS升级到PHP 8X之后,城市分站404如何解决

时间:2026-10-24   访问量:1005

升级PHP 到8.2 以后,发现城市分站无法打开了。

分别是前台的分站和后台的设置页面都无法打开。

一:前台修复代码在:apps/home/controller中的,ParserController.php,第290行左右。  // 分站公司信息处理 

原来的旧代码是:

if($this->config('city_status') && cookie('city')){
                $data2 = unserialize($this->model->getCityCompany(cookie('city')));
                if($data2 = array_filter($data2)){
                    $data = array_replace($data, $data2);
                }
            }


请修改成:

 if($this->config('city_status') && cookie('city')){
                $company = $this->model->getCityCompany(cookie('city'));
                $data2 = is_string($company) && $company !== ''
                    ? @unserialize($company, array('allowed_classes' => false))
                    : false;
                // 未配置或无效的分站公司信息沿用主站,避免 PHP 8 对非数组抛出 TypeError。
                if(is_array($data2) && ($data2 = array_filter($data2))){
                    $data = array_replace($data, $data2);
                }
            }


对于一些较早的程序,以上的代码可能无效,请使用以下的代码:

 if($this->config('city_status') && cookie('city')){
                $cityinfo = $this->model->getCityInfo(cookie('city'), 'company');
                $company = isset($cityinfo->company) ? $cityinfo->company : '';
                $data2 = is_string($company) && $company !== ''
                    ? @unserialize($company, array('allowed_classes' => false))
                    : false;
                // 未配置或无效的分站公司信息沿用主站,避免 PHP 8 对非数组抛出 TypeError。
                if(is_array($data2) && ($data2 = array_filter($data2))){
                    $data = array_replace($data, $data2);
                }
            }


后台的view视窗中,citysort.html中也需要修改。

找到城市参数的DIV,并修改为:

  <!-- 城市参数 -->
            <div class="layui-tab-item">
                <form action="{url./admin/Config/index}" method="post" class="layui-form">
                    <input type="hidden" name="formcheck" value="{$formcheck}">
                    <div class="ant-alert ant-alert-info">
                        <i class="fa fa-info-circle anticon ant-alert-icon" aria-hidden="true"></i><span class="ant-alert-message">注意:如果你操作了导入初始数据,将会<a>清空现有城市表所有数据</a>并导入初始数据:23个省、5个自治区、4个直辖市、2个特别行政区、694个市级别(包含县级市)!!!</span>
                        <a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-danger import-defaultdata" style="color:#fff">导入初始数据</a>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">城市分站状态</label>
                        <div class="layui-input-block">
                            <input type="radio" name="city_status" value="1" {if(get_config('city_status')=='1' )} checked="checked" {/if} title="启用" lay-filter="city_status">
                            <input type="radio" name="city_status" value="0" {if(get_config('city_status')=='0' || get_config('city_status')=='' )} checked="checked" {/if} title="禁用" lay-filter="area_path">
                            <span class="layui-icon layui-icon-about tips" data-content="启用后访问指定URL进入指定城市分站。例如/guangdong.html进入广东分站"></span>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">分站首页标题</label>
                        <div class="layui-input-block">
                            <input type="text" name="city_index_title" placeholder="请输入城市分站首页标题,不填默认调用全局标题" value="{fun=get_config('city_index_title')}" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">分站首页关键字</label>
                        <div class="layui-input-block">
                            <input type="text" name="city_index_keywords" placeholder="请输入城市分站首页关键字,不填默认调用全局关键字" value="{fun=get_config('city_index_keywords')}" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">分站首页描述</label>
                        <div class="layui-input-block">
                            <textarea name="city_index_description" placeholder="请输入城市分站首页描述,不填默认调用全局描述" class="layui-textarea">{fun=get_config('city_index_description')}</textarea>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">列表页标题</label>
                        <div class="layui-input-block">
                            <input type="text" name="city_title" placeholder="请输入城市分站列表页标题,不填默认调用全局标题" value="{fun=get_config('city_title')}" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">列表页关键字</label>
                        <div class="layui-input-block">
                            <input type="text" name="city_keywords" placeholder="请输入城市分站列表页关键字,不填默认调用全局关键字" value="{fun=get_config('city_keywords')}" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">列表页描述</label>
                        <div class="layui-input-block">
                            <textarea name="city_description" placeholder="请输入城市分站列表页描述,不填默认调用全局描述" class="layui-textarea">{fun=get_config('city_description')}</textarea>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">sitemap模式</label>
                        <div class="layui-input-block">
                            <input type="radio" name="city_sitemap" value="1" {if(get_config('city_sitemap')==1)} checked="checked" {/if} title="完全合并模式(卡到爆炸)">
                            <input type="radio" name="city_sitemap" value="2" {if(get_config('city_sitemap')==2)} checked="checked" {/if} title="单分站入口模式(推荐)">
                            <input type="radio" name="city_sitemap" value="0" {if(!get_config('city_sitemap'))} checked="checked" {/if} title="独立模式(默认)">
                            <span class="layui-icon layui-icon-about tips" data-content="完全合并模式:将所有分站页面链接都合并到主站sitemap<br>单分站入口模式:仅将分站首页链接合并到主站sitemap<br>独立模式:分站独立sitemap,例如guangdongsheng/sitemap.xml访问指定分站下的sitemap"></span>
                        </div>
                    </div>
                    <div class="layui-form-item">
                    	 <div class="layui-input-block">
                    	    <button class="layui-btn" lay-submit name="submit" value="upgrade">保存</button>
                    	    <button type="reset" class="layui-btn layui-btn-primary">重选</button>
                    	 </div>
                    </div>
                </form>
            </div>


同时,有一些网站后台登陆时,验证码不显示,可修改core中code.php

<?php
/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 * @author XingMeng
 * @email hnxsh@foxmail.com
 * @date 2017年2月7日
 *  生成验证码
 */
use core\extend\code\Code;

// 独立图片入口也会经过初始化和 WAF,须先声明模块绑定。/**********************************此处为修改的部分
defined('URL_BIND') || define('URL_BIND', 'code');
//**********************************此处为修改的部分

// 引入验证码类
require dirname(__FILE__) . '/init.php';

// 防止外部调用验证码图片
$form = $_SERVER['HTTP_REFERER'];
$host = $_SERVER['HTTP_HOST'];

// 修复Referer: 为空时 依然可以被外部调用 @LiuXiaoBai
if (is_null($form) || (strpos($form, '://' . $host) != 4 && strpos($form, '://' . $host) != 5)) {
    die('非法调用验证码!');
}

// 记录验证码
session_start(); // 启动会话

// 预定义配置
$config = array(
    'length'   => 4,
    'useZh'    => false,
    'math'     => false,
    'fontSize' => 18,
    'useCurve' => true,
    'useNoise' => true,
    'imageH'   => 45,
    'imageW'   => 120,
);

// 加载用户配置
if (file_exists(CONF_PATH . '/captcha.php')) {
    $config = require CONF_PATH . '/captcha.php';
}

// 获取单独配置
$config['fontSize'] = get('f','int') ?: $config['fontSize'];
$config['length'] = get('l','int') ?: $config['length'];
$config['imageW'] = get('w','int') ?: $config['imageW'];
$config['imageH'] = get('h','int') ?: $config['imageH'];
$config['useCurve'] = get('c','int') ? false : $config['useCurve'];
$config['useNoise'] = get('n','int') ? false : $config['useNoise'];

// 验证码类型
$type = get('t','int');
switch ($type)
{
case "1": // 随机验证码
    $config['useZh'] = false;
    $config['math'] = false;
    $rand = mt_rand(1, 3);
    if($rand == 2) {
        $config['useZh'] = true;
    }
    if($rand == 3) {
        $config['math'] = true;
    }
    break;
case "2": // 中文验证码
    $config['useZh'] = true;
    $config['math'] = false;
    break;
case "3": // 算术验证码
    $config['useZh'] = false;
    $config['math'] = true;
    break;
}

// 中文字体未随源码部署时,回退为英文验证码,避免 dir() 失败中断图片输出。/**********************************此处为修改的部分
$zhFontPath = dirname(__FILE__) . '/extend/code/assets/zhttfs/';
if ($config['useZh'] && !glob($zhFontPath . '*.ttf') && !glob($zhFontPath . '*.otf')) {
    $config['useZh'] = false;
}
///**********************************此处为修改的部分

// 初始化验证码
$code = new Code($config);
$code->doimg();
session('checkcode', $code->getCode());


上一篇:让PB网站后台文章列表默认按sorting排序

下一篇:没有更多

正在加载评论…