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

开发中的几件事

开发中又遇到一些事情,于是记录一下
1、CURL的问题
    curl在安全模式下或者设定了open_basedir的情况下,如果使用了OPT_FOLLOWLOCATION,会导致无返回值。这个理由很多,但FOLLOWLOCATION这个参数是用于目标网址会多次跳转而使用,还可以设置最大跳转次数,因此,如果你要抓取的对象有多次跳转,这个参数就非设不可(真纠结,实在不行就file_get_contents了,它自动支持多次跳转,但不如curl更可控一些)
    具体关于CURL的一些常用参数,可以看这里:

http://opensuse.iteye.com/blog/349829
  1. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);       
  2. //HTTP协议的版本号  
  3. curl_setopt($ch, CURLOPT_NOPROGRESS, 1);                             
  4. //如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。  
  5. curl_setopt($ch, CURLOPT_NOBODY, 0);  
  6. //如果你不想在输出中包含body部分,设置这个选项为一个非零值。  
  7. curl_setopt($ch, CURLOPT_HTTPGET, 1);  
  8. //设置HTTP请求的方法为GET  
  9. curl_setopt($ch, CURLOPT_ENCODING, ”);  
  10. //设置HTTP请求头中可接受的压缩格式  
  11. curl_setopt($ch, CURLOPT_COOKIEFILE, 1);  
  12. //传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。  
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
  14. //设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。  
  15. curl_setopt($ch, CURLOPT_MAXREDIRS, 3);  
  16. //最多可以进行几次HTTP重定向,一般和curl_followlocation联用  
  17. curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)’);  
  18. //在HTTP请求中包含一个”user-agent”头的字符串  
  19. $http_header = array();  
  20. $http_header[] = ‘Connection: Keep-Alive’;  
  21. $http_header[] = ‘Pragma: no-cache’;  
  22. $http_header[] = ‘Cache-Control: no-cache’;  
  23. $http_header[] = ‘Accept: */*’;  
  24. $http_header[] = ‘Host: ‘.$url_ary['host'];  
  25. curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);  
  26. //一个数组格式的HTTP头文件格式  
  27. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  28. //将curl_exec的返回值转换成一个字符串,而不是直接输出出来  
  29. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
  30. //设置一个长整形数,作为最大延续多少秒  
  31. curl_setopt($ch, CURLOPT_REFERER, $url);  
  32. //在HTTP请求中包含一个”referer”头的字符串  
  33. curl_setopt($ch, CURLOPT_URL, $url);  
  34. //这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项  


2、命令下行指定用户组来执行命令
最偷懒的方法就是:su www -c 'php xxx.php'

3、hightman遇到的Javascript函数parseInt(''),返回NaN,这个让我想起有个人做了一个PPT,来说明JS中的一些特殊问题,它的地址是:http://neatstudio.com/show-1987-1.shtml

4、PHP的header跳转
大家都知道header("Location:http://xxx.xxx.com");在这个之后如果你file_put_contents内容去一个文件,还是会被执行的,于是我们习惯性的在header跳转后继续处理一些内容,即不影响跳转,也可以完成一些内容性的处理。
但尝试了一下,如果是header()下面跟上sleep(10);你会发现header不会即刻跳转了,会等10秒后再跳转。
因此,现在了解header跳转还是会受原有代码的影响的。

5、HTML5的a标签属性ping
ping的属性说的很好,当a有href属性时,如果有ping属性,会在跳转链接时候,自动ping网站(ping标签中的对应网站),但测试了一下之后发现。居然没用。查看了一下资料,我操:

6.6 Changes from 4 March 2010 to 24 June 2010

  • The ping attribute has been removed from the W3C version of HTML5.

我郁闷啊。。。

-------EOF------

Tags: curl

开发中的一些注意事项

开发中遇到一些问题,值得记住,所以我记录了一下
1、在项目中为了取得泛域名的前缀网址,这个前缀是指定的a,b,c三种,如果前缀不在这三种之内,默认为a,在apache下面的时候,建了一个*.test.neatstudio.com的泛域名指到vhost中。然后用偷懒的方法list(explode(".",$_SERVER['SERVER_NAME']))就取到了a,b,c,因为在apapche中,$_SERVER['SERVER_NAME']就是实际的a.test.neatstudio.com。然而到了nginx下行不通了。在nginx下,$_SERVER['SERVER_NAME']居然还是test.neatstudio.com,最后打印$_SERVER变量,发现$_SERVER['SERVER_HOST']才是泛域名的a.test.neatstudio.com。在此做一个记录

2、chown处理大量小文件时,你就等着CPU标高100%吧。这个问题很痛苦,但没办法

3、我晶。我记得要写一个很重要的笔记 的。我TMD又忘了。被第一个问题打断了。我晶啊,算了。等想起来再说吧

Tags: nginx, apache

Yii框架中设置时区

时区这东西,在开发的时候,你说重要吧,也还好,毕竟没它也能正常运行,你说不重要吧,那就纠结了。特别是linux系统,都TMD差上几小时,你能不痛苦吗?win还好一点。
有一些常规方法,是大家目前都在采用的
1、php.ini中的设置,这个就不谈了,
2、程序中公用文件里设置,date_default_timezone_set一下时区
3、或者。。。自己写时间处理函数,在遇到时间的时候,用这个函数处理(比较偏向于使用这种方式,如果你的用户来自于五湖四海,或许就有用了)
4、yii框架中,可以直接在/protected/config/main.php中加入timeZone,即可(补充:Yii2方法也是一样,只是config文件的位置不太一样罢了)

 

Tags: yii, 时区

折腾ACE

折腾完后yiiforsae后又开始折腾yiiforACE了,只是ACE相对还是比较痛苦的。毕竟ACE的出错直接就提示一句:

XML/HTML代码
  1. The page you are looking for is temporarily unavailable.  
  2. Please try again later.   

然后什么信息都没有了,根本 没有办法定位程序错在哪里。这让我很是纠结,但没有办法,一点点的来吧,感觉ACE的速度挺快。而且有1G的数据库。256M的memcache。只是rewrite怎么办呢?

Tags: sae, ace

Yii的AR效率释疑

关于yii的AR效率,其实一直以来都有很多的想法,试想,如果不做metadata的缓存,每次查询前,都必须先做一下metadata的查询,效率也不会太高到哪里吧?
所以,看到官方有人在问就关注了一下:http://www.yiiframework.com/forum/index.php/topic/16597-yii%E7%9A%84ar%E7%9C%9F%E7%9A%84%E8%83%BD%E7%94%A8%E4%B9%88%EF%BC%9F/

有人提问:

XML/HTML代码
  1. 我在首页会很多个ar的请求。热门文章、最新文章、编辑推荐、最新评论的文章。。。。  
  2.   
  3. 我把这些通过 model()->findAll()的结果放在一个数组里。  
  4.   
  5. 然后把这个数组var_dump了一下,这些数据高达1.06M。这是不是太耗内存了?  
  6.   
  7. 页面上全是密密麻麻的数据表结构,如果关联关系复杂点的,会更多。  
  8.   
  9. 我光var_dump(yii::app()->db) 就有5000多行的数据。  
  10.   
  11.   
  12. 这样的db操作这么耗内存,敢用么?谁能消除我这个担心?多谢  
  13.   
  14. AcitveRecord ,只能玩一玩开拓眼界. 真要生产环境用, 就不行!   

然后,Qiang就回复了:

XML/HTML代码
  1. 你的结论有点想当然了。建议你仔细做profiling来验证。事实上,AR已经被成功应用在若干大流量的网站上了。  
  2.   
  3. 你不能用var_dump()来估计AR的内存开销。var_dump会把所有被reference到的对象都dump出来,包括application,以及所有的application component,因为它们都被AR间接reference到了。  
  4.   
  5. AR额外的内存开销是存储10个左右变量的开销。如果按20字节来估算,额外的开销是200字节,这样在1000个AR对象情况下,额外的内存开销为200KB。这个对几乎所有的web应用而言应该不是问题。  
  6.   
  7. 如果你需要装载更多的数据,建议你使用DAO。  
  8.   
  9. 另外,对于任何大流量的web应用而言,cache都是必须的。cache可以帮助解决绝大多数的性能瓶颈。   

cache在DB中有一些处理的,比如那个duration,在db中查询就可以做一下缓存了。然后metadata再做一下缓存,不也挺好?

Tags: yii