Tag Archives: php
[警示]Nginx + PHP CGI的安全漏洞:fix_pathinfo
如果你正在使用nginx+php,请关注。 表像: 具体的重现过程,用php代码修改后缀名后上传,比如说www.xxx.com/1.jpg,访问的时候用www.xxx.com/1.jpg/xxx.php 这段jpg代码将会被执行!!! http://docs.php.net/manual/zh/ini.core.php cgi.fix_pathinfo “1″ PHP_INI_ALL 从 PHP 4.3.0 起可用 请注意:默认为1 解决办法: 1.修改php.ini中的cgi.cgi.fix_pathinfo为0(即使你在php.ini中没有搜到,也要设置,没有搜到表示默认为1) 2.判断文件上传类型时使用严格的判断,至于怎么判断,参见:http://www.54chen.com/php-tech/php-upload-file-types-to-determine-the-complete-program-and-php-nginx-upload-size-and-complete-control-program.html 3.把nginx的判断正则修改为去除/ if ( $fastcgi_script_name ~ \..*\/.*php ) { return 403; } 鸟哥在http://www.laruence.com/2010/05/20/1495.html一文中提及此事。
从php核心代码看require和include的区别
前言 五一长假归来,休息长时间很有点不习惯,回到北京已经有些不适应了。 见到鸟哥的一文:深入理解PHP之require/include顺序 http://www.laruence.com/2010/05/04/1450.html 忍不住继续再深入了一下下,在此记录一下深入的过程,以供以后查阅。 普及 在php手册中: require() is identical to include() except upon failure it will also produce a fatal E_ERROR level error. In other words, it will halt the script whereas include() only emits a warning (E_WARNING) which …
PHP上传进度条深度解析
随着互联网的发展,越来越多的技术开始注重用户体验,以人为本才是长久之道,于是在上传的时候,大家都不再满足一个单一的“浏览”按钮,纷纷推出了带上传进度条的功能。而作为解释型语言的PHP,如何做到对上传文件的检测,如何实现上传进度条以其背后的原理,54chen将在本文中一步步展开。 一. 实现篇 一般情况,用PHP实现上传进度条就下面两种方法: 1.APC扩展(作者是PHP的创始人,5.2后PHP已经加入APC扩展) 2.PECL扩展模块 uploadprogress 不论是APC还是uploadprogress,都需要编译源码,因为原有的PHP函数根本不可能读取到临时文件夹里的东西。下面来看如何使用以及关键的代码: APC实现方法: 1.安装APC 2.配置php.ini,设置参数 apc.rfc1867=1 3.关键代码: if ($_SERVER['REQUEST_METHOD'] == ‘POST’) { //上传请求 $status = apc_fetch(‘upload_’ . $_POST['APC_UPLOAD_PROGRESS']); $status['done'] = 1; echo json_encode($status); //输出给用户端页面里的ajax调用,相关文档请自己寻找 exit; } elseif (isset($_GET['progress_key'])) { //读取上传进度 $status = apc_fetch(‘upload_’.$_GET[‘
五四陈透过PHP看JAVA系列:fsockopen
本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。 第一部分,先看PHP的fsockopen 先来看PHP手册中的定义http://www.54chen.com/p/function.fsockopen.html 看完定义后,来看一段代码,利用PHP去更新squid的缓存: <?php function updateCache($myUrl) { global $vSquidConfig; foreach ( $vSquidConfig ['host'] as $mySquid ) { $myHandle = @fsockopen ( “127.0.0.1″, 80, $myErrNo, $myErrStr, 30 ); if ($myHandle) { $myResult = ”; @fputs ( $myHandle, “PURGE ” . …
五四陈透过PHP看JAVA系列:strtotime
本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。 第一部分,先看PHP的Date/Tme函数 详细见:http://www.54chen.com/p/ref.datetime.html 今天要说的是其中的strtotime函数 http://www.54chen.com/p/function.strtotime.html 函数的功能:接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。 例子: <?php echo strtotime(“2010-3-3 3:3:3″); ?> 将得到结果: 1267585383 在PHP应用中,经常在需要记录时间的时候,使用Mysql的int(10)来保存这个 Unix 时间戳,并且时间的比较查找等操作,都用大于小于来进行。 第二部分,看JAVA对应的方法 try { fromUnixTime = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).parse(“01/03/2010 08:00:00″).getTime(); fromUnixTime /= 1000; } catch (ParseException …
解读PHP开源项目中列表和hook方法:while(has_items()): thme_ite();和apply_filters
在wordpress,lilina等开源项目中,常常会看到一些莫名的代码,来无影去无踪,看上去很有意味,特地拿来分析分析,看看一般的作法。 part 1 列表 循环显示 先看代码: <?php $num = 0; if(has_items()) { while(has_items()): the_item(); } ?> 以上代码,出自某开源项目。。。 再进入the_item()函数内部,可以看到一个关键的函数: * Returns the current item * * @since 1.0 * * @return bool|stdClass False if item doesn’t exist, otherwise returns the specified …
PHP上传文件类型彻底判断方案及PHP+nginx上传大小彻底控制方案
上回科学院发过一篇讲述上传判断的文章,位置是 PHP JAVA C上传文件如何准确判断文件类型-mime知识普及 本文目的在于,进一步更正前文所述的mime判断方式,以及增加一个nginx环境里的文件上传大小所影响的代码。 上传类型控制: 在我(54chen)工作中发现,其实修改文件的后缀,浏览器就会很傻瓜地传送错误的mime类型,所以前文的判断是一个半错误的方法(除了C代码是正确的)。 网上流传一段PHP读取文件头判断文件类型的方法,有一些bug,经我(54chen)修改实测,应该是这个样子: /** * 读取文件前几个字节 判断文件类型 * * @return String */ function checkTitle($filename) { $file = fopen($filename, “rb”); $bin = fread($file, 2); //只读2字节 fclose($file); $strInfo = @unpack(“c2chars”, $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ”; …
ubuntu 9.10快速安装nginx+php环境手记[54chen科学院]
我(54chen)因为场景需要,特地在ubuntu9.10中安装nginx+php的环境,要快速不要优化,记录如下: sudo apt-get install php5 php5-cgi php5-cli php5-gd php5-curl php5-mysql nginx sudo apt-get install lighttpd spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi 上面的操作解读: 1.安装php nginx 2.安装lighttpd,为啥要安装这个,因为他有个spawn-fcgi,因为apt下来的php不是php-fpm。 3.用spawn-fcgi启动php-cgi在9000端口监听。 sudo vim /etc/php5/cgi/php.ini 修改php.ini文件 cgi.fix_pathinfo=1; 这样php-cgi方能正常使用SCRIPT_FILENAME这个变量 sudo …
“先进的互联互通技术”–使用ice联通php和java [part 2 client]
[信曾哥,转载的都给我保留原链接地址:http://www.54chen.com/784-the-advanced-interconnection-technology-the-use-of-ice-unicom-php-and-java-part-2-client/] 这一part的目标是建立起ice的php环境,以及写PHP代码调用上一part中的10000端口的java代码。 在part 1中,我们建立了一个Server在10000端口等着我们,地址见 http://www.54chen.com/779-the-advanced-interconnection-technology-the-use-of-ice-unicom-php-and-java/ 建立带ice的PHP环境 不管是nginx+php-cgi还是别的啥,这里只表述php编译过程。 本例以 Ice 3.2.1为例 下载的位置和参考的文档都在下面 http://www.zeroc.com/download_3_2_1.html http://www.zeroc.com/doc/Ice-3.2.1/manual/Slice.5.10.html#50592 1.下载IcePHP包,进行编译。在此之前,你还需要安装Ice,记好使用3.2.1版本,如果你是用的tar.gz包,在/opt/Ice-3.2.1/,如果是rpm包,在/usr/下。 2.运行 export ICE_HOME=/opt/Ice-3.2.1 设置好ICE_HOME后进IcePHP目录直接make make install。 此时在/opt/
“先进的互联互通技术”–使用ice联通php和java [part 1 server]
PHP没有中间件,导致了对很多麻烦。比如,对数据库的操作必须要链接数据库,然后做SQL操作。WEB程序直接操作数据库的方法,这样会带来很多人为因素的事故隐患,以及管理上的麻烦,尤其是对大型的网站应用来说。规范的模式应该是,WEB程序传递参数到一个服务程序上,由该服务程序进行判断并最终操作数据库或者其它数据文件,这样做到了明确权限控制,和业务类型集中管理。去年伴随着ICE的推出,PHP终于有了可以使用的中间件。在PHP的发展史上,应该是一个里程碑。 ICE入门 ICE(Internet Communications Engine 网络通讯引擎),是由Corba原核心成员开发的一个开源中间件,据称其各种性能完全优于Corba。除此之外,我们第一次见到了直接支持PHP的中间件。 ICE的安装,去http://www.zeroc.com/download.html 下载一个Ice针对PHP的安装包,按照说明安装上。 ICE的使用:使用Slice(ICE的一种简单语法脚本),编写一个xx.ice文件。可以使用slice2cpp或slice2java等生成一个cpp或java的ICE框架程序,然后在这个框架程序中进行代码编写。ICE在PHP的应用继承了PHP的一贯传统——简单,只需要在php.ini中加载该xx.ice,在PHP中就可以使用了。 ICE在PHP应用中的缺点,无法使用PHP编写Server端,其实这也是PHP的一个缺陷——没有完善的多进程和多线程管理机制。因此,Server端可以采用ICE所支持的其它语言进行编写,比如JAVA/C++/VB/PYTHON等。 开始传说中的“
54chen(陈臻),人人网分布式研究人员,曾饭于金山、雅虎、淘宝,暂居北京,情绪稳定。曾用代号有:cc0cc、零蛋。
SEARCH
Tag
Update
- 用搜索的倒排轻松搞定“好友的文章”类相关推荐功能
- 54chen Twitter memo 2010-09-05
- 54chen Twitter memo 2010-08-29
- [演稿分享]人人网开发一站式体验
- [54chen原创]简单好用的土办法抗击洋鬼子对wordpress系统的广告灌入
- [54chen开发日记]注解和拦截器实现权限通用模型的设计实践
- 54chen Twitter memo 2010-08-22
- 54chen Twitter memo 2010-08-15
- rose pipe–一次对http技术的伟大革新实现(54chen乱弹版)
- 54chen Twitter memo 2010-08-08
- 使用maven的profiles自动设置log4j线上环境和测试环境区别
- 54chen Twitter memo 2010-08-01
- sphinx安装配置手记(中文分词54chen支持版)
- 54chen Twitter memo 2010-07-25
- 由php的call_user_func传reference引发的思考
