手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

Typecho Slug 拼音插件

用法很方便,功能也很简单,如果你的typecho不是以slug的方式显示的,那就没有意义了
如果以slug的方式显示,一般是自己主动写成英文的话,那也没有意义,我这个只是好玩罢了。

自动将标题转成拼音。
在编辑和保存的时候,会自动将它转成slug。如果slug为空,或者为数字(可能是文章ID)的情况下,自动转成拼音

因为,该插件不需要你改程序,也没有配置文件 ,所以就不多介绍了。

下载地址:[attach=923]

---update: 2020-04-14

怎么不解析attach信息了?

Tags: typecho

Yii不启用LOG,记录当前所有的错误信息

在不启用LOG的情况下,如何记录错误呢?
我们都知道可以在出错的时候跳转到site/error下面那么也就相当于在输出error前将错误记录下来。
这时候我们当然是可以通过error_log来处理,也可以通过 自己写一段file_put_contents来将错误记录下来:error['errormsg'],将它保存就OK了。但有没有其他办法?

嗯,不需要自己控制程序,只要写三行代码就OK

PHP代码
  1. $logger = new CFileLogRoute();  
  2. $logger->init();  
  3. $logger->collectLogs(Yii::getLogger(),true);  

在判断完是否正确的时候就可以用这些代码将LOG存储下来。多方便 啊

Tags: yii, log

试用gist

其实gist功能早就见过了。类似功能的网站也非常多,但那些是不要注册 的。不过github这个gist嘛,注册了也有好处。自己把自己曾经写过的代码,还算好的代码,或者有想法的代码缓存下来。对自己以后  回顾的时候也有好处。

毕竟存在自己的电脑上也容易丢掉。这样多了一个碎片的管理,多少也有点好处。
比如,我就有这样一段:

PHP代码
  1. <?php  
  2.   
  3. $str = "101|1;0|4;1|0;0|0;0|0";  
  4.   
  5. //第一种  
  6.   
  7. $array = explode(';'$str);  
  8.   
  9. $items = array();  
  10.   
  11. foreach ($array as $v) {  
  12.   
  13. list($k$v) = explode('|'$v);  
  14.   
  15. if (emptyempty($v)) {  
  16.   
  17. continue;  
  18.   
  19. }  
  20.   
  21. $items[$v] = $k;  
  22.   
  23. }  
  24.   
  25. echo "<pre>";  
  26.   
  27. print_r($items);  
  28.   
  29. echo "</pre>";  
  30.   
  31. //第二种  
  32.   
  33. parse_str(preg_replace(array('/\d+\|0/','/;/','/\|/'),array("","&","="),$str),$result);  
  34.   
  35. echo "<pre>";  
  36.   
  37. print_r($result);  
  38.   
  39. echo "</pre>";  

看上去有点乱。不过。。。到:https://gist.github.com/4405542看就好很多了。。
我看看在代码里能不能引用:

Tags: github, gist

php pack()函数详解与示例

pack和unpack在一般的程序中还真的不容易见到,但是如果你用过很久以前的php生成excel你就会知道了。他的excel的头就是pack出来的
最近在尝试与C交互的时候又用上了这玩意,所以不得不再看看。其实就是C要求我一定要有包头。。。其实纯字符串也不错嘛。干嘛非得搞个包头呢?真纠结 .。

手册上有pack与unpack的介绍,但都是英文的。。。
 

  任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外!          

   用了很久php了却很少有机会用php进行一些二进制操作。 最近用php写一个socket客户端连接一个用C++语言开发的游戏服务端。 服务器端开发人员使用了二进制的形式来定义协议的格式。协议格式如下:

   包头(2bytes)+加密(1byte)+命令码(2bytes)+帧内容

1.包头的内容是记录帧内容的长度;
2. 加密:0表示不加密,1表示加密;
3. 命令码为服务端命令识别符号;

    一开始不了解php原来有pack可以来组装二进制包, 走了弯路,让服务端开发人员用C语言帮忙开发了的几个内存操作函数,按照协议规则返回二进制包,然后我将这几个方法编译成一组扩展函数供php使用。
   
    话归正题,本文是介绍如何使用pack和unpack这两个方法的。php官方手册举例太少,不能很容易理解,特别是那些格式化参数的使用。

转摘的参数中文说明:

pack/unpack 的摸板字符字符 含义
a 一个填充空的字节串
A 一个填充空格的字节串
b 一个位串,在每个字节里位的顺序都是升序
B 一个位串,在每个字节里位的顺序都是降序
c 一个有符号 char(8位整数)值
C 一个无符号 char(8位整数)值;关于 Unicode 参阅 U
d 本机格式的双精度浮点数
f 本机格式的单精度浮点数
h 一个十六进制串,低四位在前
H 一个十六进制串,高四位在前
i 一个有符号整数值,本机格式
I 一个无符号整数值,本机格式
l 一个有符号长整形,总是 32 位
L 一个无符号长整形,总是 32 位
n 一个 16位短整形,“网络”字节序(大头在前)
N 一个 32 位短整形,“网络”字节序(大头在前)
p 一个指向空结尾的字串的指针
P 一个指向定长字串的指针
q 一个有符号四倍(64位整数)值
Q 一个无符号四倍(64位整数)值
s 一个有符号短整数值,总是 16 位
S 一个无符号短整数值,总是 16 位,字节序跟机器芯片有关
u 一个无编码的字串
U 一个 Unicode 字符数字
v 一个“VAX”字节序(小头在前)的 16 位短整数
V 一个“VAX”字节序(小头在前)的 32 位短整数
w 一个 BER 压缩的整数
x 一个空字节(向前忽略一个字节)
X 备份一个字节
Z 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置


string pack ( string $format [, mixed $args [, mixed $...]] )

一些规则:
1.每个字母后面都可以跟着一个数字,表示 count(计数),如果 count 是一个 * 表示剩下的所有东西。
2.如果你提供的参数比 $format 要求的少,pack 假设缺的都是空值。如果你提供的参数比 $format 要求的多,那么多余的参数被忽略。

下面还是用例子来说明用法会容易理解一点:
PHP代码
  1. 关于Pack:  
  2.   
  3. 下面的第一部分把数字值包装成字节:  
  4. $out = pack("CCCC", 65, 66, 67, 68);      # $out 等于"ABCD"  
  5. $out = pack("C4", 65, 66, 67, 68);         # 一样的东西  
  6.   
  7. 下面的对 Unicode 的循环字母做同样的事情:  
  8.  $foo = pack("U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);  
  9.   
  10. 下面的做类似的事情,增加了一些空:  
  11. $out = pack("CCxxCC", 65, 66, 67, 68);      # $out 等于 "AB\0\0CD"  
  12.   
  13. 打包你的短整数并不意味着你就可移植了:  
  14. $out = pack("s2", 1, 2);          
  15. # 在小头在前的机器上是 "\1\0\2\0"  
  16. # 在大头在前的机器上是 "\0\1\0\2"  
  17.   
  18. 在二进制和十六进制包装上,count 指的是位或者半字节的数量,而不是生成的字节数量:  
  19.   $out = pack("B32""...");  
  20.     $out = pack("H8""5065726c");         # 都生成“Perl”  
  21.   
  22. a 域里的长度只应用于一个字串:  
  23.   $out = pack("a4""abcd""x""y""z");      # "abcd"  
  24.   
  25. 要绕开这个限制,使用多倍声明:  
  26.   $out = pack("aaaa",    "abcd""x""y""z");   # "axyz"  
  27.    $out = pack("a" x 4,   "abcd""x""y""z");   # "axyz"  
  28.   
  29. a 格式做空填充:  
  30.   $out = pack("a14""abcdefg");         # " abcdefg\0\0\0\0\0\0"  
  31.   
  32. 关于unpack:  
  33.   
  34. array unpack ( string $format, string $data )  
  35.   
  36. $data = "010000020007";  
  37. unpack("Sint1/Cchar1/Sint2/Cchar2",$data);  
  38.   
  39. ## array('int1'=>1, 'char1'=>'0','int2'=>2,'char2'=>7);  
  40.   
  41. 最后本文开头讲到的协议使用pack/unpack 举例程序代码为 :  
  42.   
  43. $lastact   = pack('SCSa32a32',0x0040, 0x00, 0x0006, $username$passwd );  
  44.   
  45. unpack('Sint1/Cchar1/Sint2/Cchar2/',$lastmessage);  

学习资料:
http://blog.csdn.net/jojobb3138688/archive/2007/05/07/1598609.aspx

我上面的内容来自于:http://blog.sina.com.cn/s/blog_3eba8f1c0100nq9r.html,我现在已经顺利的使用完了。黑黑
还有的参考资料:
http://bbs.phpchina.com/thread-104492-1-1.html
http://hi.baidu.com/chinetman/item/f78a71d847e7d638e2108fda

Tags: pack, unpack

怎么获取内网机器的公网IP

说到获取公网IP,那方法是相当的多啊
1、利用第三方服务:ip138,用脚本访问他的首页,然后正则取出自己的IP
2、还是处用第三方的服务,如QQ,那种QQ判断来源IP,然后得到地址URL,连上去也能获取IP,当然也得正则
3、自己在自己的服务器上架个服务。返回公网IP,
4、利用dns的服务,比如 这样:

XML/HTML代码
  1. function getClientIp(){  
  2.     $socket = socket_create(AF_INET, SOCK_STREAM, 6);  
  3.     $ret = socket_connect($socket,'ns1.dnspod.net',6666);  
  4.     $buf = socket_read($socket, 16);  
  5.     socket_close($socket);  
  6.     return $buf;      
  7. }  

5、利用tracert,基本上也能获取 IP。ping也行。只是麻烦了一点
6、如果是本机直接拨号,那就方便了ifconfig , ipconfig /all也可以