[原] PHP 踩坑实战第二坑:empty

    最近在同事在实践中踩到的一个 empty 坑。关于 empty 的判断类型,就不赘述了,网上解释有很多。例如:0, ”, false, null 等都会被判定为 true。

    这次的坑是 empty 对于对象私有属性的判断。我们来直接上代码:

     Continue reading

PHP | wwpeng | | (0) |

[原] PHP 踩坑实战第一坑:双等号

    PHP 的双等号比较,不会比较类型,只会比较值是否相等,但是这第一坑其实是双等号其中非常隐蔽的一个隐式转换。之前遇到过这个问题,找到原因后没太在意,昨天,,就在昨天。。。NND 又掉进去了。。

    首先先看几个实例代码:

<?php
var_dump( 0 == "a" );
var_dump( "0" == "a" );

 请想想这两个比较的返回结果。

Continue reading

PHP | wwpeng | | (0) |

[原]RecursiveDirectoryIterator 递归目录迭代器

    PHP5开始支持了接口, 并且内置了Iterator接口, 所以如果你定义了一个类,并实现了Iterator接口,那么你的这个类对象就是ZEND_ITER_OBJECT,否则就是ZEND_ITER_PLAIN_OBJECT. 

    对于ZEND_ITER_PLAIN_OBJECT的类,foreach会通过HASH_OF获取该对象的默认属性数组,然后对该数组进行foreach.

    以上是PHP迭代器的一些描述。这里我们主要来看以下 RecursiveDirectoryIterator 这个迭代器的作用,这个东西其实还是比较有用的只是容易被大家忽略。他的主要作用就是实现递归目录扫描,返回目录中的内容。很多人一想到要扫描目录 然后就google一下,然后国内的文章基本都是粘来粘去,都一样的,用 dir  read scandir 之类的循环,并不是说不行或者不好,只是PHP给我们提供了一个更方便的方式。

    那就是 RecursiveDirectoryIterator 和 RecursiveIteratorIterator 了。他们同属于 SPL 的迭代器范围。

SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。SPL 还提供了其他非常多的迭代器  详见: 文档

    OK,我们继续回到扫描目录的问题。其实非常简单只是大家都不知道而已,没啥高深的东西,做个示例就OK了。

Continue reading

PHP | wwpeng | | (0) |

[原]PHP服务器端上传参数限制

1.首先我们先看最常见的配置选项,php.ini 中的配置

upload_max_filesize “2M” PHP_INI_PERDIR 在 PHP <= 4.2.3 时是 PHP_INI_ALL。 

post_max_size “8M” PHP_INI_PERDIR 在 PHP <= 4.2.3 时是PHP_INI_SYSTEM。从 PHP 4.0.3 起可用。

upload_max_filesize 配置的是 上传的文件的大小限制 默认值2M.

post_max_size 配置的是 post的请求做提交的内容的最大限制,默认值8M

这也就是我们最常见的想要上传更大的文件需要修改的配置参数。post_max_size 理论上应该比 upload_max_filesize 大,因为文件上传包含在post请求当中。

2.关于.htaccess文件中的配置选项

php_value upload_max_filesize 50M  #上传文件大小限制 默认 2M

php_value post_max_size 100M         #POST 提交数据的大小限制 默认8M

.htaccess 文件配置生效的前提条件是 该站点的虚拟主机中 配置了:AllowOverride All

3.关于HTML tag中对上传文件的大小限制:

<input type=”hidden” name=”MAX_FILE_SIZE” value=”100″ />

Continue reading

PHP | wwpeng | | (0) |

[原]PHP GD库静态图片格式转换

近期自己一直做的一个图片分享类别的网站,对于上传之后的图片处理转换的一些东西记录分享一下。

PS:目前有很多三方云服务提供图片云,这就不需要我们自己来处理了,他们的方案更好而且还有各种CDN,个人预算能省则省,自己动手丰衣足食,如果是公司项目访问量过大,还是用云服务吧,自己转换挺费资源的。

1.分析

    静态图片的格式一般的我们允许 png,bmp,jpeg虽然gif也可以是静态的但是我把它统一放到动态里面了,因为一旦gif是动态的转换之后就不会再动了,会只保留第一帧,我们暂不讨论他的处理。我总是觉得服务器上放那么多格式的图片很蛋疼,我们还要自己区分,所以我就想用户上传图片上来之后 统一全部都转换成jpeg格式的图片。

2.实现

    一般的我们上传图片都是要做对应的处理的,不管是要压缩缩略图还是添加水印等等操作,我们都需要将图片文件转为内存资源处理。

    GD库已经给我们提供了函数 imagecreatefrompng,imagecreatefromjpeg,imagecreatefromgif,imagecreatefromwbmp给函数一个绝对路径就可以将读入图片资源, Continue reading

PHP | wwpeng | | (1) |