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

http://pear.php.net/package/PHP_CodeSniffer/
使用pear安装,然后使用phpcs命令检查.
sudo pear install PHP_CodeSniffer phpcs application/controllers/Index.php
默认的规则比较严格,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
$ cd ~/.vim/ $ wget http://www.vim.org/scripts/download_script.php?src_id=7285 -O debugger.zip $ unzip debugger.zip
二:PHP安装xdebug扩展
具体安装方法就不讲了,网上例子很多.官方安装说明.
我把我的配置信息贴出来:
sudo vim /home/s/apps/php-5.2.6/etc/include/xdebug.ini
[Xdebug] zend_extension="/home/s/apps/php-5.2.6/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so" xdebug.profiler_enable=0 ;开启profile xdebug.profiler_enable_trigger=1 ;使用触发器开启profile xdebug.profiler_output_dir="/home/s/logs/xdebugLog" xdebug.auto_trace=0 ;开启trace xdebug.trace_enable_trigger=1 ;使用触发器开启trace xdebug.trace_output_dir="/home/s/logs/xdebugLog" xdebug.cli_color=1 xdebug.collect_params=2 xdebug.collect_return=on;remote debug ;开启远程调试 xdebug.remote_enable=1 xdebug.remote_autostart=Off xdebug.remote_port=9000 ;远程端口,不是你web服务的端口,如果没有冲突,一般不用修改。
其中需要注意的是有注释的地方,不自动开启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.
在做以图搜图时,需要用户上传图片,同时需要对用户上传图片做大小限制。
如果文件全部上传到服务器了,可以用$_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, 出现下图即是正常了.
编译php时出现错误
`编译php时出现错误
`
是由于没有安装 libiconv包,又没有yum源,无法通过yum直接安装,还需要自己手动来。
先安装libiconv:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local make sudo make install
然后重新configure php,再make就ok..
./configure --with-iconv=/usr/local make clean make
在实现一个html5异步批量上传文件的功能时,遇到一个例子,使用xhr进行post提交,会模拟一个HTTP_X_FILENAME请求头,可是这个请求信息$_SERVER[‘HTTP_X_FILENAME’] 只有在apache下才能获取到,在nginx下无法获取。所以可以简单粗暴的,直接获取输入流(php://input)进行判断。
阅读全文
