http://pear.php.net/package/PHP_CodeSniffer/ 使用pear安装,然后使用phpcs命令检查. 默认的规则比较严格,doc是必须的,doc的空格个数,格式都有严格要求。。

阅读全文

生成一个PHP扩展.so文件,一般就是这两种方法,第一种是在php源码内configure –[with|enable]-extension_name,然后make && make install,新扩展就会生成并保存在PHP的环境中了。

不过多半会有这种情况,我们跟别人共用一台开发机,开发机已经安装了标准的php开发环境,如果我们在用这种重新编译PHP的情况,如果我们有调试php源码,或者调试扩展,很有可能会损坏原有的标准环境,所以我们就需要另一种方法,只生成一个.so文件,然后把so手动放到标准环境下,就可以不影响大局了。

这种方式呢,也很简单,跟第一种方法一样,三步搞定。

一、phpize

进入你开发php扩展的扩展根目录,比如我想做的扩展是 fkhelloworld,目录在这里 /home/s/www/fukun/clang/php-5.2.6/ext/fkhelloworld.

在这里执行phpize,如果提示找不到此命令,就找到你php的bin目录,执行全路径的命令,比如我的phpize在这里:/home/s/apps/php-5.2.6/bin/phpize

If you look in the current directory at this point, you’ll notice a lot more files than you had there a moment ago. The phpize program combined the information in your extension’s config.m4 file with data collected from your PHP build and laid out all the pieces necessary to make a compile happen. This means that you don’t have to struggle with makefiles and locating the PHP headers you’ll be compiling against. PHP has already done that job for you.

phpize会结合你的config.m4文件中描述的信息以及你的php构建相关数据,制定合并所需的部分数据,这意味着你不必再在意makefile文件和定位要编译的php文件头,PHP已经把这些都做好了。

阅读全文

首先是必需组件的安装。 有三个,vim的DBGp插件,php的xdebug扩展,Chrome浏览器的xdebug helper扩展。 一: vim 安装 dbgp client 插件 下载 DBGp client二:PHP安装xdebug扩展 具体安装方法就不讲了,网上例子很多.官方安装说明. 我把我的配置信息贴出来: sudo vim /home/s/apps/php-5.2.6/etc/include/xdebug.ini 其中需要注意的是有注释的地方,不自动开启profile和trace,因为这样每次请求都会保存相应信息,会把磁盘爆掉的。把触发器打开,这样,只有在请求的时候带特定信息的时候,才会记录相应的性能信息。触发器的实现机制是:在请求时,如果GET/POST/COOKIE信息中包含特定的变量,会开启对应的debug,profile或trace,所以我们可以通过在web中访问页面时,添加对应的变量来开启相应的功能。如果每次都自己拼接这个,也挺麻烦,所以会介绍后边的xdebug helper的chrome扩展,想开启任何一个功能的时候,点击一下扩展就可以了。也就是说,这个扩展不是调试必须的,但是会让你感觉用起来很方便。 三:chrome扩展xdebug helper 地址:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc 如果在 chrome://apps里搜索xdebug helper搜索不到,记得把你的语言改为 English. xdebug helper两处配置要注意, IDE Key要注意选择Other, 值为1,然后保存。 第二个是domain白名单,如果不希望每个页面都出调试的debug icon,就把开发时的域名填进来,比如localhost神马的。其实icon很小,也不太碍事,可以不用设置。 开始使用: 如果不要debug调试,只是需要记录profile和trace信息,看一下性能问题,那么很简单,直接在chrome访问对应的url,会在url右侧看到一个xdebg helper 的小icon,点击后,选择 profile或trace,再刷新,就可以在预先设置的目录见到对应的文件了。 cachegrind* 是profile的文件,trace* 是trace的文件。 在windows下使用WinCacheGrind可以方便的查看profile的信息。 最后,是如何开启远程调试. 用vim编辑程序文件,在需要中断的地方使用:Bp命令打上断点。然后按F5执行监听。 这个时候,vim会提示 waiting for a new connection on port 9000 for 5 seconds… ,所以这个时候你需要在5s内向服务端发起带中断的请求,在前边的url地址,我们把xdebug helper的debug选择上,刷新页面,vim就会进入中断了。右侧有相关提示,我们就可以按GDB的方式逐步调试啦。如果没有安装xdebug helper,也无所谓,自己手动在url上拼接一个参数: &XDEBUG_SESSION_START=1 也可以开启远程调试的。

阅读全文

在做以图搜图时,需要用户上传图片,同时需要对用户上传图片做大小限制。 如果文件全部上传到服务器了,可以用$_FILES变量来获取文件信息,判断文件大小,来决定是否拒绝用户的请求。 不过当文件过大时,会直接出发nginx的413 Request Entity Too Large 错误,如何友好的来提示用户呢。 这里就可以用到nginx的error_page用法了,直接指定413的错误跳转到一个指定页面,在指定页面内友好提示即可。 `在做以图搜图时,需要用户上传图片,同时需要对用户上传图片做大小限制。 如果文件全部上传到服务器了,可以用$_FILES变量来获取文件信息,判断文件大小,来决定是否拒绝用户的请求。 不过当文件过大时,会直接出发nginx的413 Request Entity Too Large 错误,如何友好的来提示用户呢。 这里就可以用到nginx的error_page用法了,直接指定413的错误跳转到一个指定页面,在指定页面内友好提示即可。 ` 这样设置了之后,就可以使用了,当上传的文件过大时,会直接被nginx拦截到413错误,进而重定向到友好的错误提示页。 不过在一次bug修复之后,发现再提交过大的文件时,没有出现这个提示页面了,而是等了很长时间之后出现了一个500错误,而且500错误也没有被拦截到50x的错误页面,很是奇怪。排查了下nginx日志,出现的错误提示就是 client intended to send too large body: 4224579 bytes. 排查了一会之后,再测试环境下打开错误输出,发现原来是413重定向后的Action在视图里有php语法错误。修复之后,就又恢复正常啦。

阅读全文

开发php扩展时,php buildconf 时报错: `开发php扩展时,php buildconf 时报错: ` 这个很简单,一看就明白了,只要使用 ./buildconf –force 即可通过。 php configure时错误:``开发php扩展时,php buildconf 时报错: `开发php扩展时,php buildconf 时报错: ` 这个很简单,一看就明白了,只要使用 ./buildconf –force 即可通过。 php configure时错误:`` 这个是由于缺少libxml2包的原因,使用sudo yum install libxml2 执行后,安装了libxml2包,结果还是提示这个错误,执行rpm -qa|grep libxml2,发现是有libxml2的包的,后来发现,其实需要的是libxml2-devel 包,所以,正确的解决办法是,安装libxml2-devel包,执行 ```开发php扩展时,php buildconf 时报错: `开发php扩展时,php buildconf 时报错: ` 这个很简单,一看就明白了,只要使用 ./buildconf –force 即可通过。 php configure时错误:``开发php扩展时,php buildconf 时报错: `开发php扩展时,php buildconf 时报错: ` 这个很简单,一看就明白了,只要使用 ./buildconf –force 即可通过。 php configure时错误:`` 这个是由于缺少libxml2包的原因,使用sudo yum install libxml2 执行后,安装了libxml2包,结果还是提示这个错误,执行rpm -qa|grep libxml2,发现是有libxml2的包的,后来发现,其实需要的是libxml2-devel 包,所以,正确的解决办法是,安装libxml2-devel包,执行``` 即可。 再重新configure, 出现下图即是正常了.

阅读全文

nginx与HTTP_X_FILENAME

在实现一个html5异步批量上传文件的功能时,遇到一个例子,使用xhr进行post提交,会模拟一个HTTP_X_FILENAME请求头,可是这个请求信息$_SERVER[‘HTTP_X_FILENAME’] 只有在apache下才能获取到,在nginx下无法获取。所以可以简单粗暴的,直接获取输入流(php://input)进行判断。

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China