2016年10月

PHP如何有效快速的编写类的步骤

作为初学者来说,在写类的时候,可能会感觉有点模糊,不知道该如何有条理的写一个类,如果只是一味的写增删改查,那么就只能做为初级PHP工程师存在了,根据最近的学习总结及他人给予的建议,我大概整理了一下,PHP中写类的前后顺序:

0x01 权限

   再好的程序,安全性为0,也应该一票否决!这是我奉行的一句话。所以,写一个方法,第一件事应该是判断权限,是否登录,或者当前用户是否拥有访问本页面的权限。

0x02 过滤伪造

   这一步同样是安全上的问题,过滤提交过来的参数,禁止非法参数。不要相信外部提交过来的一切参数。凡是用户提交的,全部过滤。

0x03 功能实现

   前面两步写完之后,才可以开始写本方法需要实现的功能,这一步就大多是增删改查了,不多描述。

0x04 性能

   功能实现后,就可以开始考虑性能了。当然当网站大到一定规模的时候,这个性能可以放到前面来考虑。

0x05 用户体验

   网站最后都是用来给用户访问的,在这个用户至上的时代,用户体验是必不可少的。有合适的地方增加一些优化用户体验的操作是很有必要的(比如:loading图);

如果基于以上方法写一个类的话,那么可以逻辑很清晰,条理很清楚的快速写出来!基本不会出太大问题!当然这只是我的看法,如果您有更好的方法!欢迎与我交流!

使用PHP中EXIF扩展解决iphone拍照上传会旋转90度的问题

0x01 开启EXIF扩展支持

检查是否有PHP中的EXIF扩展库,有的话就修改php.ini中:

1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号
2.在php.ini文件中找到;extension=php_mbstring.dll,去掉前面的分号,并将此行移动到extension=php_exif.dll之前,使之首先加载*。
3.找到[exif]段,把下面语句的分号去掉。
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel = JIS

0x02 使用exif判断图片是否需要进行旋转

//需要判断的文件路径
$imgfile = $__root__.'/'.$returnDir;
    if (!function_exists('exif_read_data')) {
        return;
    }
    //好像iphone拍照的都是jpg格式,所以这里直接处理jpg图像
    $img  = @imagecreatefromjpeg($imgfile);
    if($img === false){
        return;
   }
   //用exif获取图像信息,并判断是否需要旋转
   $exif = exif_read_data($imgfile);
   if (!empty($exif['Orientation'])) {
         switch ($exif['Orientation']) {
              case 8:
                 $image = imagerotate($img, 90, 0);
                     break;
              case 3:
                 $image = imagerotate($img, 180, 0);
                     break;
              case 6:
                 $image = imagerotate($img, -90, 0);
                     break;
         }
   }
   imagedestroy($img);
   if (isset($image)) {
       imagejpeg($image, $imgfile);
       imagedestroy($image);
   }

  //旋转完毕后,进行图片缩放,一定要先判断旋转原图,然后在进行其他图片处理,
  //缩放图片(采用的CI框架的图片缩放类)
  $config['image_library'] = 'gd2';
  $config['source_image'] = $__root__.'/'.$returnDir;
  $config['create_thumb'] = TRUE;
  $config['maintain_ratio'] = TRUE;
  $config['width']     = 250;

  $this->load->library('image_lib', $config);
  if ($this->image_lib->resize()){
      unlink($__root__.'/'.$returnDir);//删除原图,只保留缩略图
      return $__root__.'/'.$Dir.'/'.date('ymd').'/'.$fileName.'_thumb.'.$postfix;
  }

0x03 其他问题

 我当时在测试的时候,遇到了报下面这个错。
     Allowed memory size of 134217728 bytes exhausted (tried to allocate 12096 bytes)
 这个需要将php.ini的memory_limit = 128M;改为一个更大的值。
 一个php脚本一次请求的内存空间就要超过128M,那不管将memory_limit设置成多大,以后肯定有出问题的时候。
 究其原因,是我在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。

CI框架使用PHPExcel时中IOFactory查找不到

使用PHPExcel的时候总是会遇到各种各样的奇葩问题。

使用方法看这里:PHPExcel使用实例

如果导出Excel的时候,文档中出现:

<b>Fatal error</b>:  Class 'PHPExcel_IOFactory' not found in 

检查一下,PHPExcel目录下的IOFactory.php的class名是不是为:PHPExcel_IOFactory

如果不是就修改class名为PHPExcel_IOFactory

再导出重试。

Nginx下PHPCMS伪静态规则

环境:LNMP一键安装包1.3版本

伪静态规则文件需要放在/usr/local/nginx/conf/ 下面。

创建一个phpcms.conf文件,里面写如下伪静态规则:

location / {
    if (!-e $request_filename){
        rewrite ^/caipu-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
        rewrite ^/content-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
        rewrite ^/list-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=lists&catid=$1&page=$2 last;
        rewrite ^/tag-([^\.]*)-([0-9]+)-([0-9]+).html /index.php?m=content&c=tag&catid=$2&tag=$1&page=$3 last;
        rewrite ^/comment-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=comment&c=index&a=init&commentid=content_$1-$2-$3 last;
        rewrite ^/([^\.]*).html /index.php?m=member&c=index&a=$1 last;
    }
}

将伪静态导入到主机配置文件。

虚拟主机配置文件在:/usr/local/nginx/conf/vhost/域名.conf

打开后,在root /home/wwwroot/域名;这一行下面添加:

include phpcms.conf;

执行:/etc/init.d/nginx restart 重启生效。

PHP数组操作函数,获取二维数组中某一列的值集合为新数组

现有一个如下的二维数组,需要取出所有的ID,然后去数据库进行查询,如下操作:

$arr = array(
   0=>array(
    'id' => 5,
    'name' => '张三'
   ),
   1=>array(
    'id' => 6,
    'name' => '李四'
   )
);

我要取出所有的ID然后再次组合,这里列举几种方法:

1、foreach循环
2、使用array_map函数

$arr2 = array_map('array_shift',$arr);

3、使用array_column函数(推荐)

$arr2 = array_column($arr, 'id');

这样新的数据就是:

$arr2 = array(
   0=>array(
    'id' => 5
   ),
   1=>array(
    'id' => 6
   )
);

然后接下来就简单了,使用impload函数,拼装。

 $data = impload(',',$arr2);

接下来再去查询数据库用in语句查询,所有的ID所涉及到的数据就出现了。

最新文章

最近回复

  • 裤衩哥:这文章我转了,而且我还以我自己的名字发了。2333333,你来咬...
  • :怎么生成带logo的二维码呀????
  • zirmi:哎呀,你的域名爆破工具 输入的字符不够啊
  • 小余:二维码如何弄啊,哥
  • 裤衩哥:可以要你的菊花吗?
  • admin:楼上+1
  • admin:吃瓜群众 为 落魂 打call
  • :牛逼了..........
  • 帮帮:厉害!谢谢了朋友!解决了我的问题。
  • 落魂:好多小伙伴找我要这个CSS样式,其实这个是使用的一套模块!大家可...

分类

归档

友情链接