+ -
当前位置:首页 → 问答吧 → 怪事!这个是如何调用论坛标题的?

怪事!这个是如何调用论坛标题的?

时间:2010-06-06

来源:互联网

http://www.ziyou001.com/在网站主页右侧的论坛精华贴调用了论坛里的十个贴子,我们领导让我改成调用15条贴子,我以为很容易,可是我过代码后傻眼了,这是怎么调用的?网站是用supesite建的,按它的规则,一般显示10条信息就是在模板模块里limit/0,10就行了,可是这个不一样了,看模板代码:
复制代码
  1. <div class="global_module margin_bot10 bg_fff">
  2.             <div class="global_module6_caption"><h3>论坛精华帖</h3></div>
  3.             <ul class="global_tx_list3">
  4.                 <script type="text/javascript" src="/bbs/api/javascript.php?key=%D6%F7%CC%E2%C1%D0%B1%ED_l2n_33l"></script>
  5.             </ul>
  6.         </div>


我就纳闷了:就靠那个一句<script type="text/javascript" src="/bbs/api/javascript.php?key=%D6%F7%CC%E2%C1%D0%B1%ED_l2n_33l"></script>就能调用十条论坛主题了吗?
所以我再查看那个javasrcipt.php代码:

复制代码
  1. <?php
  2. /*
  3.     [Discuz!] (C)2001-2009 Comsenz Inc.
  4.     This is NOT a freeware, use is subject to license terms
  5.     $Id: javascript.php 18385 2009-04-30 02:25:43Z monkey $
  6. */
  7. //error_reporting(E_ERROR | E_WARNING | E_PARSE);
  8. error_reporting(0);
  9. define('IN_DISCUZ', TRUE);
  10. define('DISCUZ_ROOT', '../');
  11. if(PHP_VERSION < '4.1.0') {
  12.     $_GET        =    &$HTTP_GET_VARS;
  13.     $_SERVER    =    &$HTTP_SERVER_VARS;
  14. }
  15. require_once DISCUZ_ROOT.'./forumdata/cache/cache_settings.php';
  16. require_once DISCUZ_ROOT.'./forumdata/cache/cache_request.php';
  17. if($_DCACHE['settings']['gzipcompress']) {
  18.     ob_start('ob_gzhandler');
  19. }
  20. $jsstatus    =    isset($_DCACHE['settings']['jsstatus']) ? $_DCACHE['settings']['jsstatus'] : 1;
  21. if(!$jsstatus && !empty($_GET['key'])) {
  22.     exit("document.write(\"<font color=red>The webmaster did not enable this feature.</font>\");");
  23. }
  24. $jsrefdomains    =    isset($_DCACHE['settings']['jsrefdomains']) ? $_DCACHE['settings']['jsrefdomains'] : preg_replace("/([^\:]+).*/", "\\1", (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : NULL));
  25. $REFERER    =     parse_url($_SERVER['HTTP_REFERER']);
  26. if($jsrefdomains && (empty($REFERER) | !in_array($REFERER['host'], explode("\r\n", trim($jsrefdomains))))) {
  27.     exit("document.write(\"<font color=red>Referer restriction is taking effect.</font>\");");
  28. }
  29. if(!empty($_GET['key']) && !empty($_DCACHE['request'][$_GET['key']]['url'])) {
  30.     $cachefile    =    DISCUZ_ROOT.'./forumdata/cache/javascript_'.$_GET['key'].'.php';
  31.     parse_str($_DCACHE['request'][$_GET['key']]['url'], $requestdata);
  32. } else {
  33.     exit;
  34. }
  35. $expiration    =    0;
  36. $times*****p    =    time();
  37. $rewritestatus     =    $_DCACHE['settings']['rewritestatus'];
  38. $uc        =    $_DCACHE['settings']['uc'];
  39. if(((@!include($cachefile)) || $expiration < $times*****p) && !file_exists($cachefile.'.lock')) {
  40.     require_once DISCUZ_ROOT.'./config.inc.php';
  41.     require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';
  42.     require_once DISCUZ_ROOT.'./include/global.func.php';
  43.     require_once DISCUZ_ROOT.'./include/request.func.php';
  44.     $db = new dbstuff;
  45.     $db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
  46.     unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
  47.     $dateformat    =    !empty($_DCACHE['settings']['jsdateformat']) ? $_DCACHE['settings']['jsdateformat'] : (!empty($_DCACHE['settings']['dateformat']) ? $_DCACHE['settings']['dateformat'] : 'm/d');
  48.     $timeformat    =    isset($_DCACHE['settings']['timeformat']) ? $_DCACHE['settings']['timeformat'] : 'H:i';
  49.     $PHP_SELF    =    $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
  50.     $boardurl    =    'http://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/';
  51.     $datalist     =     parse_request($requestdata, $cachefile, 1);
  52. }
  53. echo $datalist;
  54. function jsprocdata($data, $requestcharset) {
  55.     global $boardurl, $_DCACHE, $charset;
  56.     if($requestcharset) {
  57.         include DISCUZ_ROOT.'include/chinese.class.php';
  58.         if(strtoupper($charset) != 'UTF-8') {
  59.             $c = new Chinese($charset, 'utf8');
  60.         } else {
  61.             $c = new Chinese('utf8', $requestcharset == 1 ? 'gbk' : 'big5');
  62.         }
  63.         $data = $c->Convert($data);
  64.     }
  65.     return 'document.write(\''.preg_replace("/\r\n|\n|\r/", '\n', addcslashes($data, "'\\")).'\');';
  66. }
  67. ?>





可是依然看不明白这十条论坛标题是怎么调用的??请各位兄弟姐妹指点一二,小弟感激不尽!
[ 此帖被dreamboycx在2010-06-07 10:25重新编辑 ]

作者: dreamboycx   发布时间: 2010-06-06

$cachefile    =    DISCUZ_ROOT.'./forumdata/cache/javascript_'.$_GET['key'].'.php';
看一下这个文件里面的内容是不是包含有那些标题。
如果包含,就要去找找生成缓存的函数了,这个应该是在缓存直接提取的,所以修改一下缓存函数应该就可以了。

作者: huaihuajio   发布时间: 2010-06-06

?key=%D6%F7%CC%E2%C1%D0%B1%ED_l2n_33l  这个是经过URL编码的,在你的JavaScript.php的43行
  parse_str($_DCACHE['request'][$_GET['key']]['url'], $requestdata);
这段有对key进行解析,你看下parse_str()这个函数:
parse_str("id=23&name=John%20Adams");
echo $id."<br />";
echo $name;
结果是:
23
John Adams

也就是说对你后面%D6%F7%CC%E2%C1%D0%B1%ED_l2n_33l这鸟东东进行了解析,你输出的十条  这个信息也是在%D6%F7%CC%E2%C1%D0%B1%ED_l2n_33l里面,要输出十五条你看看十五条的数据时怎么弄的
再不行Q我

作者: zx68555   发布时间: 2010-06-06

额~~二楼说的不是太懂-_-怎么解析变的十条的呢?

作者: dreamboycx   发布时间: 2010-06-07

我不得不龌龊的自己顶一下,期待有人指点迷津~~~

作者: dreamboycx   发布时间: 2010-06-07

我倒!还没有人给指点下?我顶!我再顶~~~

作者: dreamboycx   发布时间: 2010-06-07

咳……咳……现在还是不懂呢

作者: dreamboycx   发布时间: 2010-07-08

我记得有个urlencode()函数可以将汉字转化成上面那一串鸟东东,但是不知道怎么搞?

作者: dreamboycx   发布时间: 2010-07-08

顶啊顶,我还不会-_-

作者: dreamboycx   发布时间: 2010-08-18