分类目录归档:DEDECMS技巧

DEDECMS技巧

修改 帝国CMS 后台的用户名和密码 注意salt1和salt2的值需要修改

帝国CMS 修改密码 

1:进入phpmyadmin 

2:找到 phome_enewsuser 数据表phome为数据库表前缀

3:修改 phome_enewsuser 表中的如下四个字段的值 username:adminpassword:28faed7bf0c97624ad3b8737b6947e41

salt1:fy1rWNIJ

salt2:pzNVrEdbkRJ2W6bvxpVo  

修改完后,

后台的账号为:admin 密码:admin888

调用文章简介[field:description /]如何限制字数

在用织梦系统时,用[field:description /]标签调取文章简介时,限制字数的方法有下面3种:

第一种方法:(推荐,可加省略号)
[field:description function=’cn_substr(Html2text(“@me”).”…”,80)’/] 调用现成的cn_substr()字符串截取函数来实现,80为限制字节数(一个汉字等于2个字节);

第二种方法:(推荐!)
 使用 [field:infos/] 代替 [field:description/] 在 arclist 标签内设定 infolen=’30’ 来设定长度;

第三种方法:
织梦默认[field:description/]长度为255个字节,如果想调取更多的字节需要更改以下文件:

dede 文件下的 article_add.php 和 article_edit.php
$description = cn_substrR($description,250);
把250改为你想要的字节 2个字节等于一个中文字符

或者修改数据库表单
dede_archives 里面的 description
把原来的 varchar(255) 改为想要的。

图集之列表/频道页等调用图集里的内容图片和注释

日前在一个项目中需要在图集列表点击每个图集的缩略图弹出当前的所有图片和注释,呈现那种画廊样式。

找了很多一直没找到合适的,若水印象网络工作室终于找到一个合适的并成功改写。

{dede:arclist typeid=5 orderby=’pubdate’ row=4}
[field:title/]

[field:id function=”Getimgs(@me,80,80,9)” /]

{/dede:arclist}

首先修改调用的部分

////循环输出多张图片
function Getimgs($aid, $imgwith = 300, $imgheight = 270, $num = 0, $style = ”){
global $dsql;
$imgurls = ”;
$row = $dsql -> getone(“Select imgurls From#@__addonimages18 where aid=’$aid'”); //
$imgurls = $row[‘imgurls’];

// preg_match(“‘alt=(.+)border'”, $imgurls,$array);
//preg_replace(“/\’/”,”, $array[1]);

 preg_match_all("/{dede:img (.*)}(.*){\/dede:img/isU", $imgurls, $wordcount);
 $textinfo = $wordcount[1];
 $count = count($wordcount[2]);
 if ($num > $count || $num == 0){
    $num = $count;
}

for($i = 0;$i < $num;$i++){
    if($style == 'li'){
        $imglist .= "<li><ahref=#" . $i . "><imgsrc=". trim($wordcount[2][$i]) . " width=" . $imgwith . " height=" . $imgheight . "></li></a>";
    }else{
        $textinfoe=$textinfo[$i];
        $textinfoee=explode(" ",$textinfoe);
        $imglist .= "<a href='" . trim($wordcount[2][$i]) . "' rel='works".$aid."' workstitle='".substr($textinfoee[1],6,-1)."'></a>";
    }
}
 return $imglist;
 }

分析以上的代码,最后一个if判断里我用的是else里的内容。
不要被我的代码迷惑了,那个A其实是一个特效,里边 trim($wordcount[2][$i]) 是用来获取图片地址,.substr($textinfoee[1],6,-1) 是用来获取注释,只要明白这两个的用途就可以构造自己想要的结果了,我的输出是这样的

dede去掉(禁止)首页index.html默认访问 最终显示index.php

织梦系统,如果我服务器设置 默认首页文档读取 index.php ,但是 dede系统index.php是 如果存在index.html 就转到index.html

后台更新首页-动态,只是删除index.html而已

image.png

但是如果你的程序被挂马了,又没有找到挂马,有一种挂马就是自动会生成index.html,此时你设置动态浏览都无用,因为删除了立马重新生成新的挂马index.html

所以  如果我不改index.php  还是会转到访问index.html

按照如下方式修改 index.php,让index.php没有识别存在 index.html的功能,让服务器或空间的默认首页文档 来判断是否用 index.html还是index.php来作为首页显示

解决办法:

直接将 index.php 改成如下代码

<?php
/**
 * @version1        $Id: index.php 1 9:23 2010-11-11 tianya $
 * @package        DedeCMS.Site
 * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 * @默认文档index.html 改为服务器判断,而不是index.php判断 wangsir 20180915  http://www.webuc.cn/w/dede/4204.html 
 */
if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
{
header('Location:install/index.php');
exit();
}
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.partview.class.php";
$GLOBALS['_arclistEnv'] = 'index';
$row = $dsql->GetOne("Select * From `dede_homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartView();
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$pv->Display();
?>

默认index.php代码备份

<?php
/**
 * @version        $Id: index.php 1 9:23 2010-11-11 tianya $
 * @package        DedeCMS.Site
 * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 */
if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
{
    header('Location:install/index.php');
    exit();
}
//自动生成HTML版
if(isset($_GET['upcache']) || !file_exists('index.html'))
{
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    require_once DEDEINC."/arc.partview.class.php";
    $GLOBALS['_arclistEnv'] = 'index';
    $row = $dsql->GetOne("Select * From `dede_homepageset`");
    $row['templet'] = MfTemplet($row['templet']);
    $pv = new PartView();
    $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
    $row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
    if ($row['showmod'] == 1)
    {
        $pv->SaveToHtml(dirname(__FILE__).'/index.html');
        include(dirname(__FILE__).'/index.html');
        exit();
    } else { 
        $pv->Display();
        exit();
    }
}
else
{
    header('HTTP/1.1 301 Moved Permanently');
    header('Location:index.html');
}
?>

【dedecms目录权限】织梦文件夹写入读取执行安全设置

下面是www.maxwo.com 华英雄 总结的dedecms全部目录的权限设置(根据centos、linux系统),免去大家的一一对照,已经进行了归类

前序:后台和index.php做如下调整

后台——更新主页——首页模式——动态浏览

然后index.php 按照下面教程修改

dede去掉(禁止)首页index.html默认访问 最终显示index.php-帮助教程 – 站长中心 https://www.maxwo.win/archives/794 

读取、执行 – 544/555(阿里云主机)   所有者 root

根目录 wwwroot 或 web 

/templets【模板目录】,需要修改模板的时候再+写入权限(744)

/include 【主程序目录】 544

/plus 【插件目录】 544

/dede 【后台程序目录,如果使用了图集模型就需要写入权限,普通文章不需要写入

/data 不含子目录 

/uploads 不含子目录 

其他以下未特别说明的都使用默认继承根目录的权限544

写入、读取、执行 – 744 所有者 www

/a/html/w 【HTML文档默认目录】

/data 【站点缓存数据等文件】

/uploads 【附件目录】

/member 【会员目录】 如果没有会员 请删除此目录

读取权限 – 444  – 所有者 root

/index.php  首页文件一定不要写入权限,否者被挂马首页就糟了

data/common.inc.php

如果非要生成index.html   权限 644

需要删除的目录:

/install

/m

/special

——–下面是不常用模块 ———–

/company 【企业黄页程序目录】

需求读取和执行权限 //建议去掉写入权限//0555

/ask 【问答模块程序目录】

需求执行和读取权限 //建议去掉写入权限//0555

/group 【圈子模块程序目录】

需求执行和读取权限 //建议去掉写入权限 //0555

/special 【专题文件目录】

需求执行、读取、写入和修正权限 //0755

/book 【书库模块程序目录】

需求执行、读取、写入和修正权限 //0755

[性能测试]免费IP归属地查询接口汇总

目前做一个项目,需要判断是国内还是国外IP,具体要求为接口稳定,速度快,免费,不异常。所以我整理了优质的接口供大家筛选。

一、淘宝API接口

http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]

ip参数中添加你要查询的ip,返回数据为json格式。包括国家地区运营商等数据。

{"code":0,"data":{"ip":"221.218.209.125","country":"中国","area":"","region":"北京","city":"北京","county":"XX","isp":"联通","country_id":"CN","area_id":"","region_id":"110000","city_id":"110100","county_id":"xx","isp_id":"100026"}}

测评结果:

查询到: 110 未查询到: 0 报错: 890 执行时间 314.29S

二、ip-api接口

可以调用http://ip-api.com/json/接口查询域名,默认为当前请求的IP

# 国际化英文显示
http://ip-api.com/json/
# 修改语言编码
http://ip-api.com/json/?lang=zh-CN
# 修改IP信息
http://ip-api.com/json/115.191.200.34?lang=zh-CN

返回数据为json格式。包括国家地区运营商等数据。

{"as":"AS6106 University of California, Riverside","city":"里弗赛德","country":"美国","countryCode":"US","isp":"University of California, Riverside","lat":33.9473,"lon":-117.4008,"org":"University of California, Riverside","query":"169.235.24.133","region":"CA","regionName":"加利福尼亚州","status":"success","timezone":"America/Los_Angeles","zip":"92521"}

测评结果:

没有测试完,应该是有调用量限制,不过一开始查询比淘宝快。

三、搜狐IP地址查询

http://pv.sohu.com/cityjson
# 设置编码
http://pv.sohu.com/cityjson?ie=utf-8

当前只能查到区域信息,数据划分不是很明确:

var returnCitySN = {"cip": "221.218.209.125", "cid": "110108", "cname": "北京市海淀区"};

四、太平洋IP地址查询

太平洋IP地址库API接口为:

http://whois.pconline.com.cn/ipJson.jsp?ip=xxx.xxx.xxx.xxx&json=true

查询到数据如下:

{"ip":"221.218.209.125","pro":"北京市","proCode":"110000","city":"北京市","cityCode":"110000","region":"海淀区","regionCode":"110108","addr":"北京市海淀区 联通ADSL","regionNames":"","err":""}

太平洋IP查询的更多接入方式查看http://whois.pconline.com.cn/

测试结果:

查询到: 1000 未查询到: 0 报错: 0 执行时间 68.51S

测试结果

国内使用,

  • TOP1 太平洋IP为最优选择,国内准确率高,同时可以判断出国家
  • TOP2 淘宝API可用于国内查询,国外经常报错,速度不是太快
  • TOP3 ip-api接口,精确度高,但是速度不稳定,如果你对查询精度要求高,可以使用这个接口。
  • TOP4 搜狐IP没法测试

测试代码:

import requests
import random
import json
import time

i = 0
has = 0
nohas = 0
error = 0
start = time.time()
while i < 1000:
    i += 1
    ip = "115."+str(random.randint(1,199))+"."+str(random.randint(1,199))+"."+str(random.randint(1,199))
    try:
        response = requests.get(url="http://ip.taobao.com/service/getIpInfo.php",params={"ip":ip})
        texts = response.text
        infos = json.loads(texts)
        print(infos)
        country = infos["data"]["country"]
        if country:
            has += 1
        else:
            nohas += 1
    except:
        error += 1
end = time.time()
execution_time = end-start
print("查询到:",has,"未查询到:",nohas,"报错:",error,"执行时间",execution_time)

国内大型网站提供的 IP API接口调用方法

今天群里有人问到 IP API 的调用方法,他说一些实用的jQuery代码片段中的 jQuery得到用户IP 不起作用。我查看了下,调用没有问题,于是想到应该是 GWF 干的好事。如我上网经常在墙外,调用结果如下:

关于这个不多说了,越说越气愤。我们看看如何使用国内几个门户网站提供的 IP API 的使用方法,我个人不喜欢腾讯提供的,它使用的是gb2312编码,这里仅以搜狐提供的 IP API 说明下。使用时,可先将地址拷贝到浏览器中看下返回结果,在进行合理的调用。如调用搜狐提供的 IP API 方法如下:


结果如下:

群里朋友使用时不注意返回类型,从而使用getJSON来获取结果,导致失败。以下是几大门户网站提供的 IP API 地址:

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress
新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=219.242.98.111
搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson
搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8
搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip
淘宝的IP接口地址: http://ip.taobao.com/instructions.php 
还有一个 API比较全面 
http://whois.pconline.com.cn 这个很强大 也比较详细 
但是这个有问题 他JSON格式 属于回调 

在自定义表单中获取提交者的IP地址信息

有时候我们需要在自定义表单中获取访问者的ip地址信息,那么要怎么实现呢?

1、首先我们在后台自定义表单中建立一个字段为:uip

2、在自定义表单中的写法如下,把uip这个字段作为隐藏字段:

<input type="hidden" name="uip" id="uip" value="">
<script type="text/javascript" src="http://pv.sohu.com/cityjson/getip.aspx" charset="utf-8"></script>
<script type="text/javascript">
var ip=returnCitySN.cip+"-"+returnCitySN.cname;
document.getElementById("uip").value=ip;
</script>

正则表达式的用法 VSCODE 集合

NO1.批量匹配替换路径改为一个路径

img width=”258″ height=”180″ alt=”(.*)” src=”\/uploads\/allimg\/(.*).jpg”

 

img width=”258″ height=”180″ alt=”(.*)” src=”/image/1-140PF916234L.jpg”

 

由于项目文件目录整改,需要将文件中所有的引用路径进行更改,比较快捷的方法便是使用 vscode 的正则匹配进行批量查找、替换。

原本文件路径为 ../../assets/图片名.png

现在想改为 ../../assets/img/图片名.png

查找的正则表达式:..\/assets\/(.*).png

替换的表达式:../assets/img/$1.png

 

831280-20190411182605715-250856227

DEDE判断文章是否有‘头条’、‘推荐’等属性,然后加上相应的小图标或标志

以下的代码的目的是给加了自定义属性的文章动态的添加一个相应的小图标或者其他的标志,如果只给文章循环列表加一个flag=’c’这类的 属性,在最终的文章列表里只能显示加了有相应自定义属性的文章,而其他文章或加了其他属性的文章则不会显示出来,这显然不是我想要的效果,我想要的效果是不管文章加没有加属性或者加的是什么属性,都要在文章列表里显示出来,并且将加有属性的文章用相应的图标或标准区分开来。效果图如下:

第一种样式:
[field:flag runphp='yes']
$a=explode(',','@me');
if($a[0]=='c'){
@me='<span class="badge pull-right" style="background-color:#00F03D">推荐</span>';
}else if($a[0]=='h'){
@me='<span class="badge pull-right" style="background-color:#8080FF">头条</span>';
}else if($a[0]=='a'){
@me='<span class="badge pull-right" style="background-color:#FF8040">热门</span>';
}else{
@me='';
}
[/field:flag]

第二种样式:
[field:flag runphp='yes']
if(stristr(@me,"c")) @me = "[^_^推荐]";
else if(stristr(@me,"a")) @me = "[^_^热门]";
else if(stristr(@me,"h")) @me = "[^_^头条]";
else @me = '';
[/field:flag]