[PHP]数组移除某个值的两种方式
php中从数组中移除某个值,可以有两种方式,一种是常规的遍历比值然后移除,另一种是利用array_diff函数。
先利用是利用遍历数组的方式写了个函数:
function array_delete_value($array,$delete_value){ foreach ( $array AS $k=>$v ) { if ( $v === $delete_value ) { unset($array[$k]); } } return $array; }
用法:array_delete_value(原数组,待移除的值);
两种方式的使用:
1.利用自定义函数:
<?php $del = ''; $t = 0; function array_delete_value($array,$delete_value){ foreach ( $array AS $k=>$v ) { if ( $v === $delete_value ) { unset($array[$k]); } } return $array; } for ( $i=1;$i<5000;$i++ ) { $s1 = microtime(true); $file2 = array('','net920','cn','','xxxx','kkkk','sdfasd','53453','sdfsadfsafddsaf',0); $file2 = array_delete_value($file2,$del); $s2 = microtime(true); $t = $t + ($s2-$s1); } echo number_format($t/$i,10); print_r($file2); ?>
2.利用array_diff函数:
<?php $del = ''; $t = 0; for ( $i=1;$i<5000;$i++ ) { $s3 = microtime(true); $file = array('','net920','cn','','xxxx','kkkk','sdfasd','53453','sdfsadfsafddsaf',0); $file = array_values(array_diff($file, array($del))); $s4 = microtime(true); $t = $t + ($s4-$s3); } echo number_format($t/$i,10); print_r($file); ?>
从效率上来说,使用自定义方式效率稍微高一点点,不多,呵呵。看情况来决定吧,自定义函数方式不会改变键名,第二种方式会改变键名。
PHP在Windows下的安装
很久没在IIS6配置PHP了。因为服务器重装系统,今天配置了PHP。
我不习惯将PHP文件copy到系统目录内(system32),会导致日后升级比较麻烦。
PHP在IIS6下安装很简单,主要是读取指定的php.ini文件路径的设置问题。
我是通过注册表的IniFilePath来定义的,可以将下面的代码另存一个.reg文件,然后导入到注册表内。记得将C:\\PHP5改为实际的PHP存放目录。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\php] "IniFilePath"="C:\\php5"
另外,一定要将PHP存放路径加入到系统环境变量Path里面去。否则会导致无法加载dll扩展的情况发生。这一步我就给忘了,结果启动iis的时候总会弹出一个类似如下的警告:
弹出应用程序: Warning: PHP Startup: Unable to load dynamic library '*****\php_curl.dll' - 找不到指定的模块。
PHP的json数据编译和解译,字符编码无关。
这里只就PHP5.2.0+以上版本而言,因为JSON扩展是自PHP5.2.0才开始引入的。早期版本没有默认引入。
json现在应用比较广泛,主要是由于ajax技术的原因。json可以很方便的传输具有属性的数据格式,方便前端进行解析处理,更好的将数据流量传输降低并且也能使前后端尽可能的分离。
貌似自06年开始我在做的项目如果客户不强烈要求的情况下,我都会使用UTF-8进行编码开发,UTF-8开发会有很多好处,比如前、后端数据传输很方便无须额外的编码开销,另外储存的字符也比较直观,虽然有数据容量的浪费,但在目前储存如白菜价的环境下,容量问题应该不大。
在使用UTF-8编码的时候,json_encode/json_decode可以很方便的处理(虽然编译后的数据中的中文看起来很怪异,但因为也不需要直接使用数据所以也无所谓),因为PHP自带的json扩展库只支持UTF-8编码。
但有的时候客户强烈选择使用GBK/GB2312进行编码的情况下,自带的json就应付不了了。所有涉及到中文的经过编译后会变成null。 更多 »
Windows2003计划任务实现服务器自动重启
最近服务器刚刚更换了一块新硬盘,同时也将PHP升级了一下,然后不知道什么原因(因为这两个维护导致的或是其他的)IIS运行PHP的站点每隔一阵就会无法访问,而静态页面的站点是可以访问的,最为奇怪的是,貌似每次发生这样的故障的间隔期间基本是差不多的,尝试检查了一下,没发现什么意外情况,连系统的日志以及IIS自身的日志都没有什么异常记录。同时也是比较懒得详细检查,所以干脆直接搞了定时重启服务器。
这绝对是一个非常非常非常懒惰的行为,可确实是没什么更好的办法了,如果有朋友能知道这是怎么个原因的话不妨告诉一下,千恩万谢!!! 更多 »
关于SQL注入的监测
网站被挂马,有一个方式就是对某个帐号进行提权操作,比如针对非管理用户提权至最高管理员的权限。
事后可以发现被提权的用户帐号,但检查经由哪个文件注入的是个麻烦的事情,特别是针对开源的文件结构比较复杂的程序来说。
以前有个思路,一直未实现,今天处理了一个,是针对Discuz!5.5(很老的一个版本了^^)的,处理思路就是事后诸葛亮。
将wordpress升级到了3.2.1
之前以为wordpress 3.2.1需要PHP最低版本为5.3所以一直没敢升级,今天了解到原来没有这个要求,呵呵。
晚上无聊的时候就升级了一下,没发现什么特别好玩的功能。原来的风格一来不太兼容,二来实在改得太乱了,懒得再改了,于是直接在wordpress找了一款叫做Sonar 1.2.4的风格安装上对付着用了,不是很好看,唯一喜欢的可能就是这款风格的色调了。安装后发现是英文版的,自己汉化了一下,用着还算可以。
PHP的Snoopy.class.php
使用PHP读取HTTP页面基本使用Snoopy,使用简单方便易用。
最近在使用过程中发现一些问题,读取某些服务器的时候会发现获取不到页面内容。
留意Snoopy的Header请求头的时候发现,对于HOST请求是类似
HOST: hostname:port
看代码,只要端口存在,就使用该方式发送请求。
但观察浏览器请求时发现如果端口为80的时候,会省略掉端口号。
按这个方式改造一下Snoopy的代码,加入判断端口号,如果端口号为80的情况下,则直接使用
HOST: hostname
否则使用
HOST: hostname:port
这样改写代码后上面的问题就解决了。
问题的原因不太清楚,呵呵,对于HTTP协议始终就是模棱两可一知半解,实用至上主义,问题解决就不管了。
另外,还有一个问题就是,自官方下载到的Snoopy.class.php的编码问题,这个文件使用的是“阿拉伯语(Windows)”进行编码的,至少在这个编码下查看没有乱码。
为了方便日后改写代码,我是利用阿拉伯语(Windows)打开,然后Copy无乱码的代码另存为UTF-8编码,方便日后更改处理。
分享一下近期在开发过程中用到的一些PHP库类
手里的项目进展还算顺利,即将进入一个新阶段,越来越感觉运营中的那句话“先开枪后瞄准”的确是进行一个商业计划(特别是比较新颖的)时,需要考虑的。技术人员不能眼里只有纯粹的技术,如若想要尽快的实现盈利,一些非关键性的功能和技术方面可以放到后面去考虑,目的是要尽快的确保项目能够稳定的运行且尽快的抢占市场赢得一些商机。
一直以来开发的程序都没有用过现成的框架,由于对面向对象开发还是有一些障碍(心理接受以及性能方面考虑等),但由于一些长期的运营项目涉及未来扩展和开发问题(面向过程开发在这方面还是很弱的),所以自己弄了一个面向过程开发的一个“框架”(只能算是一个雏形吧),虽然不能解决大问题,但最起码可以让新开发中减少很多重复性的操作。
更多 »
HTML中的文本区textarea发送换行的测试
一直都在想在HTML前端页面表单的文本区textarea输入换行的时候,服务器接收到的这个文本区的数据是什么样的。
都知道不同的操作系统对于换行的表达不一样,Windows的换行符号是“\r\n”、类Unix系统换行符号是“\n”、而Mac OS换行符号则是“\r”(Mac OS 9以前是“\r”,以后就是“\n”了)
我其实就是想了解一下:
如果客户端是Win系统,服务端是类Unix系统,那么在客户端提交的表单内的换行符号是什么?
反之呢?
更多 »
关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决
一个项目需要在Win系统用计划任务执行PHP,写了个批处理bat利用php-cgi.exe进行执行PHP文件,由于在服务器运行为了不影响服务器既有的PHP配置信息,同时也是考虑未来的移植性还有性能问题,自己弄了个精简了的PHP运行环境。
可在Win下死活也是执行不了,运行批处理直接闪一下就啥都木有咧,于是为了看具体的状态,使用cmd命令行模式去运行批处理文件,结果提示“系统无法执行指定的程序。”,悲催了,难道朋友将服务器给阉割导致不能执行.bat文件?
正咬牙切齿的时候决定再尝试一下确定到底是什么问题。这一次直接在cmd中执行php,运行php.exe -c php.ini -i(指定同php.exe相同目录下的php.ini作为php的配置文件,并且显示phpinfo信息),回车后,竟然还是那句该死的“系统无法执行指定的程序。”,看来不是系统运行不了bat批处理,是干脆不能执行php.exe,咋回事捏?
更多 »