分类 代码人生 下的文章
使用debug_backtrace()做PHP调试
问题? 今天迁站的时候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经典函数收集
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的远程登录
phpMyAdmin一般只能本地登录,即地址为localhost,如果想管理如192.168.1.254(非本机IP)的mysql应该如何做到呢?其实很简单,phpMyAdmin已经实现,但是默认并没有开启此功能。 3步搞定
- 在phpMyAdmin目录下
libraries目录中config.default.php文件并打开 - 找到此选项
$cfg['AllowArbitraryServer'] = false; - 将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
PHP_cURL初始化和执行方法
这个是采集基础,最好熟悉一下
$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);