• 【PDO扩展】lastInsertId函数返回0的原因

    问题

    在使用PHP的PDO扩展插入数据的时候,有时候需要获取到最后插入记录的ID作为返回信息。要怎么才能实现这个需求呢?

    lastInsertId函数

    使用PDO的lastInsertId函数。

    但是,最近在使用的过程中发现有时候lastInsertId函数返回的是0。为什么会这样呢?

    先来看看lastInsertId函数在PHP手册上的说明。

    Read more...
  • 【译】更快的方式实现PHP数组去重

    原文:Faster Alternative to PHP’s Array Unique Function

    概述

    使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组。这个函数大多数情况下都能工作得很好。但是,如果你尝试在一个大的数组里使用array_unique()函数,它会运行地慢一些。

    有一个比较好而且更快的函数array_flip()来替代使用array_unique()函数来创建唯一的数组。这个魔法般的函数会交换数组里面每一个元素的键和值,因为键值必须唯一,因此,你会得到跟array_unique()函数一样的结果。

    更快的方式实现PHP数组去重

    Read more...
  • 迟到的2015总结

    2015年,是真正出来参与工作的一年,没有激昂的情绪,没有忙成狗的节奏,但有健康的生活,有充实的生活。

    工作

    这一年,结束了学生生涯。毕业了。开始真正出来工作了,从实习第一天起,导师就跟我说,团队准备做一个从无到有的项目,要做好加班的心里准备,顿时吓得我开始发慌了。刚开始确实疯狂加班加了一个月,一个多月后项目上线了,由于各种原因,项目要交接出去了。原有团队也走了好几个,最后连主管都走了。后来团队就准备交接项目,然后接手其他项目,交接过程中比较漫长,中途找了一些业余时间研究了一些东西,分别有知乎爬虫切换Hosts项目设计模式学习与实现。总的来说,这一年的进步比起自己在学校的时候要大,但是比起工作任务很多的小伙伴们,还是进步地太慢了。

    Read more...
  • 如何在openSUSE42.1下编译安装PHP7

    首先推荐一篇文章PHP 7 Release Date Arrived: Will Developers Adopt PHP 7? - PHP Classes blog

    里面说到是否会去使用PHP7,就个人而言,我是毫不犹豫地使用的,但是生产环境就不是我说了算,所以只能自己在自己的开发环境里更新PHP的版本。那么,你呢?

    笔者使用的是Linux的openSUSE42.1发行版,Yast里面还没有PHP7的安装包,于是乎只能自己手动编译安装了。作为一个PHP开发者,我是非常希望能够学会编译安装PHP7的,之前试过几次,但是每次安装都要上网找各种资料,于是乎,这次安装成功后就想把自己的安装过程以及遇到的问题记录下来,方便以后查阅和分享给需要的人。

    下载源码并解压

    进入正题,要编译安装PHP7,首先当然要下载PHP7的源码。你可以到github上clone,也可以到PHP官网下载。下载后解压到/usr/local/src目录,并将目录重命名为php7。进入目录。

    Read more...
  • 【nginx配置】nginx做非80端口转发

    一个场景

    最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目。搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL前缀是localhost:8080,每次访问项目的时候都要先输入这一串内容,感觉比较繁杂,所以想着将其变成localhost来访问,但是这样的话就是访问80端口了,要达到目的,就得做端口转发。笔者见识比较少,暂时想到的是使用Nginx/Apache等程序做转发。如果有更好的方案,欢迎指教。

    Read more...
  • 【php爬虫】百万级别知乎用户数据爬取与分析

    代码托管地址:https://github.com/hoohackHu/zhihuSpider

    这次抓取了110万的用户数据,数据分析结果如下:

    知乎数据统计图.png

    Read more...
  • 在MySQL的InnoDB存储引擎中count(*)函数的优化

    写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引、使用事务、要什么select什么等等。然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵。实践是检验真理的唯一标准,于是就想在数据库上测试一些性能优化的方案,比如索引之类的,但是不想使用假的数据,于是就想着能不能抓取网上的一些数据来作分析,后来自己通过PHP抓取了一些数据,抓了大约110W的用户数据之后,当然需要统计一下具体的数量,于是我使用了以下的SQL语句(我使用的存储引擎是InnoDB):

    Read more...
  • 在PHP中获取脚本执行时间

    首先介绍一个PHP的函数microtime()

    ##microtime函数

    mixed microtime([ bool $get_as_float = false ])

    这个函数返回当前的UNIX时间戳和毫秒数。

    如果$get_as_float被设置为TRUE,那么microtime()会返回float类型的值,否则返回string类型的值。

    Read more...
  • PHP是怎么运行的

    这篇文章,研究一下PHP代码是如何解释和执行以及PHP脚本运行的生命周期。

    ##概述 PHP服务的启动。严格来说,PHP的相关进程是不需要手动启动的,它是随着Apache的启动而运行的。当然,如果有需要重启PHP服务的情况下也是可以手动重启PHP服务的。比如说在有开启opcode的正式环境更新了代码之后,需要重启PHP以重新编译PHP代码。

    从宏观上来看,PHP内核的实现就是接收输入的数据,内部做相应的处理然后输出结果。对于PHP内核来说,我们编写的PHP代码就是内核接收的输入数据,PHP内核接收代码数据后,对我们编写的的代码进行代码解析和运算执行,最后返回相应的运算结果。

    Read more...
  • 读书笔记--PHP安全编程

    ##register_globals的安全性 本特性已自php5.3.0起废弃并自PHP5.4.0起移除,故不作研究。

    ##不要让不相关的人看到报错信息

    只要关闭display_errors就可以做到,如果你希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。

    所有的出错报告级别可以在任意级别进行修改。

    PHP允许通过set_error_handler()函数指定自己的出错处理函数。

    Read more...