坚信科学,分享技术

Category Archives: php

php与c通信,php与java通信,这些是任何一个php教程里都看不到的东西.

[54chen原创]简单好用的土办法抗击洋鬼子对wordpress系统的广告灌入

自升级wordpress3.0以后,一切风调雨顺,自上周起,被洋鬼子的广告肉机盯上了,平均每三五分钟一条广告,评论内容大致相同,评论ip来自五湖四海,各不相同。 虽然说akismet是wordpress中antispam无二的选择,但是akismet那个验证码让人很纠结,于是只能自己山寨一把了。 土办法步骤一 转发默认评论地址 常见的洋鬼子的广告肉机,都是利用了wordpress公开的post地址来做到脚本灌入的,其默认地址是wp-comments-post.php,第一步要做的是,屏蔽这个地址(以nginx为例): rewrite ^/wp\-comments\-post\.php$ http://www.54chen.com/ last; 土办法步骤二 伪造假地址 既然第一步中的真实地址无法访问了,那第二步肯定是假冒出来可以访问的地址: if (!-e $request_filename){ rewrite ^/wc([0-9]+)\.html$ /wp-comments-post.php?54chen=$1 last; } 土办法步骤三 javascript制造假post 完成上面两步之后 ,最后一步就是将原来的comments.php修改post action的地址为伪造的地址,为了更加有效果,使用js来产生随机的wc1234.html即可: 在评论的form中增加onsubmit=”chenAntiSpam()” name=”commentform”; 再增加js: <script type=”te

Continue reading

Posted in php | Tagged , | 10 Comments

由php的call_user_func传reference引发的思考

问题的提出 网友bercmisir在院内留言,针对php手册中的call_user_func函数的文档一事,大致如下: http://php.net/manual/en/function.call-user-func.php 其中parameter下有这样一句话: Note: Note that the parameters for call_user_func() are not passed by reference. 简单地翻译一下,是说这个函数的参数是不能依靠引用来传递的。 还有一个例子: 输出是: 0 1 而网友bercmisir的问题在于: call_user_func(‘increment’, $a);输出是0,而call_user_func(‘increment’, &$a);却输出是1,明明说不能依靠引用来传递。 寻根溯源 然后再进一步寻根溯源,这个Note的信息其实是http://bugs.php.net/bug.php?id=24931这个bug中最后处理的结果。 并且在call_user_func(‘increment’, &$a);虽然输出了1的结果,但一般情况下,会有一个警告信息:Deprecated: Call-time pass-by-reference has been deprecated。 这是什么原因呢? 先看一个例子: 结果为2,并且没有类似expected to be a …

Continue reading

Posted in php | Tagged , | 4 Comments

[警示]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一文中提及此事。

Continue reading

Posted in php | Tagged , | 3 Comments

从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 …

Continue reading

Posted in php | Tagged , , | 10 Comments

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[‘

Continue reading

Posted in php | Tagged , | 2 Comments

五四陈透过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 ” . …

Continue reading

Posted in java, php | Tagged , , | 4 Comments

五四陈透过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 …

Continue reading

Posted in java, php | Tagged , , | Leave a comment

PHP-FPM配置sendmail支持PHP发信

当下常用的环境CentOS+nginx+php-fpm+mysql. 之前五四陈科学院曾有一文章是介绍环境的配置的,挖一挖水,链接在这里: wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创] 如果要使用mail功能,需要按如下步骤操作: 第一步、安装sendmail yum install sendmail 第二步、启动sendmail service sendmail start 第三步、设置为auto start chkconfig sendmail on 第四步、修改php-fpm.conf: 搜索sendmail,去掉那一行两头的注释如下: <value name=”sendmail_path”>/usr/sbin/sendmail -t -i</value> 第五步、php-fpm reload

Continue reading

Posted in linux, php | Tagged , , | Leave a comment

解读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 …

Continue reading

Posted in php | Tagged , , | Leave a comment

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 = ”; …

Continue reading

Posted in linux, php | Tagged , , , | 2 Comments
Page 1 of 41234