备忘日志【一】
来源:互联网 发布:唐湘龙 知乎 编辑:程序博客网 时间:2024/06/06 06:50
1、[2012-03-14] discuz可逆的加解密函数,安全,高效,md5,sha1等不可逆。
/** * 对字符串进行加密和解密 * @param <string> $string * @param <string> $operation DECODE 解密 | ENCODE 加密 * @param <string> $key 当为空的时候,取全局密钥 * @param <int> $expiry 有效期,单位秒 * @return <string> */function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {$ckey_length = 4;$key = md5($key != '' ? $key : getglobal('authkey'));$keya = md5(substr($key, 0, 16));$keyb = md5(substr($key, 16, 16));$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();for($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for($a = $j = $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}if($operation == 'DECODE') {if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {return substr($result, 26);} else {return '';}} else {return $keyc.str_replace('=', '', base64_encode($result));}}
2、[2012-03-14] PHP中的glob()函数
array glob ( string $pattern [, int $flags ] )
eg:
<?php
foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>
输出:
funclist.txt size 44686
funcsummary.txt size 267625
quickref.txt size 137820
//glob()函数应用,删除目录下所有文件
function rmrf($dir) { foreach (glob($dir) as $file) { if (is_dir($file)) { rmrf("$file/*"); rmdir($file); } else { unlink($file); } }}
3、[2012-03-14] 向远程服务器发送数据,有哪些函数?
fsocketopen(), curl(), file_get_contents()
4、[2012-03-14] rawurlencode与urlencode函数
其PHP 手册描述为:
rawurlencode -- 按照 RFC 1738 对 URL 进行编码
描述
string rawurlencode ( string str )返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 FTP 的 URL 中包含密码:
例子 1. rawurlencode() 示例 1
<?php
echo '<a href="ftp://user:', rawurlencode('foo @+%/'),
'@ftp.example.com/x.txt">';
?>
或者,如果你想通过 URL 的 PATH_INFO 构成部分去传递信息:
例子 2. rawurlencode() 示例 2
<?php
echo '<a href="http://example.com/department_list_script/',
rawurlencode('sales and marketing/Miami'), '">';
?>
urlencode -- 编码 URL 字符串
描述
string urlencode ( string str )返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页:
例子 1. urlencode() 示例
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
注意:小心与 HTML 实体相匹配的变量。像 &、© 和 £ 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP 通过 arg_separator .ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 & 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities(urlencode($data)) 对你的 URL 进行编码。
例子 2. urlencode() 与 htmlentities() 示例
<?php
echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">';
?>
urlencode和rawurlencode的区别
上面的图中有测试结果,urlencode把空格转成+号,而rawurlencode把空格转成%20
不仅仅是这些,有些时候文件的名字中有空格,如 http://www.test.com/123 abc.jpg
这样的网址是能访问的,只要123 abc.jpg在网站根目录存在。
不过中间有空格有时候容易导致网址缺少掉空格后面的部分,特别是网址比较长的时候,复制的人以为是两段话。或者双击选中,肯定不会包括空格后面的部分了。
这是我们就需要对空格进行转码,用urlencode可以吗? 答案是不可以!
urlencode把空格转成+号,而+号作为文件名来访问资源时,是不会自动转成空格的,就导致访问不到资源。
这是就要用到 rawurlencode ,%20 放在访问资源的网址中时,是能被识别成空格的。这就是它们之间的区别。
5、[2012-03-15] 为什么session_start()前不能用输出?
http数据包分头和内容
session_start 是要在响应的http头里面增加session相关数据的
但是如果你在session_start之前有输出
PHP就已经结束了对http头部分的处理, 开始输出http内容部分
这个时候你再加头的信息已经没有意义了
6、 [2012-03-15] iconv与mb_convert_encoding函数
在使用这个函数进行字符串编码转换时,需要注意,如果将utf-8转换为gb2312时,可能会出现字符串被截断的情况发生。此时可以使用以下方法解决:
1
$str
=iconv(
'utf-8'
,
"gb2312//TRANSLIT"
,
file_get_contents
(
$filepath
));
即在第二个参数出添加红色字部分,表示:如果在目标编码中找不到与源编码相匹配的字符,会选择相似的字符进行转换。此处也可以使用://IGNORE 这个参数,表示忽略不能转换的字符。
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。
mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。
做一个GBK To UTF-8:
1
<?php
2
header(
"content-Type: text/html; charset=Utf-8"
);
3
echo
mb_convert_encoding(
"妳係我的友仔"
,
"UTF-8"
,
"GBK"
);
4
?>
string iconv ( string in_charset, string out_charset, string str )注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。
1
$content
= iconv(
"GBK"
, "UTF-8″,
$content
);
2
$content
= mb_convert_encoding(
$content
,
"UTF-8″, "
GBK");
7、[2012-03-16] linux下查看内存使用
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used(buffers/cache磁盘缓存的大小)
8、[2012-03-16] PHP 的命令行模式
CLI SAPI 模块有以下三种不同的方法来获取要运行的 PHP 代码:
让 PHP 运行指定文件。
php my_script.phpphp -f my_script.php
以上两种方法(使用或不使用 -f 参数)都能够运行给定的 my_script.php 文件。可以选择任何文件来运行,指定的 PHP 脚本并非必须要以 .php 为扩展名,它们可以有任意的文件名和扩展名。
在命令行直接运行 PHP 代码。
php -r 'print_r(get_defined_constants());'
在使用这种方法时,请注意外壳变量的替代及引号的使用。
Note:
请仔细阅读以上范例,在运行代码时没有开始和结束的标记符!加上 -r 参数后,这些标记符是不需要的,加上它们会导致语法错误。
通过标准输入(stdin)提供需要运行的 PHP 代码。
以上用法提供了非常强大的功能,使得可以如下范例所示,动态地生成 PHP 代码并通过命令行运行这些代码:
$ some_application | some_filter | php | sort -u >final_output.txt
除此之外,还有另一个方法将 PHP 用于外壳脚本。可以在写一个脚本,并在第一行以 #!/usr/bin/php 开头,在其后加上以 PHP 开始和结尾标记符包含的正常的 PHP 代码,然后为该文件设置正确的运行属性(例如:chmod +x test)。该方法可以使得该文件能够像外壳脚本或 PERL 脚本一样被直接执行。
#!/usr/bin/php
<?php
var_dump($argv);
?>
9、[2012-03-16] microtime()函数与应用
echo microtime(); =>0.31535300 1331913226;
应用:microtime() 对脚本的运行计时
/** * Simple function to replicate PHP 5 behaviour */function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}$time_start = microtime_float();// Sleep for a whileusleep(100);$time_end = microtime_float();$time = $time_end - $time_start;echo "Did nothing in $time seconds\n";
10、[2012-03-17] is_dir is_file file_exists 三者区别
php中用来判断文件是否存在的两个函数
is_file 只判断文件是否存在
<?php
var_dump(is_file('a_file.txt')) . "\n"; //bool(true)
var_dump(is_file('/usr/bin/')) . "\n"; //bool(false)
var_dump(file_exists('/usr/bin/')) . "\n"; //bool(true)
file_exists 判断文件是否存在或者是目录是否存在
is_dir 判断目录是否存在.
is_file更快 而 file_exists较为安全,PV在100W以下的网站可以不用考虑,直接 is_file
- 备忘日志【一】
- 备忘一
- 一、备忘
- 备忘日志【二】
- 备忘日志【三】
- 备忘日志【四】
- 备忘日志【五】
- 日志框架备忘
- 备忘日志【六】
- 备忘日志【七】
- nginx日志切割备忘
- mysql binlog 二进制日志【备忘】
- 【备忘】Flume日志采集视频教程
- 接口备忘(一)
- Javascript 学习备忘(一)
- Echarts备忘一
- 数据结构备忘一
- 日志(一)
- CSS3动画属性-Animations
- Linux逻辑卷管理LVM详解
- 世界上最受欢迎的10个Linux发行版
- mysql同步GLOBAL sql_slave_skip_counter解释
- 让GridView拥有Grallery拖动的功能
- 备忘日志【一】
- POJ-2591(经典打表)
- iphone开发中sqlite3的操作说明
- 开源任务调度框架Quartz的一份文档
- Android 面试题笔记-------android的四个重要组件及其作用
- jquery对表格数据删除
- 设定 Chrome 的语言和区域
- sort命令
- iphone Sqlite3学习实践总结