分类 代码人生 下的文章

问题? 今天迁站的时候PHP突然报错:

is_readable() [function.is-readable]: open_basedir restriction in effect. File(D:\phpnow\vhosts\wordpress.com/wp-content/plugins/D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter/trans/crayon-syntax-highlighter-zh_CN.mo) is not within the allowed path(s): (D:\phpnow\vhosts\wordpress.com;C:\Windows\Temp;) in D:\phpnow\vhosts\wordpress.com\wp-includes\l10n.php on line 339 好吧,看来是crayon-syntax-highlighter插件出错了,下面我们就一起找找出错的地方吧。

如何解决

确定出错地点 根据出错提示我们找到了

D:\phpnow\vhosts\wordpress.com\wp-includes\l10n.php的第339行,代码如下:

if ( !is_readable( $mofile ) ) return false;

这个$mofile哪里来的呢?把整个函数贴出来找找看!

function load_textdomain( $domain, $mofile ) {
	global $l10n;

	$plugin_override = apply_filters( 'override_load_textdomain', false, $domain, $mofile );

	if ( true == $plugin_override ) {
		return true;
	}

	do_action( 'load_textdomain', $domain, $mofile );

	$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

	if ( !is_readable( $mofile ) ) return false;

	$mo = new MO();
	if ( !$mo->import_from_file( $mofile ) ) return false;

	if ( isset( $l10n[$domain] ) )
		$mo->merge_with( $l10n[$domain] );

	$l10n[$domain] = &$mo;

	return true;
}

看来是函数传进来的一个字符串,看来我们要继续寻找调用这个函数的地方了。不过wordpress的php文件少说也有1000多个,这样找下去是个什么效率?

等等!我好像想起来在学习数据结构的时候有一个概念叫栈,stack,什么是栈呢?其实站只是一个特殊的数据结构,它只允许在一串数据的一段进行操作,比如增加数据元素(入栈),删除数据元素(出栈)。举个栗子,堆栈就好比向水杯中放乒乓球,水杯的横截面只能通过一个乒乓球,如果想要把最先放进去的球取出来,必须把他上面的乒乓球按顺序一个一个取出来才行。 为什么突然想到栈这个概念呢?因为我们的函数调用就是使用的栈这个概念。简单地说,一个函数调用另一个函数,那么在调用期间需要保存现场,将自己的数据(比如调用指针、参数等)压入一个栈中,当调用完毕后再出栈恢复数据,然后继续调用。这个过程说起来简单,其实很复杂。以下摘自wikipedia:

在计算机科学领域中,'调用栈'Call Stack)是用于存储子程序信息的一类栈,别称执行栈(execution stack)、控制栈(control stack)、运行时栈(run-time stack)与机器栈(machine stack),在英语中亦经常简称为“栈”(“the stack”)。调用栈的维护对多数软件的正常运转有着重要意义,但一般高级语言都会隐藏其细节并自动进行维护。

既然细节被隐藏了,那么就不用深究了。下面就引出今天的主角函数。

主角

debug_backtrace()和debug_print_backtrace()两兄弟。

主要功能:他们保存了函数的调用栈信息,一个不输出以数组形式保存,另一个直接输出调用栈,调试的时候一般使用debug_print_backtrace()。 知道了这两个函数,将函数加入要追溯的函数内的第一行,不要忘了加;。 debug_backtrace()使用print_r显示如下:

Array
(
    [0] => Array
        (
            [file] => D:\phpnow\vhosts\wordpress.com\wp-includes\l10n.php
            [line] => 428
            [function] => load_textdomain
            [args] => Array
                (
                    [0] => crayon-syntax-highlighter
                    [1] => D:\phpnow\vhosts\wordpress.com/wp-content/plugins/D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter/trans/crayon-syntax-highlighter-zh_CN.mo
                )

        )

定睛一看,原来是个多维数组。file是调用文件,line是函数出现的行数,function是函数名,args是参数。 直接使用debug_print_backtrace()看看:

#0  load_textdomain(crayon-syntax-highlighter, D:\phpnow\vhosts\wordpress.com/wp-content/plugins/D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter/trans/crayon-syntax-highlighter-zh_CN.mo) called at [D:\phpnow\vhosts\wordpress.com\wp-includes\l10n.php:428]
#1  load_plugin_textdomain(crayon-syntax-highlighter, , D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter/trans/) called at [D:\phpnow\vhosts\wordpress.com\wp-admin\includes\plugin.php:121]
#2  _get_plugin_data_markup_translate(D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter\crayon_wp.class.php, Array ([Name] => Crayon Syntax Highlighter,[PluginURI] => https://github.com/aramkocharyan/crayon-syntax-highlighter,[Version] => 2.4.1,[Description] => Supports multiple languages, themes, highlighting from a URL, local file or post text.,[Author] => Aram Kocharyan,[AuthorURI] => http://aramk.com/,[TextDomain] => crayon-syntax-highlighter,[DomainPath] => /trans/,[Network] => ), 1, 1) called at [D:\phpnow\vhosts\wordpress.com\wp-admin\includes\plugin.php:99]
#3  get_plugin_data(D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter\crayon_wp.class.php) called at [D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter\crayon_wp.class.php:39]
#4  include_once(D:\phpnow\vhosts\wordpress.com\wp-content\plugins\crayon-syntax-highlighter\crayon_wp.class.php) called at [D:\phpnow\vhosts\wordpress.com\wp-settings.php:197]
#5  require_once(D:\phpnow\vhosts\wordpress.com\wp-settings.php) called at [D:\phpnow\vhosts\wordpress.com\wp-config.php:90]
#6  require_once(D:\phpnow\vhosts\wordpress.com\wp-config.php) called at [D:\phpnow\vhosts\wordpress.com\wp-load.php:29]
#7  require_once(D:\phpnow\vhosts\wordpress.com\wp-load.php) called at [D:\phpnow\vhosts\wordpress.com\wp-blog-header.php:12]
#8  require(D:\phpnow\vhosts\wordpress.com\wp-blog-header.php) called at [D:\phpnow\vhosts\wordpress.com\index.php:30]

所有的函数调用清晰的呈现!

BUG在哪里?

通过仔细查找,发现原来load_plugin_textdomain()的第三个参数出了问题,该参数没有返回相对路径导致最后的路径错误,导致了MO文件无法找到。修改即可!

高级应用

请参考此篇

PHP debug_backtrace的胡思乱想

PHP经典函数

sys_getloadavg()

这个函数返回当前系统的负载均值信息(当然 Windows 下不适用),详细文档可以翻阅 PHP的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。

$load = sys_getloadavg();
if ($load[0] > 80) {
    header('HTTP/1.1 503 Too busy, try again later');
    die('Server too busy. Please try again later.');
}
//PS,如果“很不幸”你的 PHP 环境中没有这个函数,可以考虑使用下面这段代码
if (!function_exists('sys_getloadavg')) {
    function sys_getloadavg()
    {
        $loadavg_file = '/proc/loadavg';
        if (file_exists($loadavg_file)) {
            return explode(chr(32),file_get_contents($loadavg_file));
        }
        return array(0,0,0);
    }
}

debug_backtrace兄弟

使用请参考使用debug_backtrace()做PHP调试

get_browser()

该方法参考一个名叫browscap.ini的文件,该文件收录了各种浏览器信息,通过比对实现查找客户浏览器的功能。 两个使用方法:

1.下载最新的browscap.ini,放入PHP的安装目录或者C:\Windows文件夹下

下载地址

2.在PHP.INI文件中加入以下配置

[browscap]
;https://blog.phpgao.com/classic_code/
browscap = php_browscap.ini

3.使用代码如下

http://www.phpgao.com
print_r($browser);

返回结果如下

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Array
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
    [parent] => Firefox 0.9
    [platform] => WinXP
    [browser] => Firefox
    [version] => 0.9
    [majorver] => 0
    [minorver] => 9
    [cssversion] => 2
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] =>
    [vbscript] =>
    [javascript] => 1
    [javaapplets] => 1
    [activexcontrols] =>
    [cdf] =>
    [aol] =>
    [beta] => 1
    [win16] =>
    [crawler] =>
    [stripper] =>
    [wap] =>
    [netclr] =>
)

另一种方法:

http://alexandre.alapetite.fr/doc-alex/php-local-browscap/index.en.html

glob()

eg1:

方便地替代 opendir() 和相关函数


eg2:获取所有文件名,并输出为一个带链接的列表

".$filename."
"; } ?>

eg3:非递归实现文件遍历


更多使用请参考:

http://php.net/manual/zh/function.glob.php

PHP Filter 函数

让人很省心的函数,自动验证电子邮件或者url格式,使用方法请参考:

http://www.w3school.com.cn/php/php_ref_filter.asp

错误处理

set_error_handler — 设置一个用户定义的错误处理函数

占个坑,以后讲

有些网站真是可恶,把右键屏蔽了不给复制,这样还不行(因为可以使用快捷键CTRL+C复制) 他们竟然不让我们选择文字。。。这样下来我们既不能复制,连源代码都不能看了。是可忍孰不可忍,既然这样,那我就不客气了!

找到病根是关键

原来是JS捣的鬼

纯html是无法实现屏蔽右键等功能的,所以很简单就能想到是js的问题,那么我们就找找到底是那些代码段使得我们无法使用邮件功能呢? 既然右键被禁止了,那我们如何才能看到网页的源代码呢? 其实很简单,PHP@老高建议你使用chrome浏览器打开你想要破解的网站,使用快捷键CTRL+U即可轻易查看网页的源代码!怎么样,很简单吧? 好了既然我们已经找到源代码,那就开始找那个害人的代码段吧!

代码一 这个是比较难找的代码,一般隐藏在网页的头部或者藏在某些引用的js文件中


代码二

这个比较容易找到,直接找到标签,之后就是此句,与代码一异曲同工


解决方法

IE浏览器 使用IE的童鞋可以试试在浏览器的地址栏输入

javascript:alert(document.oncontextmenu=document.onselectstart="OK")

或者

javascript:alert(document.body.oncontextmenu=document.body.onselectstart="OK")

之后弹出对话框,点击确认即可!现在点击右键或者选择文字试试,是不是已经被破解了? 请注意!该方法可能已经失效,因为新一代浏览器对安全性有了很大的提高,所以在地址栏输入脚本可能会被禁止!

接下来就是将他删除掉即可: 在代码上点击右键:选择第二项Edit Attribute,将其属性删除,结果代码变成这样: 不用怀疑了,刚才限制的功能已经恢复啦!

其他浏览器

以chrome为例 首先,在被屏蔽的网站上点击F12,出现了如下图所示代码(注:老高@PHPer使用的是chrome v30,不同版本的界面留有不同)

当然,您的火眼金睛可能立即发现了蓝色标记的一行代码


接下来就是将他删除掉即可:

在代码上点击右键:选择第二项Edit Attribute,将其属性删除,不用怀疑了,限制的功能已经恢复啦!

终极方法

在浏览器中将以下代码存为书签,名为解锁,在被禁网址中点击一下解锁,即可解开~

javascript:(function() { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("contextmenu"); R("click"); R("mousedown"); R("mouseup"); R("selectstart");})()

phpMyAdmin一般只能本地登录,即地址为localhost,如果想管理如192.168.1.254(非本机IP)的mysql应该如何做到呢?其实很简单,phpMyAdmin已经实现,但是默认并没有开启此功能。 3步搞定

  1. 在phpMyAdmin目录下libraries目录中config.default.php文件并打开
  2. 找到此选项$cfg['AllowArbitraryServer'] = false;
  3. 将false改为true 补充: 如果登录的是本地服务器,那么登录的时候可以把服务器一栏留空。

短链接

http://surl.sinaapp.com/ 引入百度CDN公共库 地址:http://t.cn/zYDC8wj

引入文件





PHP

//申明页面编码开启session并设置时区
session_start();
header("Content-Type: text/html; charset=UTF-8");
ini_set('date.timezone','Asia/Shanghai');

//

//windows下这个页面执行时间还是在php.ini里控制,修改max_execution_time。
set_time_limit(0);
//获取变量的整数值
intval('adasdasd');

//heredoc==双引号
$name=MyName;
echo <<foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
/*
以上例程会输出:
My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A
*/

//Nowdoc==单引号
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;
/*
以上例程会输出:
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
*/

//一周开始和结束
echo $today=date('Ymd',time());
echo $getWeekDay=date('w',time());//获取当前星期几
echo $weekstar=date("Ymd",mktime(0,0,0,date('m'),date('d')-$getWeekDay+1,date("Y")));//本周开始
echo $weekend=date('Ymd',mktime(0,0,0,date('m'),date('d')-$getWeekDay+7,date('Y')));//本周结束

//内存占用  convert函数加单位
function convert($size){ 
$unit=array('b','kb','mb','gb','tb','pb'); 
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; 
} 
echo convert(memory_get_usage());
$var = str_repeat("liuhui", 10000); 
echo "
"; echo memory_get_usage(); unset($var); echo "
"; echo memory_get_usage();

Thinkphp

//Thinkphp常用配置 
//CHECK_FILE_CASE -- windows环境下面的严格检查大小写。 

    /* 项目设定 */
    'APP_DEBUG'    => false, // 是否开启调试模式
    'APP_DOMAIN_DEPLOY'     => false,   // 是否使用独立域名部署项目
    'APP_PLUGIN_ON'         => false,   // 是否开启插件机制
    'APP_FILE_CASE'         => false,   // 是否检查文件的大小写 对Windows平台有效
    'APP_GROUP_DEPR'        => '.',     // 模块分组之间的分割符
    'APP_GROUP_LIST'        => '',      // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'
    'APP_AUTOLOAD_REG'      => false,   // 是否开启SPL_AUTOLOAD_REGISTER
    'APP_AUTOLOAD_PATH'     => 'Think.Util.',// __autoLoad 机制额外检测路径设置,注意搜索顺序
    'APP_CONFIG_LIST'       => array('taglibs','routes','tags','htmls','modules','actions'),// 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(htmls)静态缓存定义, modules(扩展模块),actions(扩展操作)

    /* Cookie设置 */
    'COOKIE_EXPIRE'         => 3600,    // Coodie有效期
    'COOKIE_DOMAIN'         => '',      // Cookie有效域名
    'COOKIE_PATH'           => '/',     // Cookie路径
    'COOKIE_PREFIX'         => '',      // Cookie前缀 避免冲突

    /* 默认设定 */
    'DEFAULT_APP'           => '@',     // 默认项目名称,@表示当前项目
    'DEFAULT_GROUP'         => 'Home', // 默认分组
    'DEFAULT_MODULE'        => 'Index', // 默认模块名称
    'DEFAULT_ACTION'        => 'index', // 默认操作名称
    'DEFAULT_CHARSET'       => 'utf-8', // 默认输出编码
    'DEFAULT_TIMEZONE'      => 'PRC', // 默认时区
    'DEFAULT_AJAX_RETURN'   => 'JSON', // 默认AJAX 数据返回格式,可选JSON XML ...
    'DEFAULT_THEME'    => 'default', // 默认模板主题名称
    'DEFAULT_LANG'          => 'zh-cn', // 默认语言

    /* 数据库设置 */
    'DB_TYPE'               => 'mysql',     // 数据库类型
     'DB_HOST'               => 'localhost', // 服务器地址
     'DB_NAME'               => '',          // 数据库名
     'DB_USER'               => 'root',      // 用户名
     'DB_PWD'                => '',          // 密码
     'DB_PORT'               => 3306,        // 端口
     'DB_PREFIX'             => 'think_',    // 数据库表前缀
   'DB_SUFFIX'             => '',          // 数据库表后缀
    'DB_FIELDTYPE_CHECK'    => false,       // 是否进行字段类型检查
    'DB_FIELDS_CACHE'       => true,        // 启用字段缓存
    'DB_CHARSET'            => 'utf8',      // 数据库编码默认采用utf8
    'DB_DEPLOY_TYPE'        => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'DB_RW_SEPARATE'        => false,       // 数据库读写是否分离 主从式有效

    /* 数据缓存设置 */
    'DATA_CACHE_TIME' => -1,      // 数据缓存有效期
    'DATA_CACHE_COMPRESS'   => false,   // 数据缓存是否压缩缓存
    'DATA_CACHE_CHECK' => false,   // 数据缓存是否校验缓存
    'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite| Xcache|Apachenote|Eaccelerator
    'DATA_CACHE_PATH'       => TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    'DATA_CACHE_SUBDIR' => false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       => 1,        // 子目录缓存级别

    /* 错误设置 */
    'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~',//错误显示信息,非调试模式有效
    'ERROR_PAGE'    => '', // 错误定向页面

    /* 静态缓存设置 */
    'HTML_CACHE_ON'   => false,   // 默认关闭静态缓存
    'HTML_CACHE_TIME' => 60,      // 静态缓存有效期
    'HTML_READ_TYPE'        => 0,       // 静态缓存读取方式 0 readfile 1 redirect
    'HTML_FILE_SUFFIX'      => '.shtml',// 默认静态文件后缀

    /* 语言设置 */
    'LANG_SWITCH_ON'        => false,   // 默认关闭多语言包功能
    'LANG_AUTO_DETECT'      => true,   // 自动侦测语言 开启多语言功能后有效

    /* 日志设置 */
    'LOG_RECORD'            => false,   // 默认不记录日志
    'LOG_FILE_SIZE'         => 2097152, // 日志文件大小限制
    'LOG_RECORD_LEVEL'      => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别

    /* 分页设置 */
   'PAGE_ROLLPAGE'         => 5,      // 分页显示页数
   'PAGE_LISTROWS'         => 20,     // 分页每页显示记录数

    /* SESSION设置 */
    'SESSION_AUTO_START'    => true,    // 是否自动开启Session
    // 内置SESSION类可用参数
    //'SESSION_NAME'          => '',      // Session名称
    //'SESSION_PATH'          => '',      // Session保存路径
    //'SESSION_CALLBACK'      => '',      // Session 对象反序列化时候的回调函数

    /* 运行时间设置 */
    'SHOW_RUN_TIME'   => false,   // 运行时间显示
    'SHOW_ADV_TIME'   => false,   // 显示详细的运行时间
    'SHOW_DB_TIMES'   => false,   // 显示数据库查询和写入次数
    'SHOW_CACHE_TIMES' => false,   // 显示缓存操作次数
    'SHOW_USE_MEM'   => false,   // 显示内存开销
    'SHOW_PAGE_TRACE' => false,   // 显示页面Trace信息 由Trace文件定义和Action操作赋值
    'SHOW_ERROR_MSG'        => true,    // 显示错误信息

    /* 模板引擎设置 */
    'TMPL_ENGINE_TYPE' => 'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_DETECT_THEME'     => false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html',     // 默认模板文件后缀
    'TMPL_CACHFILE_SUFFIX' => '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_PARSE_STRING'     => '',          // 模板引擎要自动替换的字符串,必须是数组形式。
    'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     => 'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      => false,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME' => -1,         // 模板缓存有效期 -1 为永久,(以数字为值,单位:秒)
    'TMPL_ACTION_ERROR'     => 'Public:success', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   => 'Public:success', // 默认成功跳转对应的模板文件
    'TMPL_TRACE_FILE'       => THINK_PATH.'/Tpl/PageTrace.tpl.php',     // 页面Trace的模板文件
    'TMPL_EXCEPTION_FILE'   => THINK_PATH.'/Tpl/ThinkException.tpl.php',// 异常页面的模板文件
    'TMPL_FILE_DEPR'=>'/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符,只对项目分组部署有效
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          => '<', // 标签库标签开始标记
    'TAGLIB_END'            => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'           => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔
    'TAGLIB_PRE_LOAD'       => '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'TAG_NESTED_LEVEL' => 3,    // 标签嵌套级别
    'TAG_EXTEND_PARSE'      => '',   // 指定对普通标签进行扩展定义和解析的函数名称。

    /* 表单令牌验证 */
    'TOKEN_ON'                    =>   true,     // 开启令牌验证
    'TOKEN_NAME'                =>   '__hash__',    // 令牌验证的表单隐藏字段名称
    'TOKEN_TYPE'                 =>    'md5',   // 令牌验证哈希规则

    /* URL设置 */
'URL_CASE_INSENSITIVE' => false,   // URL地址是否不区分大小写
    'URL_ROUTER_ON'         => false,   // 是否开启URL路由
    'URL_DISPATCH_ON'       => true, // 是否启用Dispatcher
    'URL_MODEL'      => 1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 当URL_DISPATCH_ON开启后有效; 默认为PATHINFO 模式,提供最好的用户体验和SEO支持
    'URL_PATHINFO_MODEL'    => 2,       // PATHINFO 模式,使用数字1、2、3代表以下三种模式:
    // 1 普通模式(参数没有顺序,例如/m/module/a/action/id/1);
    // 2 智能模式(系统默认使用的模式,可自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...);
    // 3 兼容模式(通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1)
    'URL_PATHINFO_DEPR'     => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_HTML_SUFFIX'       => '', // URL伪静态后缀设置

    /* 系统变量名称设置 */
    'VAR_GROUP'             => 'g',     // 默认分组获取变量
    'VAR_MODULE'            => 'm', // 默认模块获取变量
    'VAR_ACTION'            => 'a', // 默认操作获取变量
    'VAR_ROUTER'            => 'r',     // 默认路由获取变量
    'VAR_PAGE'              => 'p', // 默认分页跳转变量
    'VAR_TEMPLATE'          => 't', // 默认模板切换变量
'VAR_LANGUAGE'          => 'l', // 默认语言切换变量
    'VAR_AJAX_SUBMIT'       => 'ajax', // 默认的AJAX提交变量
    'VAR_PATHINFO'          => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_MODEL 和 URL_PATHINFO_DEPR

HTML







JS

document.write("Hello");
//引入百度CDN公共库

MYSQL

#为已存在的表生成索引
ALTER TABLE mdqc_votes ADD INDEX vote_baby_id (baby_id);

DOS

::清除本机DNS缓存
ipconfig /flushdns

SHELL

#列出当前目录里最大的10个文件  
du -s * | sort -n | tail

这个是采集基础,最好熟悉一下

$ch = curl_init();
# 设定url和把结果返回,是否返回头部
curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->ch, CURLOPT_HEADER, 1);

# cookie文件设定
curl_setopt($this->ch, CURLOPT_COOKIEJAR,  $cookie_file);
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookie_file);

# 额外头部
curl_setopt($this->ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0'));

# 设定post
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststring);

# 连接、执行过期时间
curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($this->ch, CURLOPT_TIMEOUT, 30);

# 是否跟随301 302
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($this->ch, CURLOPT_MAXREDIRS, 10);

# refer
curl_setopt($this->ch, CURLOPT_REFERER, $refer);

# http版本和端口重用设置
curl_setopt($this->ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($this->ch, CURLOPT_FORBID_REUSE, 1);

# 支持https
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);

# 如果需要进行毫秒超时,需要增加:
curl_setopt($this->ch, CURLOPT_NOSIGNAL, 1);

# 执行
$response = curl_exec($ch);
if(curl_errno($ch)){
    curl_error($ch);
    exit();
}
curl_close($ch);