windows/linux文件夹分割符:PHP里的DIRECTORY_SEPARATOR 与 PATH_SEPARATOR
Php/Js/Shell/Go jackxiang 2013-4-10 20:43
黑客X档案2011年12月刊:小菜也来写PHP木马说到这个变量,再就是在进行一些目录的截取时可能会用到这些变量:
DIRECTORY_SEPARATOR:
路径分隔符,
linux上就是’/’
windows上是’\’
PATH_SEPARATOR:
include多个路径使用,在win下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。
这2个常量的使用能够避免不同平台的兼容性问题。
来自:http://gaoke0820.blog.163.com/blog/static/216649652010726101431997/
DIRECTORY_SEPARATOR:
路径分隔符,
linux上就是’/’
windows上是’\’
PATH_SEPARATOR:
include多个路径使用,在win下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。
这2个常量的使用能够避免不同平台的兼容性问题。
来自:http://gaoke0820.blog.163.com/blog/static/216649652010726101431997/
PHP用CURL伪造IP和来源
Php/Js/Shell/Go jackxiang 2013-4-3 12:08
今天群里一个朋友在问这个问题。
查了下,CURL确实很强悍的可以伪造IP和来源。
1.php 请求 2.php 。
1.php代码:
2.php代码如下:
伪造成功,这是不是给“刷票”的朋友提供了很好的换IP的方案!!
哈哈。
结果:
HTTP/1.1 200 OK Date: Wed, 03 Apr 2013 06:20:42 GMT Server: Apache/2.2.22 (Win32) PHP/5.3.13 X-Powered-By: PHP/5.3.13 Content-Length: 44 Content-Type: text/html
IP: 8.8.8.8
referer: http://www.gosoa.com.cn/
来自:http://www.gosoa.com.cn/php%E7%94%A8curl%E4%BC%AA%E9%80%A0ip%E5%92%8C%E6%9D%A5%E6%BA%90
hosts文件拒绝访问解决办法,host文件给隐藏了并不能覆盖提示权限不够的问题解决。
Php/Js/Shell/Go jackxiang 2013-4-2 09:50
一、
一电脑只能通过editplus到路径下输入hosts文件,但是看不到文件,通过文件夹选项:查看,去掉隐藏受保护的操作系统文件,能看到文件,但是通过在文件上点属性,后发现其后面的隐藏还是一个disabled的勾勾,也就是属性上还是有隐藏这一项,于是,想去掉都去不掉,最后在网上找了一工具:
http://iask.sina.com.cn/b/15491022.html
我找到了三个不同的修复工具,见附件。
附件:隐藏文件恢复.rar
DownLoad:
里面的,U盘MP3隐藏文件夹病毒修复工具.exe 运行后,就Ok了。
至于权限不够,无法覆盖该文件,可采用文件属性里的安全里添加相关权限即可。
二、
hosts文件拒绝访问解决办法:
1,对于第一种原因,自然是杀毒,这里就不详细解释了; 360卸载了就好了。(一直提示要administrator才能啥啥啥的...卸载后成功了。)
2,杀毒软件或其他安全软件为系统安全禁止了hosts文件的修改权限。
3,如果以上两个方法都行不通,可以尝试通过手工修改hosts文件写入权限的方法。
a,右键点击hosts文件,去掉只读属性,增加存档属性;
b,在xp下,点击开始->运行,请输入:attrib %SystemRoot%\system32\drivers\etc\hosts -h -r –s 点”确定”按钮。
一电脑只能通过editplus到路径下输入hosts文件,但是看不到文件,通过文件夹选项:查看,去掉隐藏受保护的操作系统文件,能看到文件,但是通过在文件上点属性,后发现其后面的隐藏还是一个disabled的勾勾,也就是属性上还是有隐藏这一项,于是,想去掉都去不掉,最后在网上找了一工具:
http://iask.sina.com.cn/b/15491022.html
我找到了三个不同的修复工具,见附件。
附件:隐藏文件恢复.rar
DownLoad:
下载文件
里面的,U盘MP3隐藏文件夹病毒修复工具.exe 运行后,就Ok了。
至于权限不够,无法覆盖该文件,可采用文件属性里的安全里添加相关权限即可。
二、
hosts文件拒绝访问解决办法:
1,对于第一种原因,自然是杀毒,这里就不详细解释了; 360卸载了就好了。(一直提示要administrator才能啥啥啥的...卸载后成功了。)
2,杀毒软件或其他安全软件为系统安全禁止了hosts文件的修改权限。
3,如果以上两个方法都行不通,可以尝试通过手工修改hosts文件写入权限的方法。
a,右键点击hosts文件,去掉只读属性,增加存档属性;
b,在xp下,点击开始->运行,请输入:attrib %SystemRoot%\system32\drivers\etc\hosts -h -r –s 点”确定”按钮。
关于PHP 刷新缓冲区操作(边执行边输出)简单分析
Php/Js/Shell/Go jackxiang 2013-3-29 15:01
背景:估计那个同学想做PHP的长连接,或者是想有些较为少用的用法,但它涉及到了缓冲的概念(PHP和Apache,PHP和Nginx等,Web服务器的一个接口等)
关于PHP 刷新缓冲区操作(边执行边输出)简单分析:
PHP群里有一位同学问
这段代码在apache下能边执行边输出,在nginx下怎么就不行了?
简单的理解为2个问题:
1 首先这个问题核心就是当缓冲区数据达到一定量时先输出到浏览器。
2 apache和nginx 的php执行方式差异。
这个问题和我上篇博文《FastCGI 技术介绍》有一定的联系,apache是以CGI/CLI的方式调用php。而nginx 是以fastcgi方式调用PHP。FastCGI 基于Unix domain socket或者tcp/ip进行通信。
步骤 名称 描述
1 FCGI_PARAMS 从web服务器如nginx向fastcgi应用程序发送请求数据、环境变量等
2 FCGI_STDIN 接送从web服务器发送来的数据
3 FCGI_DATA 过滤web服务器发送来的数据
4 FCGI_STDOUT 发送数据到web服务器
5 FCGI_STDERR 发送状态(错误信息)到web服务器
6 FCGI_END_REQUEST 结束本次http请求
就是意味着可以设置一定的缓冲区大小 来实现。
土话就是:人为让缓冲区容量达到一定额。
nginx FastCGI 提供了2个参数
修改nginx.conf
参数可以调整。具体文档:http://wiki.nginx.org/HttpFastcgiModule#fastcgi_buffer_size
修改上述PHP代码
来自:http://www.cydphp.cn/?p=155
再就是这位兄弟的:http://www.cydphp.cn/?p=107 【写得比较原始,原始的CGI,当年没有PHP时是这么干的,可以有较为深入的理解】
关于PHP 刷新缓冲区操作(边执行边输出)简单分析:
PHP群里有一位同学问
这段代码在apache下能边执行边输出,在nginx下怎么就不行了?
简单的理解为2个问题:
1 首先这个问题核心就是当缓冲区数据达到一定量时先输出到浏览器。
2 apache和nginx 的php执行方式差异。
这个问题和我上篇博文《FastCGI 技术介绍》有一定的联系,apache是以CGI/CLI的方式调用php。而nginx 是以fastcgi方式调用PHP。FastCGI 基于Unix domain socket或者tcp/ip进行通信。
步骤 名称 描述
1 FCGI_PARAMS 从web服务器如nginx向fastcgi应用程序发送请求数据、环境变量等
2 FCGI_STDIN 接送从web服务器发送来的数据
3 FCGI_DATA 过滤web服务器发送来的数据
4 FCGI_STDOUT 发送数据到web服务器
5 FCGI_STDERR 发送状态(错误信息)到web服务器
6 FCGI_END_REQUEST 结束本次http请求
就是意味着可以设置一定的缓冲区大小 来实现。
土话就是:人为让缓冲区容量达到一定额。
nginx FastCGI 提供了2个参数
修改nginx.conf
参数可以调整。具体文档:http://wiki.nginx.org/HttpFastcgiModule#fastcgi_buffer_size
修改上述PHP代码
来自:http://www.cydphp.cn/?p=155
再就是这位兄弟的:http://www.cydphp.cn/?p=107 【写得比较原始,原始的CGI,当年没有PHP时是这么干的,可以有较为深入的理解】
转载:php中的unsigned long类型
Php/Js/Shell/Go jackxiang 2013-3-27 21:29
php Unable to allocate memory for pool错误
Php/Js/Shell/Go jackxiang 2013-3-27 11:37
背景:群里有人问这个问题:
Unable to allocate memory for pool
经过排查发现时平台服务器上安装的APC扩展分配的cache空间满了
解决方法如下:
平台服务器上APC扩展默认cache大小为32M(apc.shm_size = 32)
将cache大小修改大一些,比如修改成256M(apc.shm_size = 256),
重启php-fpm 就可以了
php 脚本打印出 Warning : Unable to allocate memory for pool.
经检查,服务器上安装了APC,而apc分配的Cache空间已经被完全占用。
解决方法:
1. apc增大 apc.shm_size ,比如,从默认的30M 变成256M
2. 隐藏PHP的Warning 报警
当然啦,前者是王道,后者是诡道。
参考来自:
http://hi.baidu.com/cuttinger/item/bef6171e5d5538f964eabfd6
http://blog.chinaunix.net/uid-20788275-id-1841832.html
Unable to allocate memory for pool
经过排查发现时平台服务器上安装的APC扩展分配的cache空间满了
解决方法如下:
平台服务器上APC扩展默认cache大小为32M(apc.shm_size = 32)
将cache大小修改大一些,比如修改成256M(apc.shm_size = 256),
重启php-fpm 就可以了
php 脚本打印出 Warning : Unable to allocate memory for pool.
经检查,服务器上安装了APC,而apc分配的Cache空间已经被完全占用。
解决方法:
1. apc增大 apc.shm_size ,比如,从默认的30M 变成256M
2. 隐藏PHP的Warning 报警
当然啦,前者是王道,后者是诡道。
参考来自:
http://hi.baidu.com/cuttinger/item/bef6171e5d5538f964eabfd6
http://blog.chinaunix.net/uid-20788275-id-1841832.html
php 如何取得当前时间从1970年1月1日,0点0分0秒至今的毫秒数
Php/Js/Shell/Go jackxiang 2013-3-26 16:25
microtime:
定义:microtime() 函数返回当前 Unix 时间戳和微秒数。
语法:microtime(get_as_float)
从php5.0以后增加一参数
参数 描述
get_as_float 如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
以前版本取时间时方法为:
php5.0以后可以如下实现:
这样用原生php方法,效率大大提高,测试执行效率提高200%以上。
有论述这个问题的:
http://blog.csdn.net/haha00217/article/details/7690499
定义:microtime() 函数返回当前 Unix 时间戳和微秒数。
语法:microtime(get_as_float)
从php5.0以后增加一参数
参数 描述
get_as_float 如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
以前版本取时间时方法为:
php5.0以后可以如下实现:
这样用原生php方法,效率大大提高,测试执行效率提高200%以上。
有论述这个问题的:
http://blog.csdn.net/haha00217/article/details/7690499
PHP包含或读取了哪个配置文件的跟踪探讨。
Php/Js/Shell/Go jackxiang 2013-3-24 11:10
背景:
我正在读一个不太明白的PHP新程序,像空降到一个众林,出现一个包含/读取某文件是一个黑盒子,想问:如何跟踪PHP在一次执行时读取或include了某个文件?(如配置文件,该配置文件有可能是include进来,有可能是通过直接读取的方式,但不明朗,怎么办好呢?)
PHP高级编程群兄弟出招了:
1.有兄弟建议用find命令查找access time(是文档最后一次被读取的时间)。
2.有兄弟建议get_included_files 来看是哪个文件print_r(get_included_files());,
也顺便提到其它三个精妙的函数:get_included_files ,get_included_path,get_loaded_extensions。
3.也有兄弟提出用安装扩展的方法去实现:http://pecl.php.net/package/inotify
也可以用上次说的php_AOP
aop_add_after("file_get_contents()", 'file_open_call');
file_get_contents("./test.php");
要是include进来的文件,直接用get_included_files,来判断就好了.(这个函数很厉害,再次有兄弟推荐。)
里面提到AOP,可以参考:
http://hi.baidu.com/bise86/item/a396eed5c8fae8cc1a72b4a1
http://www.croes.org/gerald/projects/aop/documentation_aop_extension_php.pdf
使用inotify防php木马:http://hi.baidu.com/ostech/item/f729c8c2fa8a392447d5c089
php使用inotify实现队列处理:http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97%E5%A4%84%E7%90%86.html
通过rsync+inotify实现数据的实时备份:http://ixdba.blog.51cto.com/2895551/580280
如果是linux与linux还可以使用rsync+inotify方式进行传输,速度也是非常快的....:
http://my.oschina.net/7shell/blog/57355
我正在读一个不太明白的PHP新程序,像空降到一个众林,出现一个包含/读取某文件是一个黑盒子,想问:如何跟踪PHP在一次执行时读取或include了某个文件?(如配置文件,该配置文件有可能是include进来,有可能是通过直接读取的方式,但不明朗,怎么办好呢?)
PHP高级编程群兄弟出招了:
1.有兄弟建议用find命令查找access time(是文档最后一次被读取的时间)。
2.有兄弟建议get_included_files 来看是哪个文件print_r(get_included_files());,
也顺便提到其它三个精妙的函数:get_included_files ,get_included_path,get_loaded_extensions。
3.也有兄弟提出用安装扩展的方法去实现:http://pecl.php.net/package/inotify
也可以用上次说的php_AOP
aop_add_after("file_get_contents()", 'file_open_call');
file_get_contents("./test.php");
要是include进来的文件,直接用get_included_files,来判断就好了.(这个函数很厉害,再次有兄弟推荐。)
里面提到AOP,可以参考:
http://hi.baidu.com/bise86/item/a396eed5c8fae8cc1a72b4a1
http://www.croes.org/gerald/projects/aop/documentation_aop_extension_php.pdf
使用inotify防php木马:http://hi.baidu.com/ostech/item/f729c8c2fa8a392447d5c089
php使用inotify实现队列处理:http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97%E5%A4%84%E7%90%86.html
通过rsync+inotify实现数据的实时备份:http://ixdba.blog.51cto.com/2895551/580280
如果是linux与linux还可以使用rsync+inotify方式进行传输,速度也是非常快的....:
http://my.oschina.net/7shell/blog/57355
find命令查找最近修改的各种后续文件, 大于多少分钟修改的方件:mmin。
Php/Js/Shell/Go jackxiang 2013-3-24 10:56
背景:查找日志文件,可以用它来找最近修改的日志
find /data/www/up.****.com/tmp -type f -mmin +1
/data/www/up.***.com/tmp/20210802.wxapp.***.com.0945.zip
查找最近30分钟修改的当前目录下的.php文件
find . -name '*.php' -mmin -30
查找最近24小时修改的当前目录下的.php文件
find . -name '*.php' -mtime 0
查找最近24小时修改的当前目录下的.php文件,并列出详细信息
find . -name '*.inc' -mtime 0 -ls
查找当前目录下,最近24-48小时修改过的常规文件。
find . -type f -mtime 1
查找当前目录下,最近1天前修改过的常规文件。
find . -type f -mtime +1
来自:http://goodboy.sinaapp.com/?p=118
find /data/www/up.****.com/tmp -type f -mmin +1
/data/www/up.***.com/tmp/20210802.wxapp.***.com.0945.zip
查找最近30分钟修改的当前目录下的.php文件
find . -name '*.php' -mmin -30
查找最近24小时修改的当前目录下的.php文件
find . -name '*.php' -mtime 0
查找最近24小时修改的当前目录下的.php文件,并列出详细信息
find . -name '*.inc' -mtime 0 -ls
查找当前目录下,最近24-48小时修改过的常规文件。
find . -type f -mtime 1
查找当前目录下,最近1天前修改过的常规文件。
find . -type f -mtime +1
来自:http://goodboy.sinaapp.com/?p=118
PHP SPL笔记之offsetSet等相关函数了解备案。
Php/Js/Shell/Go jackxiang 2013-3-19 18:13
SPL里有好多好的东西,但用的人相对较少甚至都想不起来,我在一个ko里就看到一个,offsetSet示例:
代码:
-----------------------------------------------------------------------------------------------------------------------------------------
该SPL函数介绍:
/**
* Sets the value at the specified index to newval
* @link http://www.php.net/manual/en/arrayobject.offsetset.php
* @param index mixed <p>
* The index being set.
* </p>
* @param newval mixed <p>
* The new value for the index.
* </p>
* @return void
*/
public function offsetSet ($index, $newval) {}
做下实际的相关SPL函数的测试,也就是相当于可以对一个对象进行添加属性,如类变量,数组等,同时提供相关的操作函数像操作数组一样对类对象进行操作里面的变量,带来了相当方便和灵活性,实践如下:
offsetSet相关函数:
http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html
更加有助于理解的Url:
http://www.mjplay.com.cn/php/fun/arrayobject.offsetset.html
http://hi.baidu.com/gwsshoddxvcmnte/item/deecccdffb539d1420e2505a
关于SPL的更多笔记,这个百度空间的兄弟写得较多了,如下Url:
PHP SPL,遗落的宝石:http://hi.baidu.com/gwsshoddxvcmnte/item/288a08c477656203c610b25b
PHP SPL 笔记:http://hi.baidu.com/gwsshoddxvcmnte/item/df0239c554dcc52fe80f2e5a
PHP SPL 笔记2:http://hi.baidu.com/gwsshoddxvcmnte/item/deecccdffb539d1420e2505a
PHP SPL 笔记3:http://hi.baidu.com/gwsshoddxvcmnte/item/51d9eef4b33562e41a111f5a
PHP SPL 笔记4:http://hi.baidu.com/gwsshoddxvcmnte/item/039da3012f740e096d90485e
代码:
-----------------------------------------------------------------------------------------------------------------------------------------
该SPL函数介绍:
/**
* Sets the value at the specified index to newval
* @link http://www.php.net/manual/en/arrayobject.offsetset.php
* @param index mixed <p>
* The index being set.
* </p>
* @param newval mixed <p>
* The new value for the index.
* </p>
* @return void
*/
public function offsetSet ($index, $newval) {}
做下实际的相关SPL函数的测试,也就是相当于可以对一个对象进行添加属性,如类变量,数组等,同时提供相关的操作函数像操作数组一样对类对象进行操作里面的变量,带来了相当方便和灵活性,实践如下:
offsetSet相关函数:
http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html
更加有助于理解的Url:
http://www.mjplay.com.cn/php/fun/arrayobject.offsetset.html
http://hi.baidu.com/gwsshoddxvcmnte/item/deecccdffb539d1420e2505a
关于SPL的更多笔记,这个百度空间的兄弟写得较多了,如下Url:
PHP SPL,遗落的宝石:http://hi.baidu.com/gwsshoddxvcmnte/item/288a08c477656203c610b25b
PHP SPL 笔记:http://hi.baidu.com/gwsshoddxvcmnte/item/df0239c554dcc52fe80f2e5a
PHP SPL 笔记2:http://hi.baidu.com/gwsshoddxvcmnte/item/deecccdffb539d1420e2505a
PHP SPL 笔记3:http://hi.baidu.com/gwsshoddxvcmnte/item/51d9eef4b33562e41a111f5a
PHP SPL 笔记4:http://hi.baidu.com/gwsshoddxvcmnte/item/039da3012f740e096d90485e
出现两个一样的,于是想了解HTTP_HOST 和 SERVER_NAME 的区别:
一:相同时满足以下三个条件:
1.服务器端口默认80
2.apache或nginx中ServerName设置正确
3.HTTP/1.1协议规范
二:不同点:
$_SERVER['HTTP_HOST']会根据客户端HTTP请求输出信息
$_SERVER['SERVER_NANE']会根据apache或nginx的配置文件中的ServerName值
当端口不为80时
$_SERVER['HTTP_HOST']输出中会带有端口号
$_SERVER['SERVER_NAME']只会直接输出ServerName的值
所以,应尽量使用$_SERVER["HTTP_HOST"],保险,可靠!
PHP中的SERVER预保留变量中HTTP_HOST 和 SERVER_NAME经常是一样的,原因是服务器使用的是默认的端口80,
HTTP_HOST将省略不显示,而HTTP服务的默认端口就是80,所以大多数情况下,HTTP_HOST都没有显示这个端口号。
而如果使用的是ssl链接,那么端口号将被显示出来。
如果你的程序中有设定端口的功能,则可以考虑使用SERVER_NAME ,否则,建议使用HTTP_HOST
来自:http://hi.baidu.com/dream_net/item/9a341555879c963795eb05b4
一:相同时满足以下三个条件:
1.服务器端口默认80
2.apache或nginx中ServerName设置正确
3.HTTP/1.1协议规范
二:不同点:
$_SERVER['HTTP_HOST']会根据客户端HTTP请求输出信息
$_SERVER['SERVER_NANE']会根据apache或nginx的配置文件中的ServerName值
当端口不为80时
$_SERVER['HTTP_HOST']输出中会带有端口号
$_SERVER['SERVER_NAME']只会直接输出ServerName的值
所以,应尽量使用$_SERVER["HTTP_HOST"],保险,可靠!
PHP中的SERVER预保留变量中HTTP_HOST 和 SERVER_NAME经常是一样的,原因是服务器使用的是默认的端口80,
HTTP_HOST将省略不显示,而HTTP服务的默认端口就是80,所以大多数情况下,HTTP_HOST都没有显示这个端口号。
而如果使用的是ssl链接,那么端口号将被显示出来。
如果你的程序中有设定端口的功能,则可以考虑使用SERVER_NAME ,否则,建议使用HTTP_HOST
来自:http://hi.baidu.com/dream_net/item/9a341555879c963795eb05b4
为什么要使用PHP单例模式及应用实例+PHP设计模式笔记:使用PHP实现单例模式
Php/Js/Shell/Go jackxiang 2013-3-18 18:03
背景:在以前初始化一个数据库句柄:
为何都这样写单例模式?层层分析:
http://www.cnblogs.com/hongfei/archive/2012/07/07/2580994.html
——————————————————————————————————————
上面Url里提到各种调用调不了,出问题的一个小小总结如下,也有总结不对的,说是静态函数被类调用不需要执行析构函数是不对的,执行了,但没有创建对象是真:
在php中,访问类的方法/变量有两种方法:
1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。
2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
A. 如果是变量,需要该变量可访问。
B. 如果是方法,除了该方法可访问外,还需要满足:
b1) 如果是静态方法,没有特殊条件;
b2) 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
然后我们再看一下使用$object->… 和使用class::… 都有什么区别:
1. 使用$object->… ,需要执行构造函数创建对象;
2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。
然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
差异还是显然存在的,如下:
1. 静态变量
静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。
2. 静态方法
静态方法可以直接使用class::… 来调用,而非静态方法需要满足一定限制条件才能使用class::.. 的方法调用,如之前所述
来自:http://www.jb51.net/article/29717.htm
这时我们不得不重新初始化一个数据库句柄,试想多个应用场景下,这样的代码是多么可怕啊?!
有些朋友或许会说,我也可以不这样做啊,我直接利用global关键字不就可以了吗?的确,global可以解决问题,也起到了单例模式的作用,但是 OOP中,我们拒绝这样来编写代码,因为global存在安全隐患,请参考相关书籍,同时单例模式恰恰是对全局变量的一种改进,避免了那些存储唯一实例的 全局变量污染命名空间
global $db; //OOP中,我们不提倡这样编写代码
使用单例模式编码
如有的KO框架里写的读取配置文件:
阅读全文
为何都这样写单例模式?层层分析:
http://www.cnblogs.com/hongfei/archive/2012/07/07/2580994.html
——————————————————————————————————————
上面Url里提到各种调用调不了,出问题的一个小小总结如下,也有总结不对的,说是静态函数被类调用不需要执行析构函数是不对的,执行了,但没有创建对象是真:
在php中,访问类的方法/变量有两种方法:
1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。
2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
A. 如果是变量,需要该变量可访问。
B. 如果是方法,除了该方法可访问外,还需要满足:
b1) 如果是静态方法,没有特殊条件;
b2) 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
然后我们再看一下使用$object->… 和使用class::… 都有什么区别:
1. 使用$object->… ,需要执行构造函数创建对象;
2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。
然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
差异还是显然存在的,如下:
1. 静态变量
静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。
2. 静态方法
静态方法可以直接使用class::… 来调用,而非静态方法需要满足一定限制条件才能使用class::.. 的方法调用,如之前所述
来自:http://www.jb51.net/article/29717.htm
这时我们不得不重新初始化一个数据库句柄,试想多个应用场景下,这样的代码是多么可怕啊?!
有些朋友或许会说,我也可以不这样做啊,我直接利用global关键字不就可以了吗?的确,global可以解决问题,也起到了单例模式的作用,但是 OOP中,我们拒绝这样来编写代码,因为global存在安全隐患,请参考相关书籍,同时单例模式恰恰是对全局变量的一种改进,避免了那些存储唯一实例的 全局变量污染命名空间
global $db; //OOP中,我们不提倡这样编写代码
使用单例模式编码
如有的KO框架里写的读取配置文件:
阅读全文
zend studio常见问题解答
Php/Js/Shell/Go jackxiang 2013-3-18 15:59
php 获取拼音首字母的函数
Php/Js/Shell/Go jackxiang 2013-3-13 10:57
http://levi.cg.am/?p=930
http://www.mb5u.com/biancheng/php/php_94026.html
http://www.phper.org.cn/?post=64
http://hi.baidu.com/seatle888/item/db73f4db0a084919d78ed099
http://justcoding.iteye.com/blog/602494
http://www.mb5u.com/biancheng/php/php_94026.html
http://www.phper.org.cn/?post=64
http://hi.baidu.com/seatle888/item/db73f4db0a084919d78ed099
http://justcoding.iteye.com/blog/602494
背景:php做cli模式(也就是后台终端运行时),通过ps aux|grep php时出现的都是如php的文件名的进程,于是在php5.5里加入了类似windows'下的服务名来进行标识。
PHP5.5新增cli_set_process_title/cli_get_process_title, 这样一来, 大家可以给后台运行脚本起一个有意义的名字了. https://wiki.php.net/rfc/cli_process_title
PHP5.5新增cli_set_process_title/cli_get_process_title, 这样一来, 大家可以给后台运行脚本起一个有意义的名字了. https://wiki.php.net/rfc/cli_process_title
PHP面向切面编程,热部署真是个银弹?
Php/Js/Shell/Go jackxiang 2013-3-9 12:12
[易*]韩天峰(*********) 17:34:07
http://pecl.php.net/package/event
event扩展
[易*]韩天峰(*********) 17:51:42
http://pecl.php.net/package/AOP
PHP AOP编程扩展
twinhuang-广平(*********) 17:56:11
aop还是挺不错的,可以做很多有趣的事
Jack-回忆未来(*********) 17:57:50
AOP是什么意思?
面向切面编程
maxiezhang-qz***(*********) 17:58:37
是指不改变原来程序结构,可以强势插入代码么?
令狐雨辰(*********) 2013/3/8 下午 18:22:15
https://github.com/AOP-PHP/AOP
就刚讨论的这个呀
PHP-干不明白(*********) 2013/3/8 下午 18:22:33
o
Sango(*********) 2013/3/8 下午 18:22:49
热部署真是个银弹啊
令狐雨辰(*********) 2013/3/8 下午 18:25:08
这个现在还有些BUG
https://github.com/AOP-PHP/AOP/issues
等个稳定版,直接用上。
Rango(*********) 2013/3/8 下午 18:25:15
统计执行时间也可以用AOP,before前记录一个时间,after再记录一个
令狐雨辰(*********) 2013/3/8 下午 18:25:50
嗯是的。总之确实是很有用。
Sango(*********) 2013/3/8 下午 18:22:00
在php热部署的能力下,加上xdebug,这玩意要逆天了
http://pecl.php.net/package/event
event扩展
[易*]韩天峰(*********) 17:51:42
http://pecl.php.net/package/AOP
PHP AOP编程扩展
twinhuang-广平(*********) 17:56:11
aop还是挺不错的,可以做很多有趣的事
Jack-回忆未来(*********) 17:57:50
AOP是什么意思?
面向切面编程
maxiezhang-qz***(*********) 17:58:37
是指不改变原来程序结构,可以强势插入代码么?
令狐雨辰(*********) 2013/3/8 下午 18:22:15
https://github.com/AOP-PHP/AOP
就刚讨论的这个呀
PHP-干不明白(*********) 2013/3/8 下午 18:22:33
o
Sango(*********) 2013/3/8 下午 18:22:49
热部署真是个银弹啊
令狐雨辰(*********) 2013/3/8 下午 18:25:08
这个现在还有些BUG
https://github.com/AOP-PHP/AOP/issues
等个稳定版,直接用上。
Rango(*********) 2013/3/8 下午 18:25:15
统计执行时间也可以用AOP,before前记录一个时间,after再记录一个
令狐雨辰(*********) 2013/3/8 下午 18:25:50
嗯是的。总之确实是很有用。
Sango(*********) 2013/3/8 下午 18:22:00
在php热部署的能力下,加上xdebug,这玩意要逆天了
[经常搞忘]相对路径、根路径、绝对路径的区别?
Php/Js/Shell/Go jackxiang 2013-3-4 10:50
背景:一群里的兄弟说在Dreamweaver里能看到图片,但是放在smarty下的网站下就不行。
于是,我初步判断是根目录的图片路径不对造成的,如下CSS样式:
问题:
问大家个事啊,为什么按钮美化,<input name="add_msg_sub" type="button" value="" style="width:38px; height:17px; background-image:url(img/pub_sub.png);"/> dw能看效果的,但是放在smarty下的网站下就不行。
原因:Dw里的页面是根据里面的模板Html的相对路径进行展示(包括浏览器直接打开这个Html页面),一旦引入了php的smarty模板后,访问这个页面是从view.php里进行的,配置如下:
所以,在访问这个模板对应的PHP时,其实就是相对于这个view.php的路径进行配置Html页面了,如上面的:
也是相对这个view.php的路径进行定义这个模板的路径的,为此得出,这个图片的路径之所以没有出现是因为路径不对,图片是放在templates目录下的,而这个同级的目录里有view.php,于是这个图片得加上templates才行,如下:templates/img/pub_sub.png ,这样就Ok了。
对于如果在templates里的最前面加上斜杠的呢?如:templates/img/pub_sub.png ,这样的话有可能会出现问题,如我们的网站没有建立在根目录下的情况会出现下面的问题:
图片路径前面有斜杠(注意:网站localhost的根,不是当前文件作为根。):
background-image:url(/templates/img/pub_sub.png);
访问的是:
http://localhost/templates/img/pub_sub.png
斜线开头表示是从根目录开始。
图片路径前无斜杠(这个就对了):
background-image:url(templates/img/pub_sub.png);
访问的是:
http://localhost/study/templates/img/pub_sub.png
这才是正确的。
备注:一般一个网站的根下面就是应该放上template,下面放图片css等,所以,常常我们也是写成/templates/img/pub_sub.png的居多。
————————————Add Time:2014-07-04————————————————
用css里的图片作为相对路径的办法:
/data/htdocs/ishow_devel_static/css/title_css/green.css
想把这个路径的图给拿展示:
/data/htdocs/ishow_devel_static/css/shouye/titbggreen_140320.jpg
样式如下:
.moduleblack{background:url(../shouye/titbggreen_140320.jpg) repeat-x left top;}
上面使用了相对路径,So,相对路径好,可以任意挪动,都能访问。
———群里的兄弟补课学习———
假设一个文件的url是这样的:
http://xxx.com/index/a.html
在a.html中使用路径引用
/等同于http://xxx.com/ /是web虚拟目录的根
../等同于http://xxx.com/ ../是当前文件的上一级目录
./等同于http://xxx.com/index/ ./是当前文件目录
————————————————————————————
【活跃】[武汉]中庸
假设一个文件的url是这样的:
http://xxx.com/index/a.html
在a.html中使用路径引用
/等同于http://xxx.com/
../等同于http://xxx.com/
./等同于http://xxx.com/index/
【吐槽】[北京]向东-Jack 14/7/4 星期五 下午 05:41:14
中庸的示例挺靠谱的。
【吐槽】[北京]向东-Jack 14/7/4 星期五 下午 05:41:34
那css里的背景图片相对路径是相对调用的html来讲的么?
【活跃】[武汉]中庸
14/7/4 星期五 下午 05:42:00
/是web虚拟目录的根
./是当前文件目录
../是当前文件的上一级目录
理解了这个你自己再慢慢琢磨
[北京]向东-Jack(372647693) 17:41:14
中庸的示例挺靠谱的。
那css里的背景图片相对路径是相对调用的html来讲的么?
不一定,如果css和html同一个文件或者同一个目录,可以这么理解,如果css文件是单独的目录,那么就要以css文件所在的目录为基准
于是,我初步判断是根目录的图片路径不对造成的,如下CSS样式:
问题:
问大家个事啊,为什么按钮美化,<input name="add_msg_sub" type="button" value="" style="width:38px; height:17px; background-image:url(img/pub_sub.png);"/> dw能看效果的,但是放在smarty下的网站下就不行。
原因:Dw里的页面是根据里面的模板Html的相对路径进行展示(包括浏览器直接打开这个Html页面),一旦引入了php的smarty模板后,访问这个页面是从view.php里进行的,配置如下:
所以,在访问这个模板对应的PHP时,其实就是相对于这个view.php的路径进行配置Html页面了,如上面的:
也是相对这个view.php的路径进行定义这个模板的路径的,为此得出,这个图片的路径之所以没有出现是因为路径不对,图片是放在templates目录下的,而这个同级的目录里有view.php,于是这个图片得加上templates才行,如下:templates/img/pub_sub.png ,这样就Ok了。
对于如果在templates里的最前面加上斜杠的呢?如:templates/img/pub_sub.png ,这样的话有可能会出现问题,如我们的网站没有建立在根目录下的情况会出现下面的问题:
图片路径前面有斜杠(注意:网站localhost的根,不是当前文件作为根。):
background-image:url(/templates/img/pub_sub.png);
访问的是:
http://localhost/templates/img/pub_sub.png
斜线开头表示是从根目录开始。
图片路径前无斜杠(这个就对了):
background-image:url(templates/img/pub_sub.png);
访问的是:
http://localhost/study/templates/img/pub_sub.png
这才是正确的。
备注:一般一个网站的根下面就是应该放上template,下面放图片css等,所以,常常我们也是写成/templates/img/pub_sub.png的居多。
————————————Add Time:2014-07-04————————————————
用css里的图片作为相对路径的办法:
/data/htdocs/ishow_devel_static/css/title_css/green.css
想把这个路径的图给拿展示:
/data/htdocs/ishow_devel_static/css/shouye/titbggreen_140320.jpg
样式如下:
.moduleblack{background:url(../shouye/titbggreen_140320.jpg) repeat-x left top;}
上面使用了相对路径,So,相对路径好,可以任意挪动,都能访问。
———群里的兄弟补课学习———
假设一个文件的url是这样的:
http://xxx.com/index/a.html
在a.html中使用路径引用
/等同于http://xxx.com/ /是web虚拟目录的根
../等同于http://xxx.com/ ../是当前文件的上一级目录
./等同于http://xxx.com/index/ ./是当前文件目录
————————————————————————————
【活跃】[武汉]中庸
假设一个文件的url是这样的:
http://xxx.com/index/a.html
在a.html中使用路径引用
/等同于http://xxx.com/
../等同于http://xxx.com/
./等同于http://xxx.com/index/
【吐槽】[北京]向东-Jack 14/7/4 星期五 下午 05:41:14
中庸的示例挺靠谱的。
【吐槽】[北京]向东-Jack 14/7/4 星期五 下午 05:41:34
那css里的背景图片相对路径是相对调用的html来讲的么?
【活跃】[武汉]中庸
14/7/4 星期五 下午 05:42:00
/是web虚拟目录的根
./是当前文件目录
../是当前文件的上一级目录
理解了这个你自己再慢慢琢磨
[北京]向东-Jack(372647693) 17:41:14
中庸的示例挺靠谱的。
那css里的背景图片相对路径是相对调用的html来讲的么?
不一定,如果css和html同一个文件或者同一个目录,可以这么理解,如果css文件是单独的目录,那么就要以css文件所在的目录为基准