PBOOTCMS升级到PHP 8X之后,城市分站404如何解决
时间:2026-10-27 访问量:1093
升级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> 正在加载评论…