定义了core这个类

  1. error_reporting(E_ALL);

error_reporting() 设置 PHP 的报错级别并返回当前级别。可以参考手册。

  1. define('IN_DISCUZ', true);
  2. define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -12));
  3. define('DISCUZ_CORE_DEBUG', false);
  4. define('DISCUZ_TABLE_EXTENDABLE', false);

定义了4个常量,他们的作用是:

in_discuz: true 表示可以通过这个文件去访问其他文件,否则不能独立去访问某些文件。

比如,其他的某个文件开头:该文件就是不能直接或者单独被访问的。  

  1. if(!defined('IN_DISCUZ')) {
  2. exit('Access Denied');
  3. }

discuz_root: 得到class_core.php所在的根目录,即source文件夹所在的目录( source/class 刚好12个字符)。

  dirname(): 返回路径中的目录部分,即一个完整的路径,去掉文件名的部分,类似的还有

  basename() - 返回路径中的文件名部分

  pathinfo() - 返回文件路径的信息

  realpath() - 返回规范化的绝对路径名

  举例说明: __FILE__ = F:\php-projects\Discuz32\upload\forum.php

  那么 dirname() = F:\php-projects\Discuz32\upload ; basename() = forum.php ;

  pathinfo() 是个array 

  1. array (size=4)
  2. 'dirname' => string 'F:\php-projects\Discuz32\upload' (length=31)
  3. 'basename' => string 'forum.php' (length=9)
  4. 'extension' => string 'php' (length=3)
  5. 'filename' => string 'forum' (length=5)

  DISCUZ_CORE_DEBUG: 设置core类的debug是否开启,默认是false,如果需要调试,可以手动改为true。下面紧接着就用到了。

  DISCUZ_TABLE_EXTENDABLE: 未知

  1. set_exception_handler(array('core', 'handleException'));

设置用户自定义的异常处理函数。参数是一个数组的话,那说明这个数组的第一个元素是类名或对象名称,第二个元素是方法名
如果发生未被捕获的exception的时候,调用core类中的handleException方法。
函数的用途: http://www.w3school.com.cn/php/func_error_set_exception_handler.asp

  1. if(DISCUZ_CORE_DEBUG) {
  2. set_error_handler(array('core', 'handleError'));
  3. register_shutdown_function(array('core', 'handleShutdown'));
  4. }

从上面看出,默认core的debug是关闭的,如果为true,则调用用户自定义的错误处理程序, core类的handleError方法。

register_shutdown_function()介绍:so,这个函数不管是程序执行完毕还是程序执行出错,最后总是会回调我们写的demo函数。好了,我们可以利用这个特性写一个专门记录程序执行错误、记录日志的函数。参考:http://blog.csdn.net/phpwish/article/details/7857917

  1. if(function_exists('spl_autoload_register')) {
  2. spl_autoload_register(array('core', 'autoload'));
  3. } else {
  4. function __autoload($class) {
  5. return core::autoload($class);
  6. }
  7. }

function_exists() 检测spl_autoload_register函数是否存在,存在的话,当new core的时候,调用 core::autoload方法来实例化core;否则执行 __autoload()函数实例化,其实也是调用core::autoload方法。

至于spl_autoload_register 和 __autoload 函数的详细解释,参加:http://blog.csdn.net/panpan639944806/article/details/23192267

core::autoload方法如下:

  1. public static function autoload($class) {
  2. $class = strtolower($class);
  3. if(strpos($class, '_') !== false) {
  4. list($folder) = explode('_', $class);
  5. $file = 'class/'.$folder.'/'.substr($class, strlen($folder) + 1);
  6. } else {
  7. $file = 'class/'.$class;
  8. }
  9.  
  10. try {
  11.  
  12. self::import($file);
  13. return true;
  14.  
  15. } catch (Exception $exc) {
  16.  
  17. $trace = $exc->getTrace();
  18. foreach ($trace as $log) {
  19. if(empty($log['class']) && $log['function'] == 'class_exists') {
  20. return false;
  21. }
  22. }
  23. discuz_error::exception_error($exc);
  24. }
  25. }

$class 通过 ‘_’被分割成2部分,前面的是文件夹,后面的是文件名。$file = ./class/.../文件名

然后导入所需的文件。如果导入出现exception,则处理之。

./upload/source/class/class_core.php的更多相关文章

  1. ./upload/forum.php

    这是forum.php的全部代码,然后试着读一读,自己做做笔记. define('APPTYPEID', 2); define('CURSCRIPT', 'forum'); define(); 定义常 ...

  2. Discuz X1.5 X2.5 X3 UC_KEY Getshell Write PHPCODE into config/config_ucenter.php Via /api/uc.php Vul

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在Discuz中,uc_key是UC客户端与服务端通信的通信密钥.因此使用uc_k ...

  3. Discuz常见大问题-如何自定义单个页面

    比如我们先做一个最简单的网站的最后一页关于我们(插入了一幅图片,同时加入了几行文字) 先做好两个页面的文件(php页面是负责解析htm页面的,目前这两个页面都是空的) mypage_about.php ...

  4. 数据库出错提示Duplicate entry * for key *的解决方法

    错误编号:1062 错误提示: 查询语句错误] ERR: Duplicate entry ' for key 'PRIMARY' SQL: ' PHP: misc.php: ; IP 问题分析: 向唯 ...

  5. discuz数据批量入库接口

    近期在做社区,首选discuz,数据需要用scrapy爬虫批量入库,就写了一个php入库接口. <?php define('PW', 'abc123456');//一定要修改 if($_REQU ...

  6. discuz论坛门户资讯入库接口【原创】

    最近想打造一个社区门户站点,所以写了这个入库接口,可以对接数据入库. <?php /* * Discuz x3.2 门户免登陆发布接口 * 2018-08-10 * Copyright 68xi ...

  7. discuz接入七牛sdk

    自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件   解释:就 ...

  8. 记录PHP的超全局变量$_SERVER

    $_SERVER是PHP中十分实用的超全局变量,在开发可移植的网站的时候会变得很有用. 下面我记录一下我自己常用到的几个变量 1.$_SERVER['SERVER_NAME']:记录了网站的域名. 2 ...

  9. Web API与文件操作

    前段时间,一直有练习ASP.NET MVC与Web API交互,接下来,Insus.NET再做一些相关的练习,Web API与文件操作,如POST文件至Web API,更新或是删除等. 不管怎样,先在 ...

随机推荐

  1. PHP乱码问题,UTF-8(乱码) (share)

    一.PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码 ...

  2. jsp的九大内置对象和四大作用域(转)

    定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域)  客户端的 ...

  3. LintCode Find Minimum In Rotated Sorted Array

    1. 画图, 直观. 2. 讨论数组为空或者个数为零. 3. 讨论首尾, 若为翻转过的则进行查找直到最后两个数进行比较, 取小者. public class Solution { /** * @par ...

  4. iOS7上的地图定位接口BUG

    遇到个BUG,卡了好久,就是在iOS9上定位接口是正常的,但是在iOS7上就一直拿不到回调,但是看系统日志其实已经定位到了.总是在报一句not response,也没有具体函数名 昨天灵机一动,从de ...

  5. function中的ajax怎么返回一个数

  6. React(JSX语法)----动态UI

    1.React honws how to bubble and capture events according to the spec,and events passed to your event ...

  7. Flask-SQLAlchemy 的操作

    from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) ================= ...

  8. Python实例3

    3.一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少? 正解: 源码: #!/usr/bin/python # -*- coding: UTF-8 -*- im ...

  9. 通过js的console优雅的将php调试信息输出

    function consoleLog($val){ $debug = debug_backtrace(); unset($debug[0]['args']); echo '<script> ...

  10. Linux下压缩mp3文件

    apt-get install lame lame -b 64 a.mp3 b.mp3 lame是压缩mp3的一个小工具 参数 -b 64 是输出文件的采样率64 a.mp3 是源文件 b.mp3 是 ...