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

浪驰短信接口的实现

浪驰短信是一家短信应用的提供商,提供了一些WEB调用的接口,为了让短信能够加到队列里,我用PHP重新实现了一遍(其实是因为他们没有提供WEB查看的页面,否则还真不需要实现)

注意事项:浪驰的接口必须要在同一个进程里发送和接收短信。否则会失败的。为此我写了三次接口类

第一次采用了snoopy,因为他们建议使用POST发送数据,所以我偷懒就用了snoopy,但只能获取得activeId,却无法进行下一步操作

第二次我直接采用file_get_contents,我没有用Stream流来POST数据,而是用了GET方式(GET方式也支持的),但于第一次一样,只能获取activeId,无法进行下一步操作。

然后我用浏览器打开相应的地址一步步的查看,发现他有一个cookie是每次种入的,于是怀疑他的ActiveID还需要配合cookie才行。于是尝试直接Setcookie,然后再发送。但发现手工种的cookie好象不行。于是

第三次,我用curl,并指定cookie文件,最后终于成功了。感谢curl,可以支持带COOKIE的数据发送。

代码不贴了,涉及公司的代码。再者,纯粹的代码也不能用。。因为我还用mysql实现了一个简单的队列,以及成功记录,错误记录。。。

好象听说目前不能接受回复了。真郁闷。。。

open_basedir 严重影响PHP I/O性能

这是昨天看到的一篇文章,看完后,我针对服务器等做了一下测试,确实有影响。毕竟open_basedir在每一次require,include以及判断文件等的时候,都要先判断是否在可执行目录内。所以。。。性能就会下降(如果是用框架的,可能性能会更差一点),如果是自己的机器,一般也可以通过设定文件目录权限,来防止这种情况发生【linux可以指定用户、用户组。windows可以设定目录的所有者(当时在win下我就最烦这个,因为需要为每个虚拟主机添加一个用户,再指定权限,然后再到目录上设定用户)】

下面就是我看到的文章的内容:

今天在做项目的时候发现 没几行语句 竟然耗费了0.04秒

十分让我吃惊.随后进行跟踪 得知就在I/O读写的时候最费时间 一个is_file竟然费了0.003秒

后来让我百思不得其解 Google也没有任何答案.

然后我又把项目放到另外一个电脑上 发现速度直线上升 从以前的0.04秒变成了0.007秒左右.

我很纳闷 难道我的本本就这么差劲不应该啊

经过我的比较 我发现了 在我机器上的这个项目的虚拟主机中 设置了open_basedir.

大家都知道 这个对于虚拟主机来说是必不可少的..

但是后来我又进行测试一遍 难道真的是这样吗

我的测试代码非常简单:

PHP代码
  1. $time = microtime(true);    
  2. is_file('1.html');    
  3. echo microtime(true) - $time;    

我的弄了一个空的1.html文件 这个文件是在当前目录绝对存在的.

我新建了一个虚拟主机 然后设置了一下open_basedir.

得到的结果是0.0018570423126221左右

然后我进apache的配置文件 把open_basedir删除以后

得到的结果是5.0067901611328E-5 这个结果小到PHP中的小数点都不能表示了

(注:以上结果都是多次运行缓存后的结果 因为is_file的结果会被缓存的)

现在我终于明白了 为啥虚拟主机那些探针中 I/O的性能都那么小的原因了..

杯具啊..

 

--EOF--

原文来自http://www.skiyo.cn/article/Skiyo-243-1263890301.html,各位也可以测试一下。。

Tags: open_basedir

利用跨站脚本攻击(XSS)摧毁Web

关于xss的攻击与防范,我在08年09年写过一些文章,有自己记录的,也有摘抄的。昨天我又看到一篇讲攻击的文章,记录一下,也可以与以前进行一下对 比。

本文是写给那些不拿XSS当Web应用严重漏洞的人看的。 实际上,人们可以利用XSS漏洞大捞一笔。本文是在热爱黑客技术 但从不攻击他人的网站上发表的,所以我不会对这里介绍的知识的使用方式负任何责任。

» 阅读全文

Tags: xss

远程包含和本地包含漏洞的原理

我们来讨论包含文件漏洞,首先要问的是,什么才是"远程文件包含漏洞"?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包 含的这个文件来源过滤不严,从而可去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。几乎所有的 cgi程序都有这样的 bug,只是具体的表现方式不一样罢了。

» 阅读全文

Tags: require, include

思考PHP的转换?

我在写sbConfigure类的时候,还是采用了以前的Configure的解析方法,即get方法可以以字符串的形式来读取数组变量,就象这样

PHP代码
  1. sbConfigure::get("a.b.c");  
Return:
PHP代码
  1. return self::$_config['a']['b']['c'];  

但事实上,我为了这个返回,写了五六次代码了,但最终还是采用了foreach的方法

第一次我这么处理(采用了Eval),

PHP代码
  1. //...省略  
  2. $arrkeys = "[a][b][c]"  
  3. eval("\$ret = self::\$_config$arrkeys;");  
  4. return $ret;  

后来,yhustc说这样不太安全,所以我改成了foeach的方式

PHP代码
  1. //....  
  2. $arr = self::$_config;  
  3. $_err = false;  
  4. foreach($names as $name){  
  5.     if(isset($arr[$name])){  
  6.         $arr = $arr[$name];  
  7.     }else{  
  8.         $_err = true;  
  9.         break;  
  10.     }  
  11. }  
  12. if($_err == true)return ;  
  13. return $arr;  

$_err这个变量是为了防止变量在没有设定的时候仍然返回值。。。

昨天我又想用eval,但还是失败了。。。

不知道有没有更好的转换方式,查看了parse_ini_file,因为我想,ini文件中有

XML/HTML代码
  1. [test]  
  2. a.b=1  
  3. a.c=2  

有这样的返回数组。所以我在想着参考。然而仍然失望 ,又想着pack?serialize?json_decode?之类的解决方式,但还是失败了。。郁闷啊。

先记录一下,如果有更好的方法,就再次更新