解决tag标签生成问题
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
php7 下 要修改的
dede/
makehtml_tag_action_list.php
1、
include/
arc.taghtml.class.php
1、eregi( 替换成 preg_match( 已修改 8
2、ereg_replace 替换成 preg_replace 已修改 4
3、ereg 替换成 preg_match( 已修改 5
include/
extend.func.php:
1、eregi( 替换成 preg_match( 已修改 服务器已经替换
织梦在PHP7上报错The each() function is deprecated.解决方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是因为php7+以上版本抛弃了each函数导致,我们来纠正即可
打开报错提示文件dede/config.php对应的 on line 行数
把
while (list($key) = each($val))
改成
foreach ($val as $key => $value)
完成
织梦在PHP7后台文档关键词维护已有的关键字为空
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在PHP7环境里,织梦后台文档关键词维护检测已有的关键字为空
解决方法
打开 /dede/article_keywords_make.php , /dede/article_keywords_make.php 找到,大概在22行
$ws = $wserr = $wsnew = "";
把它改成
$ws = $wserr = $wsnew = array();
保存,完成,重新[检测已有的关键字]
织梦在PHP7更改内容模型select|radio|checkbox类型字段时附加表无法更新解决方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更改织梦内容模型 select | radio | checkbox 类型字段时附加表无法更新,导致修改文档时选择的东西又还原回第一个
那是因为在php7中,MYSQL_ASSOC不再是一个常量,需要将MYSQL_ASSOC改为MYSQLI_ASSOC
解决方法有2种
第一种方法:
网站后台 - 系统 - 系统基本参数 - 核心设置,数据库类型,改成 mysqli
第二种方法:
打开 /dede/mychannel_field_edit.php 找到,大概在88-91行
while($nrow = $dsql->GetArray('a',MYSQL_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
改成
if(version_compare(PHP_VERSION, '7.0.0', '>='))
{ while($nrow = $dsql->GetArray('a',MYSQLI_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
}else{while($nrow = $dsql->GetArray('a',MYSQL_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
}
如图
织梦在PHP7更改内容模型select|radio|checkbox类型字段时附加表无法更新解决方法
完成,重新编辑字段保存就可以了。
织梦在PHP7删除栏目提示删除成功但却没有把栏目删掉的解决方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
明明提示删除成功了,可是栏目还在后台栏目管理里,那是因为你的web环境PHP版本太高,例如PHP7的,织梦最新版本20180109还不能完全兼容PHP7,要么降低你的PHP版本为PHP5,要么修改一下这个文件
打开 /include/typeunit.class.admin.php 找到 ,大概在342行
$this->idArray = "";
改成
$this->idArray = array();
这样修改后,无论什么PHP版本都能正常删除栏目了
织梦在PHP7版本上后台会员修改会员等级为空
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是织梦官方最新程序还没有全面支持PHP7,很多地方的代码写的不够严谨导致的
要么降低你的PHP版本,要么自己动手修复这个BUG
打开 /dede/templets/member_view.htm ( dede 是后台目录 )找到
$MemberTypes = '';
改成
$MemberTypes = array();
织梦在PHP7上安装模块插件时模块包含的文件为空解决办法 安装模块插件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是织梦官方最新程序还没有全面支持PHP7,很多地方的代码写的不够严谨导致的
要么降低你的PHP版本,要么自己动手修复这个BUG
打开 /include/dedeatt.class.php 找到
var $Items = "";
改成
var $Items = array();
继续修复织梦安装后右侧模块无显示安装的模块问题,打开 /dede(后台目录)/module_main.php 找到
$sqls = @split(";[ \t]{0,}\n", $setupsql);
$sqls = @preg_split("/;[ \t]{0,}\n/", $setupsql);
改成
$sqls = @preg_split("/;[ \t]{0,}\n/", $setupsql, -1);
完成。
织梦在PHP7.0环境中为文章图片自动添加ALT属性为标题方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
织梦在PHP7.0环境中为文章图片自动添加ALT属性为标题方法,首先修改/include/extend.func.php,里面的把这段代码加进去:
//文章body优化替换
function replaceurl($newurl)
{
global $dsql,$id;
//获取图片附加表imgurls字段内容进行处
$row = $dsql->GetOne("SELECT title FROM dede_archives where id=$id");
//替换图片Alt为文档标题
$newurl=str_ireplace(array('alt=""','alt=\'\''),'',$newurl);
$newurl=preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU"," ",$newurl);
$newurl=str_ireplace("<img " ,"<img alt=\"".$row['title']."\"",$newurl);
//去掉结尾空格
$newurl=str_ireplace(" /","/",$newurl);
$newurl=str_ireplace(" />","/>",$newurl);
return $newurl;
}
然后在我们需要调用织梦文章内容的地方加上调用代码:
{dede:field.body function='replaceurl(@me)'/}
由于之前在《织梦如何去除img图片中的style width height属性》一文中,实现去高宽属性,既然我们今天用自定义函数实现了替换alt属性,那么也可以把去高宽属性的这个功能加进去,完整代码如下:
//文章body优化替换
function replaceurl($newurl)
{
global $dsql,$id;
//获取图片附加表imgurls字段内容进行处
$row = $dsql->GetOne("SELECT title FROM dede_archives where id=$id");
//去掉img的width和height
$newurl=preg_replace('/style=\"width\:(.*)\"/','',$newurl);
//替换图片Alt为文档标题
$newurl=str_ireplace(array('alt=""','alt=\'\''),'',$newurl);
$newurl=preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU"," ",$newurl);
$newurl=str_ireplace("<img " ,"<img alt=\"".$row['title']."\"",$newurl);
//去掉结尾空格
$newurl=str_ireplace(" /","/",$newurl);
$newurl=str_ireplace(" />","/>",$newurl);
return $newurl;
}
文章内容调用代码不变还是:{dede:field.body function='replaceurl(@me)'/}
织梦在PHP7.0以上环境下文章页空白的解决方法1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
织梦网站把php版本升级到7.0之后,其他地方都是正常的,而文章页详情部分是一篇空白,查看了源码,原来是此处没有调用成功,在网上查询一番得知,织梦对PHP5.4以上版本的支持都不行,很多地方都要修改,而今天要做的就是在解决在PHP7.0及以上版本环境下文章页空白的Bug。
\0织梦在PHP7.0以上环境下文章页空白的解决方法
其实很简单,只需要重写下织梦调用语法即可,推荐三种方法:
{dede:sql sql='Select body from dede_addonarticle where aid=~aid~'}[field:body/]{/dede:sql}
{dede:sql sql="Select body from `dede_addonarticle` where aid=~id~"} [field:body function='replaceurl(@me)'/]{/dede:sql}
{dede:field.id function='replaceurl(table("dede_addonarticle","body",@me))'/}
以上三种织梦调用标签代码选其一即可!
织梦升级php7解决{dede:field.body/}不解析dede:field.body失效,文章内容不显示方法2 最新版织梦已经修改过了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
网上方法是
是把{dede:field.body /}删除,使用 下面的sql 标签代码替换
{dede:sql sql="Select body from `dede_addonarticle` where aid=~id~"}
[field:body/]
{/dede:sql}
但是我觉得太麻烦,找了最新版的织梦对比了如下文件:
/include/arc.archives.class.php
加如下黄色代码即可解决,可以正常调用 {dede:field.body/}
第1231行:
// 这里可能会有错误
if (version_compare(PHP_VERSION, '5.5.0', '>='))
{
$body = @preg_replace_callback("#(^|>)([^<]+)(?=<|$)#sU", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
} else {
$body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
}
第1250行:
if (version_compare(PHP_VERSION, '5.5.0', '>='))
{
$string = $string[0];
$pre = $pre[0];
}
你的行数可能不一致。搜汉字可以找到对应位置。
结果可以显示了:
织梦php7数据库备份无结果BUG修复方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
织梦最新程序20170405版虽然兼容PHP7,但是使用过程中发现在PHP7环境下,后台-系统-数据库备份是空结果,顺藤摸瓜发现是个写法上的BUG,解决方法如下
打开 /dede/sys_data_done.php 找到
$fs = $bakStr = '';
在它的下面加入
$fs = array();
保存,修复完成。
dede 5.7升级到php 7 需要更新的文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###1811-1 更新了一些文件,兼容php7.2
/360safe/nophp.php
/include/common.inc.php (已修改)
/include/arc.archives.class.php (已修改)
/include/channelunit.class.php
/include/datalistcp.class.php
/include/dedesqli.class.php
/include/dedesqlite.class.php
/include/dedetag.class.php
/include/dedetemplate.class.php
/include/customfields.func.php
/include/common.func.php
/include/vdimgck.php
/include/helpers/util.helper.php
/dede/content_list.php
//后台无法删除栏目:/include/typeunit.class.admin.php (已修改)
line342:
$this->idArray = "";
改为:
$this->idArray = array();
//lyy18-11-1 之前上一句这里是空,php7 把数值赋值给字符串加方括号如:$string[0]直接只有一位数了而不是一个数组了
dedecms在php7下的一些常见问题
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、 无法获取错误信息,一片空白
一片空白是无法调试的,
所以要做的第一件事,
能够输出错误信息。
打开 include/common.inc.php
找到下面的代码
//error_reporting(E_ALL);
error_reporting(E_ALL || ~E_NOTICE);
改为
error_reporting(E_ALL);
//error_reporting(E_ALL || ~E_NOTICE);
主要作用是打开错误提示。
二、 ‘continue’ not in the ‘loop’ or ‘switch’ context错误
你刷新后可能遇到这个错误
Fatal error: ‘continue’ not in the ‘loop’ or ‘switch’ context in ….include/common.func.php on line 49
上面表示include/common.func.php 这个文件的49行有错误,
把 continue; 删除
改为 return;
即可
三、 函数mysql_query()未定义
mysql_*的系列函数在php7中不能再使用,
会出现下面的错误
Fatal error: Uncaught Error: Call to undefined function mysql_query() in ….include/dedesql.class.php:152
php7中需要使用mysqli或者pdo的方式,
跟数据库通信,
更安全更高效。
解决的方法
打开文件 data/config.cache.inc.php
$cfg_mysql_type = ‘mysql’;
改为
$cfg_mysql_type = ‘mysqli’;
四、后台左侧菜单空白不显示解决办法
方法一
将data目录权限设置为777或者755,注意是整个data目录,设置完毕刷新即可。
方法二
进入data/tplcache,备份一份,然后除了index.html以外全部删除,接着将data/tplcache目录设置为777,刷新即可。
PHP7.0下安装DEDE织梦 出现 GD不支持的解决方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
修改 /install/install.inc.php 中的 gdversion()函数
将其中
if(preg_match("/\bgd\s+version\b[^\d\n\r]+?([\d\.]+)/i", $module_info,$matches)) { $gdversion_h = $matches[1]; }
改成
if(preg_match("/\bgd\s+\w+\s+version\b[^\d\n\r]+?([\d\.]+)/i", $module_info,$matches)) { $gdversion_h = $matches[1]; }
原因是php7.0 “ GD library Version” 而php5.X 是:“GD Version”,正则匹配不上。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
plus下 rss.xml 已修改
描述失效:
<![CDATA[
[field:array runphp='yes']
@me = (strpos(@me['litpic'],'defaultpic') ? "": "
<a [email=href='%7B@me[%22arcurl%22]%7D']href='{@me["arcurl"]}'[/email] target='_blank'>
<img [email=src='%7B@me[%22litpic%22]%7D']src='{@me["litpic"]}'[/email] border='0' /><br />
");
[/field:array]
[field:description function='html2text(@me)'/] ...
]]>
修改成
<description><![CDATA[[field:description function='html2text(@me)'/]...<br /><b>文章分类</b>:<a href="[field:typeurl/]" target="_blank">[field:typename/]</a><br /><a href="[field:arcurl/]" target="_blank">阅读全文</a> | <a href="http://www.52tourism.com/plus/recommend.php?aid=[field:id/]" target="_blank">邮件推荐</a> | <a href="[field:arcurl/]" target="_blank">评论回复</a>]]></description>
call_user_method()(使用 call_user_func() 替代)
call_user_method_array() (使用 call_user_func_array() 替代)
define_syslog_variables() dl() ereg() (使用 preg_match() 替代)
ereg_replace() (使用 preg_replace() 替代)
eregi() (使用 preg_match() 配合 ‘i’ 修正符替代)
eregi_replace() (使用 preg_replace() 配合 ‘i’ 修正符替代)
set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime() [color=olive]session_register() (使用 $_SESSION 超全部变量替代)
session_unregister() (使用 $_SESSION 超全部变量替代)
session_is_registered() (使用 $_SESSION 超全部变量替代)
set_socket_blocking() (使用 stream_set_blocking() 替代)
split() (使用 preg_split() 替代)
spliti() (使用 preg_split() 配合 ‘i’ 修正符替代)
sql_regcase() mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代)
mysql_escape_string() (使用 mysql_real_escape_string() 替代)
废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代
. mktime() 的 is_dst 参数. 使用新的时区处理函数替代.
下面列举了部分被弃用的函数:?
????call_user_method()(使用?call_user_func()?替代)?
????call_user_method_array()?(使用?call_user_func_array()?替代)?
????define_syslog_variables()?
????dl()?
????ereg()?(使用?preg_match()?替代)?
????ereg_replace()?(使用?preg_replace()?替代)?
????eregi()?(使用?preg_match()?配合 ‘i’ 修正符替代)?
????eregi_replace()?(使用?preg_replace()?配合 ‘i’ 修正符替代)?
????set_magic_quotes_runtime()?以及它的别名函数??magic_quotes_runtime()?
????[color=olive]session_register()?(使用?$_SESSION?超全部变量替代)?
????session_unregister()?(使用?$_SESSION 超全部变量替代)?
????session_is_registered()?(使用?$_SESSION 超全部变量替代)?
????set_socket_blocking()?(使用?stream_set_blocking()?替代)?
????split()?(使用?preg_split()?替代)?
????spliti()?(使用?preg_split()?配合 ‘i’ 修正符替代)?
????sql_regcase()?
????mysql_db_query()?(使用?mysql_select_db()?和??mysql_query()?替代)?
????mysql_escape_string()?(使用?mysql_real_escape_string()?替代)?
??? 废弃以字符串传递区域设置名称. 使用?LC_*?系列常量替代.?
????mktime()?的?is_dst?参数. 使用新的时区处理函数替代.?
涉及到的主要的函数迁移如下:?
删除函数 define_syslog_variables 引用删除对函数 define_syslog_variables 的引用将变量 $LOG_ERR, $LOG_USER 等用常量 LOG_USER, LOG_USER, … 替代?
ereg, eregi?函数用?preg_match?函数替代这几个函数的函数声明int ereg ( string$pattern , string $string [, array &$regs ] ) int eregi ( string $pattern , string $string [, array &$regs ] ) intpreg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )虽然三者的第一个参数都是字符串,表示一个正则表达式,但是 preg_match 用的是 PCRE(Perl 兼容的正则表达式语法):正则表达式的两端用一个符号做边界,如 “/pattern/” 或者 “#pattern#”,eregi 是乎略大小写的匹配,转换为 preg_match,第一个参数,用PCRE的参数来乎略大小写,如:”/pattern/i” 或者 “#pattern#i”,两者的第三个参数返回的匹配的数据结构不同。ereg 的第三个参数在调用结束后,返回的是一个字符串数组,分别为完整匹配字串和各个子匹配字串。preg_match 返回的是二维数组,相当于 ereg 的字串数组中的字串在 preg_match 是一个数组,分别保存匹配值以及匹配位置。如果要进行多次匹配,PHP 提供了 preg_match_all 函数,其第三个参数的返回值则是一个三维数组.?
ereg_replace, eregi_replace?函数用?preg_replace?函数或者 str_replace 函数来替代和前面的 ereg 替换为 preg_match 类似,第一个参数要进行转换,头尾增加一个符号,如:”/pattern/” 或者 “#pattern#”, …eregi_replace 到 preg_replace 的替换,在第一个参数的后面增加正则表达式参数。如:”/pattern/i” 或者 “#pattern#i”, …如果 ereg_replace 的第一个参数不是正则表达式,可以用 str_replace 直接来替换。?
spliti?函数用?explode?或则?preg_split?函数替代split 切分字符串,如果无须用到正则表达式,使用 explode 替换是最好不过,速度最快.对于使用正则表达式切分字串,则使用 preg_split 函数替代。替代过程和 ereg/ereg_replace 类似,只是在第一个正则表达式参数中做文章,将 split 的正则表达式前后加上一个 PCRE 的分隔符号。
---------------------
<?php
if(!function_exists('ereg')) { function ereg($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/', $subject, $matches); } }
if(!function_exists('eregi')) { function eregi($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/i', $subject, $matches); } }
if(!function_exists('ereg_replace')) { function ereg_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/', $replacement, $string); } }
if(!function_exists('eregi_replace')) { function eregi_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/i', $replacement, $string); } }
if(!function_exists('split')) { function split($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/', $subject, $limit); } }
if(!function_exists('spliti')) { function spliti($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/i', $subject, $limit); } }
发表评论 取消回复