非常气愤,SuperSite 居然连计划任务的程序也加密,不过还是被俺解开了,用的工具就是 黑刀 Dezender 4 ,本来你加密也没什么,但是你不能弄一堆bug在里面啊,这样就不厚道了,害得我浪费了我一天半时间,我晕死.
第一点,在你第次运行完它的计划任务后最定要删掉 log/cron.lock.log 这个文件,要不然你再一次手动运行的时候它是不会执行的.
第二点, 如果你的计划任务里没有 updatebbsforums.php 这个东东 那就手动加一个吧,如果你没有这个文件就去它的官方网站找.
第三点,居然在数据表forums里还差 updateline 这个字段. updateline int(10) NOT NULL
第四点 如果它报错说没有 getbbsforumarr 这个函数,那你也得去官方重新下载/function/cron.func.php 这个文件
第五点 他们会自作聪明的让你每次只更新两个板块,这也是最让人郁闷的地方,可以是为了传说中的提高什么性能吧,但这种以牺生功能来取得那么一小点的性能提升的确没什么必要,下面贴出我的整个修改后的 updatebbsforums.php 文件
<?php
if ( !defined( “IN_SUPESITE” ) )
{
exit( “Access Denied” );
}
include_once( S_ROOT.”./function/cron.func.php” );
if ( empty( $_SCONFIG[‘ucmode’] ) )
{
exit( );
}
dbconnect( 1 );
$updatesql = “SELECT i.fid, ii.supe_pushsetting FROM “.tname( “forums”, 1 ).” i, “.tname( “forumfields”, 1 ).” ii WHERE i.fid=ii.fid AND i.fup<>’0′ ORDER BY i.updateline ASC”;
$query = $_SGLOBAL[‘db_bbs’]->query( $updatesql );
$updateid = array( );
$str_fid = “”;
$i = 0;
while ( $forum = $_SGLOBAL[‘db’]->fetch_array( $query ) )
{
if ( !empty( $forum[‘supe_pushsetting’] ) )
{
$forum[‘supe_pushsetting’] = unserialize( $forum[‘supe_pushsetting’] );
if ( $forum[‘supe_pushsetting’][‘status’] == 1 || $forum[‘supe_pushsetting’][‘status’] == 3 )
{
$updateid[$i++] = $forum[‘fid’];
$_SGLOBAL[‘bbsforumarr’][$forum[‘fid’]] = getbbsforumarr( $forum[‘supe_pushsetting’], $forum[‘fid’] );
if ($i==1)
$str_fid = $str_fid . $forum[‘fid’];
else
$str_fid = $str_fid . “,” . $forum[‘fid’];
/*
if ( $i == 2 )
{
break;
}
*/
}
}
}
if ( !empty( $_SGLOBAL[‘bbsforumarr’] ) && !empty( $updateid ) )
{
// $_SGLOBAL[‘db_bbs’]->query( “UPDATE “.tname( “threads”, 1 ).” SET supe_pushstatus=’1′ WHERE (fid ='”.$updateid[0].”‘ AND special=’0′ AND supe_pushstatus<>’1’ “.$_SGLOBAL[‘bbsforumarr’][$updateid[0]][‘plussql’].”) OR (fid ='”.$updateid[1].”‘ AND special=’0′ AND supe_pushstatus<>’1’ “.$_SGLOBAL[‘bbsforumarr’][$updateid[1]][‘plussql’].”)” );
// $_SGLOBAL[‘db_bbs’]->query( “UPDATE “.tname( “forums”, 1 ).” SET updateline=”.$_SGLOBAL[‘timestamp’].” WHERE fid='”.$updateid[0].”‘ OR fid='”.$updateid[1].”‘” );
$_SGLOBAL[‘db_bbs’]->query( “UPDATE “.tname( “threads”, 1 ).” SET supe_pushstatus=’1′ WHERE fid IN (“.$str_fid.”) AND special=’0′ AND supe_pushstatus<>’1′ ” );
$_SGLOBAL[‘db_bbs’]->query( “UPDATE “.tname( “forums”, 1 ).” SET updateline=”.$_SGLOBAL[‘timestamp’].” WHERE fid IN (“.$str_fid.”)” );
}
?>
总结: 实际上它费了这么多周则也仅仅是在 threads 表里将 supe_pushstatus 设置为1 而已,只要是为1的,那么就都会显示出来,你也可以自己写个程序搞定它,一个字烦