discuz去除forum.php! X3.2 data/attachment/forum/ 目录下多出了许多空白压缩文件!是被攻击了吗?

安装discuz!X1.5的的时候需要将以下目录、以及该目录下面的所有文件的属性设置为777_百度知道PHPExcel是一个非常方便生成Excel格式文件的类,官方下载包中带有大量如何生成各种样式excel文件的示例,但没有一个读取Excel文件的完整例子.Xiaoqiang根据网上的资料,整理了一份简单读取Excel文件的例子.
* @copyright
Xiaoqiang.
* @author Xiaoqiang.Wu &&
* @version 1.01
error_reporting(E_ALL);
date_default_timezone_set('Asia/ShangHai');
/** PHPExcel_IOFactory */
require_once '../Classes/PHPExcel/IOFactory.php';
// Check prerequisites
if (!file_exists("31excel5.xls")) {
exit("not found 31excel5.xls.\n");
$reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader-&load("31excel5.xls"); // 载入excel文件
$sheet = $PHPExcel-&getSheet(0); // 读取第一個工作表
$highestRow = $sheet-&getHighestRow(); // 取得总行数
$highestColumm = $sheet-&getHighestColumn(); // 取得总列数
$highestColumm= PHPExcel_Cell::columnIndexFromString($colsNum); //字母列转换为数字列 如:AA变为27
/** 循环读取每个单元格的数据 */
for ($row = 1; $row &= $highestR $row++){//行数是以第1行开始
for ($column = 0; $column & $highestC $column++) {//列数是以第0列开始
$columnName = PHPExcel_Cell::stringFromColumnIndex($column);
echo $columnName.$row.":".$sheet-&getCellByColumnAndRow($column, $row)-&getValue()."&br /&";
* @copyright
Xiaoqiang.
* @author Xiaoqiang.Wu &&
* @version 1.01
error_reporting(E_ALL);
date_default_timezone_set('Asia/ShangHai');
/** PHPExcel_IOFactory */
require_once '../Classes/PHPExcel/IOFactory.php';
// Check prerequisites
if (!file_exists("31excel5.xls")) {
exit("not found 31excel5.xls.\n");
$reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader-&load("31excel5.xls"); // 载入excel文件
$sheet = $PHPExcel-&getSheet(0); // 读取第一個工作表
$highestRow = $sheet-&getHighestRow(); // 取得总行数
$highestColumm = $sheet-&getHighestColumn(); // 取得总列数
/** 循环读取每个单元格的数据 */
for ($row = 1; $row &= $highestR $row++){//行数是以第1行开始
for ($column = 'A'; $column &= $highestC $column++) {//列数是以A列开始
$dataset[] = $sheet-&getCell($column.$row)-&getValue();
echo $column.$row.":".$sheet-&getCell($column.$row)-&getValue()."&br /&";
这边文章是转过来的 原文地址/1332/
字母列转换为数字列这个方法就是我当时遇到的问题。
PHPExcel读取excel文件示例已关闭评论
最近使用腾讯云服务器,排查问题时遇到一个磁盘告警,硬盘分区/ 只读, 出错信息:No space left on device,上服务器看了一下
inode满了, 使用 find . ! -type l 查找这个目录下小文件占满导致
/var/spool/postfix/maildrop/
清理掉就行了。
原因是什么的呢?网上找了一下 http://blog.chinaunix.net/uid--id-3163574.html。照着这个方法修改一下计划任务就可以了。
磁盘inode使用达到100% ,/var/spool/postfix/maildrop/ 目录有大量小文件已关闭评论
最近接到一些站长的反馈,说论坛上传附件,到100%的时候自己取消上传了。经查是附件索引表pre_forum_attachment表的aid字段自增值出现了问题,导致程序逻辑返回的aid值实际为一个MySQL 1062 报错:
来自网页的消息
—————————
&!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&&html&&head& &title&10.144.49.99 – Database Error&/title& &meta http-equiv=”Content-Type” content=”text/ charset=gbk” /& &meta name=”ROBOTS” content=”NOINDEX,NOFOLLOW,NOARCHIVE” /& &style type=”text/css”& &!– body { background-color: color: font: 9pt/11pt verdana, arial, sans-} #container { width: 1024 } #message { width: 1024 color: } .red {color:} a:link { font: 9pt/11pt verdana, arial, sans- color: } a:visited { font: 9pt/11pt verdana, arial, sans- color: #4e4e4e; } h1 { color: #FF0000; font: 18pt “Verdana”; margin-bottom: 0.5} .bg1{ background-color: #FFFFCC;} .bg2{ background-color: #EEEEEE;} .table {background: #AAAAAA; font: 11pt Menlo,Consolas,”Lucida Console”} .info { background: none repeat scroll 0 0 #F3F3F3; border: 0px solid # border-radius: 10px 10px 10px 10 color: #000000; font-size: 11 line-height: 160%; margin-bottom: 1 padding: 1 } .help { background: #F3F3F3; border-radius: 10px 10px 10px 10 font: 12px verdana, arial, sans- text-align: line-height: 160%; padding: 1 } .sql { background: none repeat scroll 0 0 #FFFFCC; border: 1px solid # color: #000000; font: arial, sans- font-size: 9 line-height: 160%; margin-top: 1 padding: 4 } –& &/style&&/head&&body&&div id=”container”&&h1&Discuz! Database Error&/h1&&div class=’info’&(1062) Duplicate entry &#’ for key 1&div class=”sql”&INSERT INTO forum_attachment SET `tid`=* , `pid`=* , `uid`=* , `tableid`=*&/div&&/div&&div class=”info”&&p&&strong&PHP Debug&/strong&&/p&&table cellpadding=+ cellspacing=+ width=&#%” class=”table”&&tr class=”…
—————————
我们看到实际上是一段html代码(其实如果站长关注后台的运行记录,也会有这个报错的,只不过我是先排查代码,才发现的),也就是Discuz! X的MySQL报错信息页面,这里最重要的信息就是MySQL的报错了,Discuz! Database Erro (1062) Duplicate entry &#’ for key 1 INSERT INTO forum_attachment SET `tid`=* , `pid`=* , `uid`=* , `tableid`=* 。知道了aid 1062 报错,即插入了重复的值,那么就好办了,去pre_forum_attachment 修改自增值就可以了,自增值修改成什么呢,当然要看一下aid当前的最大值多少,然后加1就是要修改的自增值了。可以在MySQL命令行执行:alter table pre_forum_attachment auto_increment = aid最大值+1 ,如果有phpMyAdmin的话,更好操作了了,这里就不多说了。至于为什么自增值会出问题,还没详细研究,不过收集的几个情况包括重启服务器,数据库迁移等操作。
有用户反馈,上传附件会提示500错误,经过排查,是服务器指定的临时目录满了,或者临时文件太多,导致读取临时上传文件失败,解决方法是清空临时目录,或者新建一个指定好文件名的临时文件夹。
pw90数据字典
pw_acloud_apis
字段名 数据类型 默认值 允许非空 自动递增 备注
id int(10) unsigned NO 是
name varchar(255) NO
template text YES
argument varchar(255) NO
argument_type varchar(255) NO
fields varchar(255) NO
status tinyint(3) 0 NO
category tinyint(3) 0 NO
created_time int(10) unsigned 0 NO
modified_time int(10) unsigned 0 NO
Discuz! X2.5的帖子表(post)新增position字段,通过执行updata.php执行升级,如果post表数据过大,会有一定概率导致position自增值不准,官网有个解决方案,但有些站点出现问题的帖子数实在太多,执行解决方案中的脚本太慢,现在把存MySQL命令给出,速度还不错。如果你执行了update.php,那么需要你去数据库中删除掉联合主键 (tid,position)和position字段,由于position有自增属性,所以需要先去掉自增属性(AUTO_INCREMENT)再进行删除。准备工作做完后,就可以执行下面的命令了,
ALTER TABLE pre_forum_post ADD `position` INT(8) UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(`tid`, `position`);
注意,我这里写的pre_是表前缀,依据你的站点数据库配置进行调整。操作之前一定要备份post表。
最近处理问题,遇到站长反馈,有部分用户出现找回密码提示“抱歉,您填写的账户资料不匹配,不能使用取回密码功能,如有疑问请与管理员联系”,出现这个问题的原因大概是因为早前有过其它应用,当时对邮件地址大小写不做限制,现在填写邮箱及用户名找回密码的时候,程序里会把用户输入的邮箱处理成小写,那么就与UCenter中保存的用户邮箱匹配不上了,最后导致了这个错误。解决方法就是把从UCenter读出来的邮箱也处理为小写的字符串,要改哪里呢?看代码:
source/module/member/lostpassword.php文件,
if($_GET['username']) {
list($tmp['uid'], , $tmp['email']) = uc_get_user(addslashes($_GET['username']));
if($_GET['email'] != strtolower($tmp['email']) { //这里加上strtolower小写函数处理就可以了。
showmessage('getpasswd_account_notmatch');//这里就是报错提示
$member = getuserbyuid($tmp['uid'], 1);
在前台群组设置简介,后台再次更新简介时,会造成html标签解析错乱;
解决方法:
找到\source\admincp\admincp_group.php,搜索:
$group = C::t(‘forum_forum’)->fetch_info_by_fid($fid);
在下面加上如下代码:
require_once libfile(‘function/editor’);
$group[‘description’] = html2bbcode($group[‘description’]);
$_GET[‘descriptionnew’] = discuzcode(dhtmlspecialchars(censor(trim($_GET[‘descriptionnew’]))), 0, 0, 0, 0, 1, 1, 0, 0, 1);
在上面加上以下代码:
require_once libfile(‘function/discuzcode’);
本文档介绍如何优化注册、完善资料流程,请注意,本文档仅适合Discuz! X2.5版本。
应用场景:Discuz! X2.5对QQ登录流程进行了修改,默认为QQ游客组,如果QQ初次登录后进行发帖或使用漫游应用时,提示权限有限,需完善资料,致使部分以QQ登录用户为主的站点用户流失严重。
主要修改思路:修改QQ首次登录后的跳转到完善资料页,并在跳转之前增加一段随机生成电子邮件地址代码,邮件地址后缀取的是网站的域名;完善资料页调用系统模版的register.htm文件,对是否为QQ首次登录做出判断,接到$_GET的电子邮件地址并隐藏显示,无需用户填写,用户名自动获取。
最近在进行大量的文件对比工作,其中需要进行文件的提取,知道了文件列表后,一个一个复制起来很麻烦,写了个脚本,代码如下:discuz >> 麻瓜程序员--Ai-WEB的博客Discuz! X3.2正式版门户文章接口
检查接口说明
1、接口文件名etchk.php,为保密,请自行修改文件名; 2、本接口文件复制在DIsucz!X网站根目录下使用; 3、主要参数   title   文章标题   catid   分类ID,用于限定检查范围,可不填,请对照管理中心查看分类ID;   vercode   安全校验码,请自行设定,并在检查接口文件开始处修改vercode使其一致;& 4、发布配置-文章检查网址处,可以如下填写:   http://您的网址/etchk.php?vercode=&catid=&title=&%title%&   注:使用大小写敏感的服务器的用户请注意网址大小写和网站文件一致 5、接口文件无须任何改动即可使用,如果你希望增加校验或其他功能,请仔细修改;& && &
检查接口代码
@$vercode=''; //此处取值请自行修改
if(isset($_POST['vercode'])){
if ($_POST['vercode']!=$vercode){
echo(&[err]invalid vercode[/err]&);
define('APPTYPEID', 0);
define('CURSCRIPT', 'search');
define('DISABLEXSSCHECK', true);
require './source/class/class_core.php';
$discuz = C::app();
$modarray = array('portal', 'forum', 'blog', 'album', 'group');
$cachelist = $slist = array();
$mod = '';
$discuz-&cachelist = $
$discuz-&init();
$mod='portal'; //zzcity add
define('CURMODULE', $mod);
//runhooks();
require_once libfile('function/search');
//require DISCUZ_ROOT.'./source/module/search/search_'.$mod.'.php';
[Discuz!] (C) Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: search_portal.php -21 05:25:03Z monkey $
//if(!defined('IN_DISCUZ')) {
// exit('Access Denied');
define('NOROBOT', TRUE);
require_once libfile('function/home');
$srchtxt =trim($_POST['title']);
$srchtxt = isset($srchtxt) ? dhtmlspecialchars($srchtxt) : '';
$catid=$_POST['catid'];
$catid=$catid ? $catid : 0;
if (empty($srchtxt)){
exit('[err]no title[/err]');
$wherestr= $catid ? & and catid=$catid & : &&;
$srchtxtsql=addslashes($srchtxt);
$query = DB::fetch_first(&SELECT aid FROM &.DB::table('portal_article_title').& WHERE title = '$srchtxtsql' $wherestr LIMIT 1&);
if(!$query) {
echo('[no]');
echo('[yes]');
发布接口说明
1、接口文件名etpost.php,为保密,请自行修改文件名;& 2、本接口文件请复制在DIsucz!X网站根目录下使用; 注:以下参数名后“=”号为示范取值而用,参数名本身不含“=”号;   固定取值的参数,可以在发布规则-参数取值中设置;   采集取值的参数项,请在发布规则-发布项中添加; 3、必填参数   username   会员名参数名      password   密码参数名      title   主题标题参数名   content &&&&内容参数名(若要进行分页请在数据整理中将ET2正文分隔标记“#-0-#”替换为discuz!&x分页标记“##########NextPage##########”或“##########NextPage[title=分页标题]&##########”)
4、主要参数   catid   文章分类编号(请对照管理中心文章分类)&。   vercode &&&&安全校验码,请自行设定,本项用以防止接口被他人利用,如果需要进行更多校验,请自行填加相关代码。
&&&&etattachs &&&&文件列表参数名,若要使用附件自动入库,缩略图、自动封面、水印等功能,则本本参数必填,该参数必须在“发布配置-发布项-文件列表发布参数名”处填写;   ashowurl=/data/attachment/portal &&&&门户文件显示URL,默认值/data/attachment/portal,通过本参数可支持更改默认附件目录以及远程文件,取值与网站后台-上传设置对应; 5、其他参数 &&&&pic &&&&封面图片网址参数,用于自行指定发布封面图片,详见第6节封面图片说明; &&&& &&&&dateline &&&&发布时间,标准日期格式,留空为当前时间。 &&&&summary& &&&&文章摘要,不使用则自动摘要; &&&&author &&&&文章作者; &&&&from&&&& &&&&文章来源 &&&&fromurl &&&&来源地址。 &&&&url &&&&跳转URL; &&&&raids[] &&&&相关文章,取值为文章id,如&raids[]=12&表示设置ID为12的文章作为相关文章,多篇相关文章格式如下: &&&&raids[]=12 &&&&raids[]=34 &&&&raids[]=112 &&&&tag[1]   聚合标签1,设值为1即可启用,如在附加参数中填写“tag[1]=1&,不用则留空;   tag[2] &&&&聚合标签2,设值为1即可启用,如在附加参数中填写“tag[2]=1&,不用则留空;   tag[3] &&&&聚合标签3,设值为1即可启用,如在附加参数中填写“tag[3]=1&,不用则留空;   tag[4]   聚合标签4,设值为1即可启用,如在附加参数中填写“tag[4]=1&,不用则留空;   tag[5]   聚合标签5,设值为1即可启用,如在附加参数中填写“tag[5]=1&,不用则留空;   tag[6] &&&&聚合标签6,设值为1即可启用,如在附加参数中填写“tag[6]=1&,不用则留空;   tag[7]   聚合标签7,设值为1即可启用,如在附加参数中填写“tag[7]=1&,不用则留空;   tag[8]   聚合标签8,设值为1即可启用,如在附加参数中填写“tag[8]=1&,不用则留空; 6、封面图片   由于discuz!&x2.5不支持外网图片做为封面,因此必须使用ET的文件下载、上传功能,通过本接口将图片入库,才能正确显示封面。   用户可以通过参数pic指定封面,也可以将参数pic留空不用,则会自动提取文件列表eattachs中的第一副图片作为封面(图片类型为jpg/gif/png/bmp)。   如果需要指定封面图片,用户使用的采集规则应有一个数据项来采集一个作为封面图片的图片网址,并在发布规则-发布项-中将该数据项与参数pic对应;
7、附件   如果要使用使用ET发布下载的附件,请在制定方案中,选择发布顺序为“先上传文件”;   本接口支持完美附件入库,用户启用ET的文件下载上传功能、并在发布配置填写文件列表参数eattachs即可自动入库。   附加参数ashowurl(即门户文件显示URL)的值应与“发布规则-基本设置-文件显示URL”相同;   文件显示URL的值,应与用户网站后台-上传设置-基本设置-附件&URL&地址对应,默认值是“/data/attachment/portal”;   当网站后台更改了上传设置-附件&URL&地址时,该值应等于“附件&URL&地址”+“/portal”;   本接口支持远程附件,在网站后台设置开启即可,ET发布配置和使用非远程附件时一致,不需做任何修改。   网站后台的水印、缩略图设置,会自动生效。
8、发布配置-文章检查网址处,可以如下填写:   http://您的网址/etpost.php   注:使用大小写敏感的服务器的用户请注意网址大小写和网站文件一致 9、接口文件无须任何改动即可使用,如果你希望增加校验或其他功能,请仔细修改;& &
发布接口代码
@$vercode=''; //此处取值请自行修改
if(isset($_POST['vercode'])){
if ($_POST['vercode']!=$vercode){
echo(&[err]invalid vercode[/err]&);
foreach($_POST as $key=&$value){
$_GET[$key]=$
define('APPTYPEID', 4);
define('CURSCRIPT', 'portal');
define('DISABLEXSSCHECK', true);
require './source/class/class_core.php';
$discuz = C::app();
$cachelist = array('userapp', 'portalcategory', 'diytemplatenameportal');
$discuz-&cachelist = $
$discuz-&init();
//zzcity add
$member = array();
$member = c::t('common_member')-&fetch_by_username($_POST['username']);
$cookietime=$_G['gp_cookietime'] ? 2592000 : 0;
$_G['uid'] = $member['uid'];
$_G['username'] = $member['username'];
$_G['adminid'] = $member['adminid'];
$_G['groupid'] = $member['groupid'];
$_G['formhash'] = formhash();
$_G['session']['invisible'] = getuserprofile('invisible');
$_G['member'] = $
loadcache('usergroup_'.$_G['groupid']);
C::app()-&session-&isnew =
C::app()-&session-&updatesession();
dsetcookie('auth', authcode(&{$member['password']}\t{$member['uid']}&, 'ENCODE'), $cookietime, 1, true);
dsetcookie('loginuser');
dsetcookie('activationauth');
dsetcookie('pmnum');
include_once libfile('function/stat');
updatestat('login', 1);
if(defined('IN_MOBILE')) {
updatestat('mobilelogin', 1);
if($_G['setting']['connect']['allow'] && $_G['member']['conisbind']) {
updatestat('connectlogin', 1);
$rule = updatecreditbyaction('daylogin', $_G['uid']);
if(!$rule['updatecredit']) {
checkusergroup($_G['uid']);
$_G['gp_htmlon']=$_GET['htmlon'] = trim($_GET['htmlon'])=='' ? '1' : $_GET['htmlon'];
$_GET['mod']='portalcp'; //zzcity add
$_GET['ac']='article';//zzcity add
require DISCUZ_ROOT.'./source/function/function_home.php';
require DISCUZ_ROOT.'./source/function/function_portal.php';
if(empty($_GET['mod']) || !in_array($_GET['mod'], array('list', 'view', 'comment', 'portalcp', 'topic', 'attachment', 'rss', 'block'))) $_GET['mod'] = 'index';
define('CURMODULE', $_GET['mod']);
//runhooks();
$navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['seotitle']['portal']);
$_G['disabledwidthauto'] = 1;
//require_once libfile('portal/'.$_GET['mod'], 'module');
//替换source/module/portal/portal_portalcp.php开始
//if(!defined('IN_DISCUZ')) {
// exit('Access Denied');
$_G['disabledwidthauto'] = 0;
$ac = in_array($_GET['ac'], array('comment', 'article', 'related', 'block', 'portalblock', 'blockdata', 'topic', 'diy', 'upload', 'category', 'plugin', 'logout'))?$_GET['ac']:'index';
$admincp2 = getstatus($_G['member']['allowadmincp'], 2);
$admincp3 = getstatus($_G['member']['allowadmincp'], 3);
$admincp4 = getstatus($_G['member']['allowadmincp'], 4);
$admincp5 = getstatus($_G['member']['allowadmincp'], 5);
$admincp6 = getstatus($_G['member']['allowadmincp'], 6);
/*if (!$_G['inajax'] && in_array($ac, array('index', 'portalblock', 'blockdata', 'category', 'plugin')) && ($_G['group']['allowdiy'] || $_G['group']['allowmanagearticle'] || $admincp2 || $admincp3 || $admincp4 || $admincp6)) {
$modsession = new discuz_panel(PORTALCP_PANEL);
if(getgpc('login_panel') && getgpc('cppwd') && submitcheck('submit')) {
$modsession-&dologin($_G[uid], getgpc('cppwd'), true);
if(!$modsession-&islogin) {
include template('portal/portalcp_login');
if($ac == 'logout') {
$modsession = new discuz_panel(PORTALCP_PANEL);
$modsession-&dologout();
showmessage('modcp_logout_succeed', 'index.php');
$navtitle = lang('core', 'title_'.$ac.'_management').' - '.lang('core', 'title_portal_management');
require_once libfile('function/portalcp');
//require_once libfile('portalcp/'.$ac, 'include');
//替换source/include/portalcp/portal_article.php开始
[Discuz!] (C) Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: portalcp_article.php -03-29 06:21:11Z zhangguosheng $
//if(!defined('IN_DISCUZ')) {
// exit('Access Denied');
$op = in_array($_GET['op'], array('edit', 'delete', 'related', 'batch', 'pushplus', 'verify', 'checkhtmlname')) ? $_GET['op'] : 'add';
$aid = intval($_GET['aid']);
$catid = intval($_GET['catid']);
$seccodecheck = $_G['setting']['seccodestatus'] & 4;
$secqaacheck = $_G['setting']['secqaa']['status'] & 2;
//zzcity add
if (!empty($_POST['dateline'])){
//发布日期
$_POST['dateline']=str_replace(array(&年&,&月&),&-&,trim($_POST['dateline']));
$_POST['dateline']=str_replace(array(&时&,&分&),&:&,trim($_POST['dateline']));
$_POST['dateline']=str_replace(array(&日&,&秒&),& &,trim($_POST['dateline']));
$_GET['dateline']=$_POST['dateline']=preg_replace('/ {2,}/',' ',trim($_POST['dateline']));
if (strtotime($_POST['dateline'])==false||strtotime($_POST['dateline'])==-1){
echo(&[err]发布时间格式错误[/err]&);
//zzdicy add end
$article = $article_content = array();
/*if($aid) {
$article = C::t('portal_article_title')-&fetch($aid);
if(!$article) {
showmessage('article_not_exist', dreferer());
loadcache('portalcategory');
$portalcategory = $_G['cache']['portalcategory'];
if($catid && empty($portalcategory[$catid])) {
// showmessage('portal_category_not_find', dreferer());
exit('[err]'.lang('message', 'portal_category_not_find').'[/err]');
//if(empty($article) && $catid && $portalcategory[$catid]['disallowpublish']) {
// showmessage('portal_category_disallowpublish', dreferer());
if(empty($catid) && $article) {
$catid = $article['catid'];
$htmlstatus = !empty($_G['setting']['makehtml']['flag']) && $portalcategory[$catid]['fullfoldername'];
//if(submitcheck(&articlesubmit&, 0, $seccodecheck, $secqaacheck)) {
// if($aid) {
check_articleperm($article['catid'], $aid, $article);
// } else {
check_articleperm($catid);
$_POST['title'] = getstr(trim($_POST['title']), 80);
if(strlen($_POST['title']) & 1) {
showmessage('title_not_too_little');
exit('[err]'.lang('message', 'title_not_too_little').'[/err]');
$_POST['title'] = censor($_POST['title']);
$_POST['pagetitle'] = getstr(trim($_POST['pagetitle']), 60);
$_POST['pagetitle'] = censor($_POST['pagetitle']);
$htmlname = basename(trim($_POST['htmlname']));
$highlight_style = $_GET['highlight_style'];
$style = '';
$style = implode('|',$highlight_style);
if(empty($_POST['summary'])){
$_POST['summary'] = preg_replace(&/(\s|\&strong\&##########NextPage(\[title=.*?\])?##########\&\/strong\&)+/&, ' ', $_POST['content']);
$_POST['summary'] = preg_replace(&/##########NextPage(\[title=.*?\])?##########/&, ' ', $_POST['summary']);
$summary = portalcp_get_summary($_POST['summary']);
$summary = censor($summary);
$_GET['author'] = dhtmlspecialchars($_GET['author']);
$_GET['url'] = str_replace('&', '&', dhtmlspecialchars($_GET['url']));
$_GET['from'] = dhtmlspecialchars($_GET['from']);
$_GET['fromurl'] = str_replace('&', '&', dhtmlspecialchars($_GET['fromurl']));
$_GET['dateline'] = !empty($_GET['dateline']) ? strtotime($_GET['dateline']) : TIMESTAMP;
if(censormod($_POST['title']) || $_G['group']['allowpostarticlemod']) {
$article_status = 1;
$article_status = 0;
$setarr = array(
'title' =& $_POST['title'],
'author' =& $_GET['author'],
'from' =& $_GET['from'],
'fromurl' =& $_GET['fromurl'],
'dateline' =& intval($_GET['dateline']),
'url' =& $_GET['url'],
'allowcomment' =& !empty($_POST['forbidcomment']) ? '0' : '1',
'summary' =& $summary,
'catid' =& intval($_POST['catid']),
'tag' =& article_make_tag($_POST['tag']),
'status' =& $article_status,
'highlight' =& $style,
'showinnernav' =& empty($_POST['showinnernav']) ? '0' : '1',
if(empty($setarr['catid'])) {
showmessage('article_choose_system_category');
exit('[err]'.lang('message', 'article_choose_system_category').'[/err]');
if($_GET['conver']) {
$converfiles = dunserialize($_GET['conver']);
$setarr['pic'] = $converfiles['pic'];
$setarr['thumb'] = intval($converfiles['thumb']);
$setarr['remote'] = intval($converfiles['remote']);
$idtype = '';
if(empty($article)) {
$setarr['uid'] = $_G['uid'];
$setarr['username'] = $_G['username'];
$setarr['id'] = intval($_POST['id']);
$setarr['htmlname'] = $
$table = '';
if($setarr['id']) {
if($_POST['idtype']=='blogid') {
$table = 'home_blogfield';
$setarr['idtype'] = 'blogid';
$id = $setarr['id'];
$idtype = $setarr['idtype'];
$table = 'forum_thread';
$setarr['idtype'] = 'tid';
require_once libfile('function/discuzcode');
$id = C::t('forum_post')-&fetch_threadpost_by_tid_invisible($setarr['id']);
$id = $id['pid'];
$idtype = 'pid';
$aid = C::t('portal_article_title')-&insert($setarr, 1);
if($table) {
if($_POST['idtype']=='blogid') {
C::t('home_blogfield')-&update($setarr['id'], array('pushedaid' =& $aid));
} elseif($setarr['idtype']=='tid') {
$modarr = array(
'tid' =& $setarr['id'],
'uid' =& $_G['uid'],
'username' =& $_G['username'],
'dateline' =& TIMESTAMP,
'action' =& 'PTA',
'status' =& '1',
'stamp' =& '',
C::t('forum_threadmod')-&insert($modarr);
C::t('forum_thread')-&update($setarr['id'], array('moderated' =& 1, 'pushedaid' =& $aid));
C::t('common_member_status')-&update($_G['uid'], array('lastpost' =& TIMESTAMP), 'UNBUFFERED');
C::t('portal_category')-&increase($setarr['catid'], array('articles' =& 1));
C::t('portal_category')-&update($setarr['catid'], array('lastpublish' =& TIMESTAMP));
C::t('portal_article_count')-&insert(array('aid'=&$aid, 'catid'=&$setarr['catid'], 'viewnum'=&1));
if($htmlname && $article['htmlname'] !== $htmlname) {
$setarr['htmlname'] = $
$oldarticlename = $article['htmldir'].$article['htmlname'];
unlink($oldarticlename.'.'.$_G['setting']['makehtml']['extendname']);
for($i = 1; $i & $article['contents']; $i++) {
unlink($oldarticlename.$i.'.'.$_G['setting']['makehtml']['extendname']);
C::t('portal_article_title')-&update($aid, $setarr);
//zzcity add attachment
$ashowurl =
empty($_POST['ashowurl']) ? &/data/attachment/portal& : trim($_POST['ashowurl']);
$ashowurl = substr($ashowurl,-1)==&/& ? $ashowurl: $ashowurl.'/';
$arrayimageurl = $temp = $imagereplace =$zzsetarr1=$zzsetarr2= array();
$arrayimageurl=explode(',',$_POST['etattachs']);
$arrayimageurl = array_unique($arrayimageurl);
$attachnum =
empty($_POST['etattachs']) ? 0 :count($arrayimageurl);
if ($attachnum){
$upload = new discuz_upload();
foreach($arrayimageurl as $tempvalue) {
$imageurl = $
$imagereplace['oldimageurl'][] = $
$attach['ext'] = $upload-&fileext($imageurl);
$temp = explode('/', $imageurl);
$attach['name'] =
trim($temp[count($temp)-1]);
$attach['thumb'] = '';
$attach['isimage'] = $upload -& is_image_ext($attach['ext']);
$attach['extension'] = $upload -& get_target_extension($attach['ext']);
$attach['attachdir'] = $upload -& get_target_dir('portal');
$attach['attachment'] = $attach['attachdir'] . $upload-&get_target_filename('portal').'.'.$attach['extension'];
$attach['attachment']= str_replace($ashowurl,'',$imageurl);
$attach['target'] = getglobal('setting/attachdir').'./portal/'.$attach['attachment'];
if(!$upload-&get_image_info($attach['target'])) {
@unlink($attach['target']);
$attach['size'] = filesize($attach['target']);
$attachs[] = daddslashes($attach);
if(!empty($_POST['pic'])){ //指定封面
if($imageurl==$_POST['pic']) $_POST['pic']=$attach['attachment'];
if($attachs) {
foreach($attachs as $attach) {
if($attach['isimage']) {
require_once libfile('class/image');
$image = new image();
if (empty($_G['setting']['portalarticleimgthumbclosed'])){
$thumbimgwidth = $_G['setting']['portalarticleimgthumbwidth'] ? $_G['setting']['portalarticleimgthumbwidth'] : 300;
$thumbimgheight = $_G['setting']['portalarticleimgthumbheight'] ? $_G['setting']['portalarticleimgthumbheight'] : 300;
$attach['thumb'] = $image-&Thumb($attach['target'], '', $thumbimgwidth, $thumbimgheight, 2);
if($_G['setting']['watermarkstatus'] && empty($_G['portal']['disablewatermark'])) {
$image-&Watermark($attach['target'], '', 'portal');
if(getglobal('setting/ftp/on') && ((!$_G['setting']['ftp']['allowedexts'] && !$_G['setting']['ftp']['disallowedexts']) || ($_G['setting']['ftp']['allowedexts'] && in_array($attach['ext'], $_G['setting']['ftp']['allowedexts'])) || ($_G['setting']['ftp']['disallowedexts'] && !in_array($attach['ext'], $_G['setting']['ftp']['disallowedexts']))) && (!$_G['setting']['ftp']['minsize'] || $attach['size'] &= $_G['setting']['ftp']['minsize'] * 1024)) {
if(ftpcmd('upload', 'portal/'.$attach['attachment']) && (!$attach['thumb'] || ftpcmd('upload', 'portal/'.getimgthumbname($attach['attachment'])))) {
@unlink($_G['setting']['attachdir'].'/portal/'.$attach['attachment']);
@unlink($_G['setting']['attachdir'].'/portal/'.getimgthumbname($attach['attachment']));
$attach['remote'] = 1;
if(getglobal('setting/ftp/mirror')) {
@unlink($attach['target']);
@unlink(getimgthumbname($attach['target']));
portal_upload_error(lang('portalcp', 'upload_remote_failed'));
$zzsetarr2 = array(
'uid' =& $_G['uid'],
'filename' =& $attach['name'],
'attachment' =& $attach['attachment'],
'filesize' =& $attach['size'],
'isimage' =& $attach['isimage'],
'thumb' =& $attach['thumb'],
'remote' =& $attach['remote'],
'filetype' =& $attach['extension'],
'dateline' =& $_G['timestamp'],
'aid' =& $aid
$zzsetarr2['attachid'] = C::t('portal_attachment')-&insert($zzsetarr2, true);
if($downremotefile) {
$attach['url'] = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']).'portal/';
$imagereplace['newimageurl'][] = $attach['url'].$attach['attachment'];
if(!empty($zzsetarr1['pic'])){
if($attach['attachment']==$_POST['pic']){
$zzsetarr1['pic']='portal/'.$attach['attachment'];
$zzsetarr1['thumb']=$attach['thumb'];
$zzsetarr1['remote']=$attach['remote'];
if($attach['isimage']){
$_POST['pic']=$attach['attachment'];
$zzsetarr1['pic']='portal/'.$attach['attachment'];
$zzsetarr1['thumb']=$attach['thumb'];
$zzsetarr1['remote']=$attach['remote'];
$_POST['content'] = str_replace($imagereplace['oldimageurl'], $imagereplace['newimageurl'], $_POST['content']);
C::t('portal_article_title')-&update($aid, $zzsetarr1); //更新封面信息到表
//zzcity add attachment close
$content = getstr($_POST['content'], 0, 0, 0, 0, 1);
$content = censor($content);
if(censormod($content) || $_G['group']['allowpostarticlemod']) {
$article_status = 1;
$article_status = 0;
$regexp = '/(#{3,10}NextPage(\[title=(.*?)\])?#{3,10})+/';
preg_match_all($regexp, $content ,$arr);
$pagetitle = !empty($arr[3]) ? $arr[3] : array();
$pagetitle = array_map('trim', $pagetitle);
array_unshift($pagetitle, $_POST['pagetitle']);
$contents = preg_split($regexp, $content);
$cpostcount = count($contents);
$dbcontents = C::t('portal_article_content')-&fetch_all($aid);
$pagecount = $cdbcount = count($dbcontents);
if($cdbcount & $cpostcount) {
$cdelete = array();
foreach(array_splice($dbcontents, $cpostcount) as $value) {
$cdelete[$value['cid']] = $value['cid'];
if(!empty($cdelete)) {
C::t('portal_article_content')-&delete($cdelete);
$pagecount = $
foreach($dbcontents as $key =& $value) {
C::t('portal_article_content')-&update($value['cid'], array('title' =& $pagetitle[$key], 'content' =& $contents[$key], 'pageorder' =& $key+1));
unset($pagetitle[$key], $contents[$key]);
if($cdbcount & $cpostcount) {
foreach($contents as $key =& $value) {
C::t('portal_article_content')-&insert(array('aid' =& $aid, 'id' =& $setarr['id'], 'idtype' =& $setarr['idtype'], 'title' =& $pagetitle[$key], 'content' =& $contents[$key], 'pageorder' =& $key+1, 'dateline' =& TIMESTAMP));
$pagecount = $
$updatearticle = array('contents' =& $pagecount);
if($article_status == 1) {
$updatearticle['status'] = 1;
updatemoderate('aid', $aid);
manage_addnotify('verifyarticle');
$updatearticle = array_merge($updatearticle, portalcp_article_pre_next($catid, $aid));
C::t('portal_article_title')-&update($aid, $updatearticle);
$newaids = array();
$_POST['attach_ids'] = explode(',', $_POST['attach_ids']);
foreach ($_POST['attach_ids'] as $newaid) {
$newaid = intval($newaid);
if($newaid) $newaids[$newaid] = $
if($newaids) {
C::t('portal_attachment')-&update_to_used($newaids, $aid);
addrelatedarticle($aid, $_POST['raids']);
if($_GET['from_idtype'] && $_GET['from_id']) {
$id = intval($_GET['from_id']);
$notify = array();
switch ($_GET['from_idtype']) {
case 'blogid':
$blog = C::t('home_blog')-&fetch($id);
if(!empty($blog)) {
$notify = array(
'url' =& &home.php?mod=space&uid=$blog[uid]&do=blog&id=$id&,
'subject' =& $blog['subject']
$touid = $blog['uid'];
case 'tid':
$thread = C::t('forum_thread')-&fetch($id);
if(!empty($thread)) {
$notify = array(
'url' =& &forum.php?mod=viewthread&tid=$id&,
'subject' =& $thread['subject']
$touid = $thread['authorid'];
if(!empty($notify)) {
$notify['newurl'] = 'portal.php?mod=view&aid='.$
notification_add($touid, 'pusearticle', 'puse_article', $notify, 1);
if(trim($_GET['from']) != '') {
$from_cookie = '';
$from_cookie_array = array();
$from_cookie = getcookie('from_cookie');
$from_cookie_array = explode('\t', $from_cookie);
$from_cookie_array[] = $_GET['from'];
$from_cookie_array = array_unique($from_cookie_array);
$from_cookie_array = array_filter($from_cookie_array);
$from_cookie_num = count($from_cookie_array);
$from_cookie_start = $from_cookie_num - 10;
$from_cookie_start = $from_cookie_start & 0 ? $from_cookie_start : 0;
$from_cookie_array = array_slice($from_cookie_array, $from_cookie_start, $from_cookie_num);
$from_cookie = implode('\t', $from_cookie_array);
dsetcookie('from_cookie', $from_cookie);
dsetcookie('clearUserdata', 'home');
$op = 'add_success';
$article_add_url = 'portal.php?mod=portalcp&ac=article&catid='.$
$article = C::t('portal_article_title')-&fetch($aid);
$viewarticleurl = $_POST['url'] ? &portal.php?mod=list&catid=$_POST[catid]& : fetch_article_url($article);
include_once template(&portal/portalcp_article&);dexit();
echo('[ok]');
//} elseif(submitcheck('pushplussubmit')) {
if($aid) {
check_articleperm($article['catid'], $aid, $article);
showmessage('no_article_specified_for_pushplus', dreferer());
$tourl = !empty($_POST['toedit']) ? 'portal.php?mod=portalcp&ac=article&op=edit&aid='.$aid : dreferer();
$pids = (array)$_POST['pushpluspids'];
$posts = array();
$tid = intval($_GET['tid']);
if($tid && $pids) {
foreach(C::t('forum_post')-&fetch_all('tid:'.$tid, $pids) as $value) {
if($value['tid'] != $tid) {
$posts[$value['pid']] = $
if(empty($posts)) {
showmessage('no_posts_for_pushplus', dreferer());
$pageorder = C::t('portal_article_content')-&fetch_max_pageorder_by_aid($aid);
$pageorder = intval($pageorder + 1);
$inserts = array();
foreach($posts as $post) {
$summary = portalcp_get_postmessage($post);
$summary .= lang('portalcp', 'article_pushplus_info', array('author'=&$post['author'], 'url'=&'forum.php?mod=redirect&goto=findpost&ptid='.$post['tid'].'&pid='.$post['pid']));
$inserts[] = array('aid'=&$aid, 'content'=&$summary, 'pageorder'=&$pageorder, 'dateline'=&$_G['timestamp'], 'id'=&$post[pid], 'idtype' =&'pid');
$pageorder++;
C::t('portal_article_content')-&insert_batch($inserts);
$pluscount = C::t('portal_article_content')-&count_by_aid($aid);
C::t('portal_article_title')-&update($aid, array('contents' =& $pluscount, 'owncomment' =& 1));
$commentnum = C::t('portal_comment')-&count_by_id_idtype($aid, 'aid');
C::t('portal_article_count')-&update($aid, array('commentnum'=&intval($commentnum)));
showmessage('pushplus_do_success', $tourl, array(), array('header'=&1, 'refreshtime'=&0));
//} elseif(submitcheck('verifysubmit')) {
if($aid) {
check_articleperm($article['catid'], $aid, $article, true);
showmessage('article_not_exist', dreferer());
if($_POST['status'] == '0') {
C::t('portal_article_title')-&update($aid, array('status'=&'0'));
updatemoderate('aid', $aid, 2);
$tourl = dreferer(fetch_article_url($article));
showmessage('article_passed', $tourl);
} elseif($_POST['status'] == '2') {
C::t('portal_article_title')-&update($aid, array('status'=&'2'));
updatemoderate('aid', $aid, 1);
$tourl = dreferer(fetch_article_url($article));
showmessage('article_ignored', $tourl);
} elseif($_POST['status'] == '-1') {
include_once libfile('function/delete');
deletearticle(array($aid), 0);
updatemoderate('aid', $aid, 2);
$tourl = dreferer('portal.php?mod=portalcp&catid='.$article['catid']);
showmessage('article_deleted', $tourl);
showmessage('select_operation');
//if($op == 'delete') {
if(!$aid) {
showmessage('article_edit_nopermission');
check_articleperm($article['catid'], $aid, $article);
if(submitcheck('deletesubmit')) {
include_once libfile('function/delete');
$article = deletearticle(array(intval($_POST['aid'])), intval($_POST['optype']));
showmessage('article_delete_success', &portal.php?mod=list&catid={$article[0][catid]}&);
//} elseif($op == 'related') {
$raid = intval($_GET['raid']);
$ra = array();
if($raid) {
$ra = C::t('portal_article_title')-&fetch($raid);
//} elseif($op == 'batch') {
check_articleperm($catid);
$aids = $_POST['aids'];
$optype = $_POST['optype'];
if(empty($optype) || $optype == 'push') showmessage('article_action_invalid');
$aids = array_map('intval', $aids);
$aids = array_filter($aids);
if(empty($aids)) showmessage('article_not_choose');
if (submitcheck('batchsubmit')) {
if ($optype == 'trash' || $optype == 'delete') {
require_once libfile('function/delete');
$istrash = $optype == 'trash' ? 1 : 0;
$article = deletearticle($aids, $istrash);
showmessage('article_delete_success', dreferer(&portal.php?mod=portalcp&ac=category&catid={$article[0][catid]}&));
} elseif($optype == 'move') {
if($catid) {
$categoryUpdate = array();
foreach(C::t('portal_article_title')-&fetch_all($aids) as $s_article) {
$categoryUpdate[$s_article['catid']] = $categoryUpdate[$s_article['catid']] ? --$categoryUpdate[$s_article['catid']] : -1;
$categoryUpdate[$catid] = $categoryUpdate[$catid] ? ++$categoryUpdate[$catid] : 1;
foreach($categoryUpdate as $scatid=&$scatnum) {
if($scatnum) {
C::t('portal_category')-&increase($scatid, array('articles' =& $scatnum));
C::t('portal_article_title')-&update($aids, array('catid'=&$catid));
showmessage('article_move_success', dreferer(&portal.php?mod=portalcp&ac=category&catid=$catid&));
showmessage('article_move_select_cat', dreferer());
//} elseif($op == 'verify') {
if($aid) {
check_articleperm($article['catid'], $aid, $article);
showmessage('article_not_exist', dreferer());
//} elseif($op == 'pushplus') {
if($aid) {
check_articleperm($article['catid'], $aid, $article);
showmessage('no_article_specified_for_pushplus', dreferer());
$pids = (array)$_POST['topiclist'];
$tid = intval($_GET['tid']);
$pushedids = array();
$pushcount = $pushedcount = 0;
if(!empty($pids)) {
foreach(C::t('portal_article_content')-&fetch_all($aid) as $value) {
$pushedids[] = intval($value['id']);
$pushedcount++;
$pids = array_diff($pids, $pushedids);
$pushcount = count($pids);
if(empty($pids)) {
showmessage($pushedids ? 'all_posts_pushed_already' : 'no_posts_for_pushplus');
//} else if($op == 'checkhtmlname') {
$htmlname = basename(trim($_GET['htmlname']));
if($htmlstatus) {
$_time = !empty($article) ? $article['dateline'] : TIMESTAMP;
if(file_exists(helper_makehtml::fetch_dir($portalcategory[$catid]['fullfoldername'], $_time).$htmlname.'.'.$_G['setting']['makehtml']['extendname'])) {
showmessage('html_existed');
showmessage('html_have_no_exists');
showmessage('make_html_closed');
//} else {
if(empty($_G['cache']['portalcategory'])) {
showmessage('portal_has_not_category');
if(!checkperm('allowmanagearticle') && !checkperm('allowpostarticle')) {
$allowcategorycache = array();
if($allowcategory = getallowcategory($_G['uid'])) {
foreach($allowcategory as $catid =& $category) {
$allowcategorycache[$catid] = $_G['cache']['portalcategory'][$catid];
foreach($allowcategorycache as &$_value) {
if($_value['upid'] && !isset($allowcategorycache[$_value['upid']])) {
$_value['level'] = 0;
$_G['cache']['portalcategory'] = $
if(empty($_G['cache']['portalcategory'])) {
showmessage('portal_article_add_nopermission');
$category = $_G['cache']['portalcategory'];
$cate = $category[$catid];
$categoryselect = category_showselect('portal', 'catid', true, !empty($article['catid']) ? $article['catid'] : $catid);
if($aid) {
$catid = intval($article['catid']);
if($aid && $article['highlight']) {
$stylecheck = '';
$stylecheck = explode('|', $article['highlight']);
$from_cookie_str = '';
$from_cookie = array();
$from_cookie_str = stripcslashes(getcookie('from_cookie'));
$from_cookie = explode('\t', $from_cookie_str);
$from_cookie = array_filter($from_cookie);
if($article) {
foreach(C::t('portal_article_content')-&fetch_all($aid) as $key =& $value) {
$nextpage = '';
if($key & 0) {
$pagetitle = $value['title'] ? '[title='.$value['title'].']' : '';
$nextpage = &\r\n&.'&strong&##########NextPage'.$pagetitle.'##########&/strong&';
$article_content['title'] = $value['title'];
$article_content['content'] .= $nextpage.$value['content'];
$article['attach_image'] = $article['attach_file'] = '';
foreach(C::t('portal_attachment')-&fetch_all_by_aid($aid) as $value) {
if($value['isimage']) {
if($article['pic']) {
$value['pic'] = $article['pic'];
$attachs[] = $
if($article['idtype'] == 'tid') {
foreach(C::t('forum_attachment_n')-&fetch_all_by_id('tid:'.$article['id'], 'tid', $article['id']) as $value) {
if($value['isimage']) {
if($article['pic']) {
$value['pic'] = $article['pic'];
$value['attachid'] = $value['aid'];
$value['from'] = 'forum';
$attachs[] = $
if($article['pic']) {
$article['conver'] = addslashes(serialize(array('pic'=&$article['pic'], 'thumb'=&$article['thumb'], 'remote'=&$article['remote'])));
$article['related'] = array();
if(($relateds = C::t('portal_article_related')-&fetch_all_by_aid($aid))) {
foreach(C::t('portal_article_title')-&fetch_all(array_keys($relateds)) as $raid=&$value) {
$article['related'][$raid] = $value['title'];
$_GET['from_id'] = empty ($_GET['from_id'])?0:intval($_GET['from_id']);
if($_GET['from_idtype'] != 'blogid') $_GET['from_idtype'] = 'tid';
$idtypes = array($_GET['from_idtype'] =& ' selected');
if($_GET['from_idtype'] && $_GET['from_id']) {
$havepush = C::t('portal_article_title')-&fetch_count_for_idtype($_GET['from_id'], $_GET['from_idtype']);
if($havepush) {
if($_GET['from_idtype'] == 'blogid') {
showmessage('article_push_blogid_invalid_repeat', '', array(), array('return'=&true));
showmessage('article_push_tid_invalid_repeat', '', array(), array('return'=&true));
switch ($_GET['from_idtype']) {
case 'blogid':
$blog = array_merge(
C::t('home_blog')-&fetch($_GET['from_id']),
C::t('home_blogfield')-&fetch($_GET['from_id'])
if($blog) {
if($blog['friend']) {
showmessage('article_push_invalid_private');
$article['title'] = getstr($blog['subject'], 0);
$article['summary'] = portalcp_get_summary($blog['message']);
$article['fromurl'] = 'home.php?mod=space&uid='.$blog[uid].'&do=blog&id='.$blog[blogid];
$article['author'] = $blog['username'];
$article_content['content'] = dhtmlspecialchars($blog['message']);
$posttable = getposttablebytid($_GET['from_id']);
$thread = C::t('forum_thread')-&fetch($_GET['from_id']);
$thread = array_merge($thread, C::t('forum_post')-&fetch_threadpost_by_tid_invisible($_GET['from_id']));
if($thread) {
$article['title'] = $thread['subject'];
$thread['message'] = portalcp_get_postmessage($thread, $_GET['getauthorall']);
$article['summary'] = portalcp_get_summary($thread['message']);
$article['fromurl'] = 'forum.php?mod=viewthread&tid='.$thread['tid'];
$article['author'] = $thread['author'];
$article_content['content'] = dhtmlspecialchars($thread['message']);
$article['attach_image'] = $article['attach_file'] = '';
foreach(C::t('forum_attachment_n')-&fetch_all_by_id('tid:'.$thread['tid'], 'pid', $thread['pid'], 'aid DESC') as $attach) {
$attachcode = '[attach]'.$attach['aid'].'[/attach]';
if(!strexists($article_content['content'], $attachcode)) {
$article_content['content'] .= '&br /&&br /&'.$
if($attach['isimage']) {
if($article['pic']) {
$attach['pic'] = $article['pic'];
$attach['from'] = 'forum';
$attachs[] = $
if(!empty($article['dateline'])) {
$article['dateline'] = dgmdate($article['dateline']);
if(!empty($attachs)) {
$article['attachs'] = get_upload_content($attachs);
$article_tags = article_parse_tags($article['tag']);
$tag_names = article_tagnames();
//require_once libfile('function/upload');
//$swfconfig = getuploadconfig($_G['uid'], 0, false);
//require_once libfile('function/spacecp');
//$albums = getalbums($_G['uid']);
//include_once template(&portal/portalcp_article&);
function portalcp_get_summary($message) {
$message = preg_replace(array(&/\[attach\].*?\[\/attach\]/&, &/\&[a-z]+\;/i&, &/\&script.*?\&\/script\&/&), '', $message);
$message = preg_replace(&/\[.*?\]/&, '', $message);
$message = getstr(strip_tags($message), 200);
/*function portalcp_get_postmessage($post, $getauthorall = '') {
global $_G;
$forum = C::t('forum_forum')-&fetch($post['fid']);
require_once libfile('function/discuzcode');
$language = lang('forum/misc');
if($forum['type'] == 'sub' && $forum['status'] == 3) {
loadcache('grouplevels');
$grouplevel = $_G['grouplevels'][$forum['level']];
$group_postpolicy = $grouplevel['postpolicy'];
if(is_array($group_postpolicy)) {
$forum = array_merge($forum, $group_postpolicy);
$post['message'] = preg_replace($language['post_edit_regexp'], '', $post['message']);
$_message = '';
if($getauthorall) {
foreach(C::t('forum_post')-&fetch_all_by_tid('tid:'.$post['tid'], $post['tid'], true, '', 0, 0, null, null, $post['authorid']) as $value){
if(!$value['first']) {
$value['message'] = preg_replace(&/\s?\[quote\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s?/is&, '', $value['message']);
$value['message'] = discuzcode($value['message'], $value['smileyoff'], $value['bbcodeoff'], $value['htmlon'] & 1, $forum['allowsmilies'], $forum['allowbbcode'], ($forum['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0), $forum['allowhtml'], 0, 0, $value['authorid'], $forum['allowmediacode'], $value['pid']);
portalcp_parse_postattch($value);
$_message .= '&br /&&br /&'.$value['message'];
$msglower = strtolower($post['message']);
if(strpos($msglower, '[/media]') !== FALSE) {
$post['message'] = preg_replace(&/\[media=([\w,]+)\]\s*([^\[\&\r\n]+?)\s*\[\/media\]/ies&, &parsearticlemedia('\\1', '\\2')&, $post['message']);
if(strpos($msglower, '[/audio]') !== FALSE) {
$post['message'] = preg_replace(&/\[audio(=1)*\]\s*([^\[\&\r\n]+?)\s*\[\/audio\]/ies&, &parsearticlemedia('mid,0,0', '\\2')&, $post['message']);
if(strpos($msglower, '[/flash]') !== FALSE) {
$post['message'] = preg_replace(&/\[flash(=(\d+),(\d+))?\]\s*([^\[\&\r\n]+?)\s*\[\/flash\]/ies&, &parsearticlemedia('swf,0,0', '\\4');&, $post['message']);
$post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'] & 1, $forum['allowsmilies'], $forum['allowbbcode'], ($forum['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0), $forum['allowhtml'], 0, 0, $post['authorid'], $forum['allowmediacode'], $post['pid']);
portalcp_parse_postattch($post);
if(strpos($post['message'], '[/flash1]') !== FALSE) {
$post['message'] = str_replace('[/flash1]', '[/flash]', $post['message']);
return $post['message'].$_
function portalcp_parse_postattch(&$post) {
static $allpostattchs =
if($allpostattchs === null) {
foreach(C::t('forum_attachment_n')-&fetch_all_by_id('tid:'.$post['tid'], 'tid', $post['tid']) as $attch) {
$allpostattchs[$attch['pid']][$attch['aid']] = $attch['aid'];
$attachs = $allpostattchs[$post['pid']];
if(preg_match_all(&/\[attach\](\d+)\[\/attach\]/i&, $post['message'], $matchaids)) {
$attachs = array_diff($allpostattchs[$post['pid']], $matchaids[1]);
if($attachs) {
$add = '';
foreach($attachs as $attachid) {
$add .= '&br/&'.'[attach]'.$attachid.'[/attach]';
$post['message'] .= $
/*function parsearticlemedia($params, $url) {
global $_G;
$params = explode(',', $params);
$width = intval($params[1]) & 800 ? 800 : intval($params[1]);
$height = intval($params[2]) & 600 ? 600 : intval($params[2]);
$url = addslashes($url);
if($flv = parseflv($url, 0, 0)) {
if(!empty($flv) && preg_match(&/\.flv$/i&, $flv['flv'])) {
$flv['flv'] = $_G['style']['imgdir'].'/flvplayer.swf?&autostart=true&file='.urlencode($flv['flv']);
$url = $flv['flv'];
$params[0] = 'swf';
if(in_array(count($params), array(3, 4))) {
$type = $params[0];
$url = str_replace(array('&', '&'), '', str_replace('\\&', '\&', $url));
switch($type) {
case 'mp3':
case 'wma':
case 'ra':
case 'ram':
case 'wav':
case 'mid':
return '[flash=mp3]'.$url.'[/flash1]';
case 'rm':
case 'rmvb':
case 'rtsp':
return '[flash=real]'.$url.'[/flash1]';
case 'swf':
return '[flash]'.$url.'[/flash1]';
case 'asf':
case 'asx':
case 'wmv':
case 'mms':
case 'avi':
case 'mpg':
case 'mpeg':
case 'mov':
return '[flash=media]'.$url.'[/flash1]';
return '&a href=&'.$url.'& target=&_blank&&'.$url.'&/a&';
function portalcp_article_pre_next($catid, $aid) {
$data = array(
'preaid' =& C::t('portal_article_title')-&fetch_preaid_by_catid_aid($catid, $aid),
'nextaid' =& C::t('portal_article_title')-&fetch_nextaid_by_catid_aid($catid, $aid),
if($data['preaid']) {
C::t('portal_article_title')-&update($data['preaid'], array(
'preaid' =& C::t('portal_article_title')-&fetch_preaid_by_catid_aid($catid, $data['preaid']),
'nextaid' =& C::t('portal_article_title')-&fetch_nextaid_by_catid_aid($catid, $data['preaid']),
//替换source/include/portalcp/portal_article.php结束
//替换source/module/portal/portal_portalcp.php结束
发布规则使用说明
1、将范例发布规则文本导入ET2发布配置,或使用软件内置发布规则范例; 2、将检查网址和发布网址中的“您的网站”改为您要发布的网站网址; 3、在参数取值页,填上您要发布的频道ID,打开门户管理发布文章页面,可以查看频道ID,即catid的值; 4、填上您的账号、密码,注意格式和账号权限(账号应有门户文章频道管理权限); 5、请根据发布网站的编码选择编码转换方式,GBK选不转换; 6、本接口不需要启用UBB代码格式转换; &
发布规则范例
# ET发布规则文本
# 发布规则名称:Discuz! x3.2 UTF8 门户文章
# 版本号:2.6.18
# 生成时间: 14:26:09
RGlzY3V6ISB4My4yIFVURjggw8W7p87E1cI=
aHR0cDovL8T6tcREWljN+NW+L2V0Y2hrLnBocD92ZXJjb2RlPSZjYXRpZD0mdGl0bGU9PCV0aXRs
aHR0cDovL8T6tcREWljN+NW+L2V0cG9zdC5waHA=
[/urlpost]
[urlreply]
aHR0cDovLw==
[/urlreply]
[/isreply]
[/len_t_s]
[/len_t_l]
[/len_c_s]
[/len_c_l]
[pcontent]
Y29udGVudA==
[/pcontent]
dXNlcm5hbWU=
cGFzc3dvcmQ=
Y2F0aWQ9xPq1xM7E1cK31sDgSUQNCmFzaG93dXJsPS9kYXRhL2F0dGFjaG1lbnQvcG9ydGFsDQpk
YXRlbGluZT0=
[userlist]
zfjVvrHgvK0xtcTTw7unw/s9zfjVvrHgvK0xtcTD3MLrDQrN+NW+seC8rTK1xNPDu6fD+z3N+NW+
seC8rTK1xMPcwusNCs341b6x4LytM7XE08O7p8P7Pc341b6x4LytM7XEw9zC6w==
[/userlist]
[paralist]
Y2F0aWQNCnN1bW1hcnkNCmF1dGhvcg0KZnJvbQ0KZnJvbXVybA0KdXJsDQpwaWMNCnBhZ2V0aXRs
ZQ0KYXNob3d1cmwNCmRhdGVsaW5lDQo=
[/paralist]
[paralistvalue]
PEBjYXRpZEA+xPq1xM7E1cK31sDgSUQ8QC9jYXRpZEA+DQo8QHN1bW1hcnlAPjxb1arSql0+PEAv
c3VtbWFyeUA+DQo8QGF1dGhvckA+PFvX99XfXT48QC9hdXRob3JAPg0KPEBmcm9tQD48W87E1cLA
tNS0XT48QC9mcm9tQD4NCjxAZnJvbXVybEA+PFvAtNS0tdjWt10+PEAvZnJvbXVybEA+DQo8QHVy
bEA+PFvM+NeqVVJMXT48QC91cmxAPg0KPEBwaWNAPjxbt+LD5s28xqxdPjxAL3BpY0A+DQo8QHBh
Z2V0aXRsZUA+PFu31tKzserM4l0+PEAvcGFnZXRpdGxlQD4NCjxAYXNob3d1cmxAPi9kYXRhL2F0
dGFjaG1lbnQvcG9ydGFsPEAvYXNob3d1cmxAPg0KPEBkYXRlbGluZUA+PEAvZGF0ZWxpbmVAPg0K
[/paralistvalue]
[ftpserver]
[/ftpserver]
[/ftpport]
[/ftpuser]
[/ftppasv]
[ftpdelay]
[/ftpdelay]
[/ymupdir]
[codepage]
[/codepage]
[translang]
[/translang]
[transparas]
[/transparas]
[pathfile]
xPq1xM341b5GVFDEv8K8L2RhdGEvYXR0YWNobWVudC9wb3J0YWw=
[/pathfile]
L2RhdGEvYXR0YWNobWVudC9wb3J0YWw=
[/urlfile]
ZXRhdHRhY2hz
c291cmNldXJs
[isloginpost]
[/isloginpost]
[postcookies]
[/postcookies]
[postokcode]
[/postokcode]
[postaddurl]
[/postaddurl]
[postreferer]
[/postreferer]
[ftpisproxy]
[/ftpisproxy]
[ftpproxyurl]
[/ftpproxyurl]
[ftpproxyport]
[/ftpproxyport]
[ftpproxyuser]
[/ftpproxyuser]
[ftpproxypwd]
[/ftpproxypwd]
[transmod]
[/transmod]
[replyfield]
[/replyfield]
[accountmod]
[/accountmod]
免责声明:自在工坊网站所展示的作品信息由用户自行提供,其真实性、准确性和合法性由信息发布人负责。自在工坊不提供任何保证,并不承担任何法律责任。

我要回帖

更多关于 discuz去除forum.php 的文章

 

随机推荐