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

dnspod ddns.php

其实dnspod官方有phpsdk,只是自己写的看起来好看一点。原来我用的是shell版的,但shell版的时候nc ns1.dnspod.net出来的IP老是不正确。估计是整个大楼里面有代理 。
但是我访问 http://iframe.ip138.com/ic.asp,里面出来的IP是真实IP,所以没办法,我只能改成PHP了(主要是因为不知道wget 或者 curl回来的文件怎么grep得到那个IP,好吧,我OUT了)
所以,花了5分钟写了个脚本。。。执行,没有报 任何错,好吧,原来是我没有输出。
输出的时候发现,不支持get方式提交。于是我偷了个懒,直接把file_get_contents用POST方式提交了。
OK,更新成功。但我发现,如果用Record.Ddns接口,那么,还是用的类似ns1.dnspod.net的探测方式,所以IP不准,最后,只能用Record.Modify接口来更新域名了。。

不多说废话,代码地址:https://github.com/neatstudio/yiiextension

用法也相当简单:

XML/HTML代码
  1. @description  
  2.     其实这个程序是扔在命令行下的,最好是crontab。  
  3.     因为远程获取IP地址比较耗时间  
  4. @useage  
  5.     在使用前最好chmod +x Dnspod.php  
  6.     注意第一行#!/usr/bin/env php,当然你也可以去掉这一条,直接使用/xxx/xxx/php Dnspod.php  
  7.     crontab -e 后加入一条:  
  8.     */10 * * * * /xxx/xxx/Dnspod.php  

Neatpic 修正BUG

这次neatpic重新修正了一些BUG,但代码还没有整理,因此暂时不放出下载,等代码整理好后再放出来。
目前测试地址为:http://neatstudio.com/neatpic/
修正:
    1、支持中文文件名、目录名(怀疑所有的文件系统都是ansi方式读取而不是UTF8,不能确认)
    2、文件名、路径隐藏(采用?file=imagexxxxxxxx)之类的方式,因为只显示缩略图,所以读上几十个缩略图的代价应该还是可以忍受的。

其他没有什么特别的更新,可能也会BUG被改出来,敬请测试
   

Tags: neatpic, bug

思考:内部博客历史上的今天

我这里说的历史上的今天并非网络上那种把几千年几百年的事情显示的那种历史上的今天,我说的是当某一个网站建站时间长后,数据量大的时候,可以开始考虑把前几年同一时刻发表的文章列出来。

我对于这个想法,在考虑用yii重构的时候就想过是否要加这个功能。虽然说这是画蛇添足,但在自己看自己的文章时,看到一年前两年前的文章时,你也可以了解到自己的思想到底有没有进步。去年这个时间你是在写一些垃圾,还是在写一些精华,现在呢?还是垃圾又或者已经进步了?

但,说白了,这个玩意对于其他浏览的用户来说,真的没有什么特别的意义,相反还会有反感,我为什么要看你一年前的东西,我关注是当前的内容,如果对于当前的内容有相关的资料,那还可以值得考虑一下。所以TAG相关文章就很容易被点击。

所以,历史上的今天对于增加内链是有好处的,但不是特别建议推广。我的思考是做类似于widget之类的功能放在内容页【并非一定】。

相反,我对于TAG有新的要求,一个网站,尽量不要超过200个TAG,最好都是一些有效TAG,否则一定会让人迷惑。或者说,其实你的网站也很乱,内容越杂,TAG也才会越多。当你精确于某几件事情,你的TAG应该是相对集中的。

wordpress的TAG表,设计的非常有意思。考虑过使用。crc和crt,如果真重构了,应该会用到。

Tags: history, thinking

两年前写的php之call_user_func_array的简易用法

几年前写的东西了,翻出来重贴一下,呵呵


今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的:

call_user_func_array

(PHP 4 >= 4.0.4, PHP 5)

call_user_func_array --  Call a user function given with an array of parameters

Description

mixed call_user_func_array ( callback function, array param_arr )

Call a user defined function given by function, with the parameters in param_arr.
然后还有一个例子:

PHP代码
  1. <?php  
  2. function debug($var$val)   
  3. {  
  4.     echo "***DEBUGGING\nVARIABLE: $var\nVALUE:";  
  5.     if (is_array($val) || is_object($val) || is_resource($val)) {  
  6.         print_r($val);  
  7.     } else {  
  8.         echo "\n$val\n";  
  9.     }  
  10.     echo "***\n";  
  11. }  
  12.   
  13. $c = mysql_connect();  
  14. $host = $_SERVER["SERVER_NAME"];  
  15.   
  16. call_user_func_array('debug'array("host"$host));  
  17. call_user_func_array('debug'array("c"$c));  
  18. call_user_func_array('debug'array("_POST"$_POST));  
  19. ?>   
相信看了例子之后应该有点明白了吧?
我自己是这么理解这个函数的,如果说的不对,还望各位高手不要耻笑:
     该函数真正的用法有点类似于函数重载,因为他的第一个参数是字符型的,也就是函数的名称,第二个参数是数组,我们可以当成该函数的各个参数,而事实上也就是这么用的,如果你看过我的前一篇文章:PHP的伪重载 ,或许你能够理解,正是因为这个函数的存在,我发现函数重载也可以这样运用:

PHP代码
  1. <?php  
  2. /** 
  3. * 例子写完后,本来认为完事了,结果遇到有人问call_user_func_array(),看了一下手册 
  4. * 原来,我上面的那个test函数还可以精简成如下的例子, 
  5. */  
  6. function otest1 ($a)  
  7. {  
  8.     echo'一个参数' );  
  9. }  
  10.   
  11. function otest2 ( $a$b)  
  12. {  
  13.     echo'二个参数' );  
  14. }  
  15.   
  16. function otest3 ( $a ,$b,$c)  
  17. {  
  18.     echo'三个啦' );  
  19. }  
  20.   
  21. function otest ()  
  22. {  
  23.     $args = func_get_args();  
  24.     $num = func_num_args();  
  25.     call_user_func_array( 'otest'.$num$args  );  
  26. }  
  27.   
  28. otest(1,2);  
看到不?而我最初的写法,在PHP的伪重载一文中有所提及,仅作参考。。。。

这些只是call_user_func_array的简易用法,在PHP4下测试过,而手册中还有一些将第一个参数当成数组来传入的例子,我在PHP4下是没有办法运行的,也许PHP5可以吧,但我不用PHP5的,也没有办法解释什么。谢谢各位


以前一直用PHP4的,现在用PHP5了,关于这个函数,大家可以看看thinkphp的functions.php中的getInstance方法,也是一个很好的诠释哦。

 

Tags: 自定义, php, 伪重载, 多态

Base64转换:AQAB=65537,你知道为什么吗?[转]

什么是Base64?

按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列 的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

为什么要使用Base64?

在设计这个编码的时候,我想设计人员最主要考虑了3个问题:
1.是否加密?
2.加密算法复杂程度和效率
3.如何处理传输?

    加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”。即达到一眼望去完全看不出内容即可。
基 于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于发送Email的协议解决的是如何收发Email,而并不 是如何安全的收发Email。因此算法的复杂程度要小,效率要高,否则因为发送Email而大量占用资源,路就有点走歪了。

    但 是,如果是基于以上两点,那么我们使用最简单的恺撒法即可,为什么Base64看起来要比恺撒法复杂呢?这是因为在Email的传送过程中,由于历史原 因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通 过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!很明显,问题就这样产生了!因此,为了能够正常的传送Email,这个问题就必须 考虑!所以,单单靠改变字母的位置的恺撒之类的方案也就不行了。关于这一点可以参考RFC2046。
基于以上的一些主要原因产生了Base64编码。

» 阅读全文

Tags: base64, 算法