[实践OK]Call-time pass-by-reference has been deprecated解决方法,解决 PHP Fatal error: Call-time pass-by-reference has been removed。
Php/Js/Shell/Go jackxiang 2013-1-7 17:14
今天调试遇到一个错误::Call-time pass-by-reference has been deprecated...
查了老一会儿,在网上找了下答案,于是找到了并修改了一下php.ini就好了,如下:
Warning: Call-time pass-by-reference has been deprecated解决方法
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On
从php手册中可以找到:
allow_call_time_pass_reference boolean
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
当allow_call_time_pass_reference=Off时
要想通过引用来传递参数$b,程序可改为
若是在PHP,用户自定义函数中传入引用参数,例如:
你可能须要开端该设置。
Linux下是这样的报错:Call-time pass-by-reference has been removed
解决 PHP Fatal error: Call-time pass-by-reference has been removed
如果这样使用函数(或者类)的话,会产生一个 PHP Fatal error:
foo(&$var);
实际上,这样用法在php5.3中就会有提示,只是之前的仅仅会提示Deprecated而已。
php.ini中allow_call_time_pass_reference参数的意思
从php手册中可以找到:allow_call_time_pass_reference boolean,在PHP5.3里是一个警告可以用:
来去掉,但是在PHP5.4里就成了一个错误,得修改,如下:
参考:http://www.azuis.me/blog/archives/175
查了老一会儿,在网上找了下答案,于是找到了并修改了一下php.ini就好了,如下:
Warning: Call-time pass-by-reference has been deprecated解决方法
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On
从php手册中可以找到:
allow_call_time_pass_reference boolean
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
当allow_call_time_pass_reference=Off时
要想通过引用来传递参数$b,程序可改为
若是在PHP,用户自定义函数中传入引用参数,例如:
你可能须要开端该设置。
Linux下是这样的报错:Call-time pass-by-reference has been removed
解决 PHP Fatal error: Call-time pass-by-reference has been removed
如果这样使用函数(或者类)的话,会产生一个 PHP Fatal error:
foo(&$var);
实际上,这样用法在php5.3中就会有提示,只是之前的仅仅会提示Deprecated而已。
php.ini中allow_call_time_pass_reference参数的意思
从php手册中可以找到:allow_call_time_pass_reference boolean,在PHP5.3里是一个警告可以用:
来去掉,但是在PHP5.4里就成了一个错误,得修改,如下:
参考:http://www.azuis.me/blog/archives/175
[容易混淆]PHP static静态变量,PHP static局部静态变量和全局静态变量总结。附上类里的static及用self读取的一个结论。
Php/Js/Shell/Go jackxiang 2013-1-6 21:31
背景:看到一个redis的代码用php写的,用到master和slave结构,用到类的函数里的静态变量,一个master里和slave里都用同一个static $_cache;觉得奇怪了,于是查一下这样用它们之间有关联么?一查没有关联(两个变量一样感觉有关联),这就是静态变量的用法,有点意思。
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
参考:http://www.nowamagic.net/php/php_StaticVariable.php
一)PHP static静态变量只存在函数里的一个实践情况及应用、实践、总结:
学习PHP静态变量的基础:
输出:01234
也就是每次用:static $a = 0;时,在第二次无效了。
调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?做如下测试:
结果:
代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。
第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。
第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。
至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。
原文来源:
http://www.cnblogs.com/darkbluever/archive/2011/07/18/2109533.html
PHP static局部静态变量和全局静态变量总结:
静态局部变量的特点:
1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
---------- 调试PHP ----------
6
7
8
Output completed (0 sec consumed) - Normal Termination
关于静态全局变量:
所以静态全局变量使用并不多。
AddTime:2017/12/11,标题:【php】php函数中static静态变量的使用
用法:
其实函数中的静态变量和类中的静态变量的用法大同小异
function myFunc(){
//函数内的静态变量只作用于此函数
static $myVariable='jianzhong5137';
}
实例测试:funstatic.php
php funstatic.php
1
2
3
4
5
6
7
8
9
10
1
1
1
1
1
1
1
1
1
1
代码来自:http://blog.csdn.net/yanhui_wei/article/details/8246096
二)附上类里的static及用self读取的一个结论:
结论:
(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
参考:http://www.nowamagic.net/php/php_StaticVariable.php
一)PHP static静态变量只存在函数里的一个实践情况及应用、实践、总结:
学习PHP静态变量的基础:
输出:01234
也就是每次用:static $a = 0;时,在第二次无效了。
调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?做如下测试:
结果:
代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。
第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。
第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。
至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。
原文来源:
http://www.cnblogs.com/darkbluever/archive/2011/07/18/2109533.html
PHP static局部静态变量和全局静态变量总结:
静态局部变量的特点:
1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
---------- 调试PHP ----------
6
7
8
Output completed (0 sec consumed) - Normal Termination
关于静态全局变量:
所以静态全局变量使用并不多。
AddTime:2017/12/11,标题:【php】php函数中static静态变量的使用
用法:
其实函数中的静态变量和类中的静态变量的用法大同小异
function myFunc(){
//函数内的静态变量只作用于此函数
static $myVariable='jianzhong5137';
}
实例测试:funstatic.php
php funstatic.php
1
2
3
4
5
6
7
8
9
10
1
1
1
1
1
1
1
1
1
1
代码来自:http://blog.csdn.net/yanhui_wei/article/details/8246096
二)附上类里的static及用self读取的一个结论:
结论:
(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;
[不错的tail]让Windows也拥有tail的功能,WindowsTail。
Unix/LinuxC技术 jackxiang 2013-1-4 11:32
背景:
Mysql的sql日志如下配置,前台点链接触发SQL,后台用tail去看查询SQL日志:
找windows下的tail过程及最后找到较好win下的tail软件:
有很多的tail,有的可以终端运行,但是一直按回车时,文字不上移,有的呢,则是xp自动提供的,如:http://support.drugwebcn.com/knowledge/index.php?option=com_content&task=view&id=51&Itemid=43
这些都不怎么样,有的建议安一个cygwin ,这些都太麻烦,我找了一个别人写的界面软件,觉得不错,于是作下对Mysql的sql作下tail,所以,推荐下面这个tail软件,可以有编码选项,查找,清屏,有托盘等便捷,关键是能用回车让已经有的文字上移,鼠标选择多行,不是用alt+鼠标选择:
http://www.duote.com/soft/30978.html
DownLoad Url:
WindowsTail:
http://sourceforge.net/projects/windowstail/files/?source=navbar
上面这个软年看来做得确实不错,如下:
王*(17540***) 16:39:02
党哥,感谢你啊,前两天在网上搜windows下的tail工具,找了好多找不到好的,结果突然有个向东博客justwinit,给出了解决方案,原来是就在我们身边的党哥指明了方向。
王*(17540***) 16:45:47
真的很不错,我搜索windows下tail,党哥就出来帮助我了。
关键是要带回车的
--------------------------------------------------------------------------------------------------
Another tail :
Tail4Win : 这个免费30天,要钱。这个的终端tail做得不错,界面收钱就有点...了吧。
http://www.withdata.com/tail4win_news.html
最新版本的Tail4Win可以实现在cmd下和linux下的tail一样,按回车可以把已经tail的文字上移,也不错,界面的好像没有这个功能。
Egg:
D:\wamp\bin\apache\apache2.2.22\logs>tail -f w.xiyou.cntv.cn-access.log
---
这个也是tail,不怎么样,除开能tail多个文件外,没有回车文字上移的linux特性,感觉不怎么的:
最近因为开发php程序, 虽然有vmware和centos server, 但是还是喜欢windows 下的apache+php+mysql, 无他, 只是因为开发和测试方便, 但是windows下有个非常不方便的地方是, 没有tail去查看log, 本人又不希望为了一个tail命令去装一个庞大的cygwin.
今天在网上搜了一下, sourceforge上有个tail工具不错, 推荐给大家
1. 首先当然是tail功能了, 可以tail多个文件, 如access.log, error.log
2. 关键字高亮功能.
3. workspace管理.
4. 绿色, 免安装, 只有164k
推荐一下, 下载地址
http://sourceforge.net/projects/tailforwin32
这个个人写的tail还成,有一个问题(最后一行保存后出来来):
http://users.telenet.be/jbosman/tail.zip
Mysql的sql日志如下配置,前台点链接触发SQL,后台用tail去看查询SQL日志:
找windows下的tail过程及最后找到较好win下的tail软件:
有很多的tail,有的可以终端运行,但是一直按回车时,文字不上移,有的呢,则是xp自动提供的,如:http://support.drugwebcn.com/knowledge/index.php?option=com_content&task=view&id=51&Itemid=43
这些都不怎么样,有的建议安一个cygwin ,这些都太麻烦,我找了一个别人写的界面软件,觉得不错,于是作下对Mysql的sql作下tail,所以,推荐下面这个tail软件,可以有编码选项,查找,清屏,有托盘等便捷,关键是能用回车让已经有的文字上移,鼠标选择多行,不是用alt+鼠标选择:
http://www.duote.com/soft/30978.html
DownLoad Url:
WindowsTail:
http://sourceforge.net/projects/windowstail/files/?source=navbar
上面这个软年看来做得确实不错,如下:
王*(17540***) 16:39:02
党哥,感谢你啊,前两天在网上搜windows下的tail工具,找了好多找不到好的,结果突然有个向东博客justwinit,给出了解决方案,原来是就在我们身边的党哥指明了方向。
王*(17540***) 16:45:47
真的很不错,我搜索windows下tail,党哥就出来帮助我了。
关键是要带回车的
--------------------------------------------------------------------------------------------------
Another tail :
Tail4Win : 这个免费30天,要钱。这个的终端tail做得不错,界面收钱就有点...了吧。
http://www.withdata.com/tail4win_news.html
最新版本的Tail4Win可以实现在cmd下和linux下的tail一样,按回车可以把已经tail的文字上移,也不错,界面的好像没有这个功能。
Egg:
D:\wamp\bin\apache\apache2.2.22\logs>tail -f w.xiyou.cntv.cn-access.log
---
这个也是tail,不怎么样,除开能tail多个文件外,没有回车文字上移的linux特性,感觉不怎么的:
最近因为开发php程序, 虽然有vmware和centos server, 但是还是喜欢windows 下的apache+php+mysql, 无他, 只是因为开发和测试方便, 但是windows下有个非常不方便的地方是, 没有tail去查看log, 本人又不希望为了一个tail命令去装一个庞大的cygwin.
今天在网上搜了一下, sourceforge上有个tail工具不错, 推荐给大家
1. 首先当然是tail功能了, 可以tail多个文件, 如access.log, error.log
2. 关键字高亮功能.
3. workspace管理.
4. 绿色, 免安装, 只有164k
推荐一下, 下载地址
http://sourceforge.net/projects/tailforwin32
这个个人写的tail还成,有一个问题(最后一行保存后出来来):
http://users.telenet.be/jbosman/tail.zip
Linux:启动Memcache的服务器端的命令为:
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
vi /etc/init.d/lnmp
直接绑定到某个网卡IP上:
-l <ip_addr> 监听的服务器IP地址,如果有多个地址的话,使用逗号分隔,格式可以为“IP地址:端口号”,例如:-l 指定192.168.0.184:19830,192.168.0.195:13542;端口号也可以通过-p选项指定
Windows:
到memcached根目录
1、安装
memcached.exe –d install
2、启动
memcached.exe -d start
注意,要先install才行,实践如下:
后运行:services.msc 后可以看到memcache在服务里有这个了:
"D:\wamp\bin\memcached\memcached.exe" -d runservice (注册表里也是这个:在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 下面找到一个 ImagePath 的字符串项,正好是服务的执行路径的字符串,双击该串,在后面加入 -l 192.168.1.135 -m 45 -p 12345 (访问ip为:192.168.1.135 使用45M内存,12345为端口),再启动服务。 ),启动类型,自动。
如果要修改端口,听说得到注册表里修改:
D:\wamp\bin\memcached\memcached.exe" -d runservice -l 127.0.0.1-m 45 -p 12345 -c 2048
此时memcached已经注册为开机启动服务
完成安装。
memcache启动后成功于否的测试:
现在来试试是否可以连接:
使用方法为“telnet ip 端口号”,登录后使用“stats”命令
cmd下
telnet 192.168.1.135 12345(注意:这里只能用IP 不能用 localhost 或127.0.0.1)
然后使用:stats命令可以看到memcached的使用情况如下:
我的修改情况为:
记得打开Host,去掉前面的#号:
127.0.0.1 localhost
参考:
http://zhaoshijie.iteye.com/blog/1135608
http://bardo.iteye.com/blog/954770
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
vi /etc/init.d/lnmp
直接绑定到某个网卡IP上:
-l <ip_addr> 监听的服务器IP地址,如果有多个地址的话,使用逗号分隔,格式可以为“IP地址:端口号”,例如:-l 指定192.168.0.184:19830,192.168.0.195:13542;端口号也可以通过-p选项指定
Windows:
到memcached根目录
1、安装
memcached.exe –d install
2、启动
memcached.exe -d start
注意,要先install才行,实践如下:
后运行:services.msc 后可以看到memcache在服务里有这个了:
"D:\wamp\bin\memcached\memcached.exe" -d runservice (注册表里也是这个:在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 下面找到一个 ImagePath 的字符串项,正好是服务的执行路径的字符串,双击该串,在后面加入 -l 192.168.1.135 -m 45 -p 12345 (访问ip为:192.168.1.135 使用45M内存,12345为端口),再启动服务。 ),启动类型,自动。
如果要修改端口,听说得到注册表里修改:
D:\wamp\bin\memcached\memcached.exe" -d runservice -l 127.0.0.1-m 45 -p 12345 -c 2048
此时memcached已经注册为开机启动服务
完成安装。
memcache启动后成功于否的测试:
现在来试试是否可以连接:
使用方法为“telnet ip 端口号”,登录后使用“stats”命令
cmd下
telnet 192.168.1.135 12345(注意:这里只能用IP 不能用 localhost 或127.0.0.1)
然后使用:stats命令可以看到memcached的使用情况如下:
我的修改情况为:
记得打开Host,去掉前面的#号:
127.0.0.1 localhost
参考:
http://zhaoshijie.iteye.com/blog/1135608
http://bardo.iteye.com/blog/954770
# For security reasons, Option followsymlinks cannot be overridden.
#Options -Indexes +FollowSymLinks
Options -Indexes +SymLinksIfOwnerMatch
據說 SymLinksIfOwnerMatch 比 FollowSymLinks 更安全
但 SymLinksIfOwnerMatch 效能較差
SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
阅读全文
#Options -Indexes +FollowSymLinks
Options -Indexes +SymLinksIfOwnerMatch
據說 SymLinksIfOwnerMatch 比 FollowSymLinks 更安全
但 SymLinksIfOwnerMatch 效能較差
SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
阅读全文
现在很多的网站都在传输过程中都没有进行加密,只是数据库进行了加密,而这样的话,别人通过嗅探的话,还是可以嗅探到你的明文密码。
前几天跟朋友一起讨论关于传输过程加密的问题,http本身的设计就是无状态。现在很多的网站都在传输过程中都没有进行加密,只是数据库进行了加密,而这样的话,别人通过嗅探的话,还是可以嗅探到你的明文密码。
比如:你的一台机器ip是. 23.22.2.3另一台机器是23.22.2.4,在同一个网关下23.22.2.3的这是一个网站的服务器,而我就可以用23.22.2.4这个服务器来嗅弹,23.22.2.3 80端口的信息 登录的用户名,等等这些信息。并且嗅探到的还是明文,先前我测试了dz dz也在传输过程中没有加密,他不过就是数据库加密比较另类一点,难解密!也就是用md5+salt来加密的。
也许有人会说,为何不用https加密呢?
1、https的是收费的。
2、https也可以突破嗅探 至于怎么样突破 这里的就不在多说。
3、用https之后网页会很卡,现在我们讨论的并不是数据库加密,而是传输过程的加密, 先前我自己想到的方法是 在客户端js加密 而想到这个办法后 有出现了种种的问题 问题如下: js的方法别人在网上已经说过。
1.js加密的问题是,不论单向双向,加密方式没办法隐藏,会被人家看到。
2.例如我密码是 123abc,输入表单后发送,js给加密成了 乱码。 发给服务端再加密下和数据库比对。问题来了,如果入侵者截获到js加密后的乱码,他可以禁用js,然后直接把乱码输入表单后发送,效果和直接得到用户密码发生一. js加密这里的作用除了黑客不知道密码是啥外,其他都没用,乱码也可以登录。
js的加密的直接pass掉。这里根本行不通!
跟朋友又讨论下 想到了其他的办法 捆绑验证码 从而进行加密。
流程:用户输入密码->js提交服务器md5(md5(pass)+验证码)->服务器查询出pass然后md5(pass+验证码)『数据库里pass=md5(pass)』->删除验证码的session
这个方法笔者也测试了,确实可行!发出捆绑验证码的,从而进行传输加密的代码,打包下载。
来自:http://security.ctocio.com.cn/26/12418526.shtml
前几天跟朋友一起讨论关于传输过程加密的问题,http本身的设计就是无状态。现在很多的网站都在传输过程中都没有进行加密,只是数据库进行了加密,而这样的话,别人通过嗅探的话,还是可以嗅探到你的明文密码。
比如:你的一台机器ip是. 23.22.2.3另一台机器是23.22.2.4,在同一个网关下23.22.2.3的这是一个网站的服务器,而我就可以用23.22.2.4这个服务器来嗅弹,23.22.2.3 80端口的信息 登录的用户名,等等这些信息。并且嗅探到的还是明文,先前我测试了dz dz也在传输过程中没有加密,他不过就是数据库加密比较另类一点,难解密!也就是用md5+salt来加密的。
也许有人会说,为何不用https加密呢?
1、https的是收费的。
2、https也可以突破嗅探 至于怎么样突破 这里的就不在多说。
3、用https之后网页会很卡,现在我们讨论的并不是数据库加密,而是传输过程的加密, 先前我自己想到的方法是 在客户端js加密 而想到这个办法后 有出现了种种的问题 问题如下: js的方法别人在网上已经说过。
1.js加密的问题是,不论单向双向,加密方式没办法隐藏,会被人家看到。
2.例如我密码是 123abc,输入表单后发送,js给加密成了 乱码。 发给服务端再加密下和数据库比对。问题来了,如果入侵者截获到js加密后的乱码,他可以禁用js,然后直接把乱码输入表单后发送,效果和直接得到用户密码发生一. js加密这里的作用除了黑客不知道密码是啥外,其他都没用,乱码也可以登录。
js的加密的直接pass掉。这里根本行不通!
跟朋友又讨论下 想到了其他的办法 捆绑验证码 从而进行加密。
流程:用户输入密码->js提交服务器md5(md5(pass)+验证码)->服务器查询出pass然后md5(pass+验证码)『数据库里pass=md5(pass)』->删除验证码的session
这个方法笔者也测试了,确实可行!发出捆绑验证码的,从而进行传输加密的代码,打包下载。
来自:http://security.ctocio.com.cn/26/12418526.shtml
屌丝逆袭高富帅!!!!
阅读全文
阅读全文
选择 CentOS 还是 Scientific Linux---CentOs啦。
Unix/LinuxC技术 jackxiang 2012-12-25 16:01
最近对 CentOS 的批评很多(作者好几次都想丢担子不干了,呵呵),如 5.3 的迟迟推出,补丁的推出缓慢等等。另一个 RHEL 再编译版本 Scientific Linux 得到了许多人的推崇,排在了 CentOS 的前面。
Scientific Linux 是由费米实验室(隶属于美国能源部)、欧洲核子研究中心以及世界各地的领先实验室和大学共同维护的。相比 CentOS,Scientific Linux 有着稳定的支持,基本上不会出现因为某个开发人员的原因导致发行版本突然消失的可能。在发行版本的推出上以及补丁的更新,Scientific Linux 比 CentOS 的响应要快的多,其标准是在 RHEL 发布补丁 48 小时内发布补丁。
另外,Scientific Linux 不是专门用于专门的 Scientific 研究的,也没有专门的 science application,之所以有着 scientific 的名字,是因为其最初只是 Fermilab 和 CERN 两个实验室使用,后来才慢慢扩大。
Scientific Linux 是由费米实验室(隶属于美国能源部)、欧洲核子研究中心以及世界各地的领先实验室和大学共同维护的。相比 CentOS,Scientific Linux 有着稳定的支持,基本上不会出现因为某个开发人员的原因导致发行版本突然消失的可能。在发行版本的推出上以及补丁的更新,Scientific Linux 比 CentOS 的响应要快的多,其标准是在 RHEL 发布补丁 48 小时内发布补丁。
另外,Scientific Linux 不是专门用于专门的 Scientific 研究的,也没有专门的 science application,之所以有着 scientific 的名字,是因为其最初只是 Fermilab 和 CERN 两个实验室使用,后来才慢慢扩大。
[框架精髓]PSR-0 Autoloading Standard 自动加载机制的规范,及接合kohana的自动加载逻辑分析。
Php/Js/Shell/Go jackxiang 2012-12-25 14:43
背景:关于自动加载类文件是PHP这种脚本在程序大后为了按需要加载时所需要的一种机制,很有必要。
将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。
以上一行摘自:http://blog.csdn.net/panpan639944806/article/details/23192267
/tmp/autoload/autoload.php
/tmp/autoload/aClass.php
/tmp/autoload/bClass.php
运行一下,看一下在加载前和后引入的文件是否一样?不一样有新文件:
[root@test autoload]# php autoload.php
Array
(
[0] => /tmp/autoload/autoload.php
)
.:/opt/2012-01-30/php-5.3.10
aClass loaded...bClass loaded...Array
(
[0] => /tmp/autoload/autoload.php
[1] => /tmp/autoload/aClass.php
[2] => /tmp/autoload/bClass.php
)
上面是一个用法,第二个是把__autoload 这个函数都给重定义了:
spl_autoload_register(array('Ko', 'autoload'));//这要就由function __autoload($className)变成了:function autoload($className)
————————————————————结合框架来说这个autoload的事情—————————————————————
/**
* Enable the Ko auto-loader.
*
* @see http://php.net/spl_autoload_register
*/
spl_autoload_register(array('Ko', 'autoload'));
----于是了解到如下自动加载机制:
英文原文:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
以下内容描述了符合自动载入程序互操作性所必须遵守的强制性规范。
强制要求
一个完整的命名空间 (namespace) 和类 (class) 必须使用以下结构: \<Vendor Name>\(<Namespace>\)*<Class Name>
每个命名空间 (namespace) 必须使用供应商名称 (“Vendor Name”) 做为顶层命名空间(top-level namespace).
每个命名空间 (namespace) 的子命名空间 (sub-namespace) 数量不限.
程序从文件系统载入的时候,每个命名空间 (namespace) 的分隔符 (separator) 将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR).
在类名 (CLASS NAME) 中的下划线 ( _) 也将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR) , 在命名空间 (namespace) 中的下划线 (_)不做替换.
从文件系统载入的合格的命名空间 (namespace) 和 类 (class) 必须以 .php 结尾.
供应商名称 (vendor names), 命名空间 (namespaces) 及类名 (class names) 可以使用任意大小写字母的组合.
示例
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
在命名空间(Namespaces)和类名(Class Names)中的下划线
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
The standards we set here should be the lowest common denominator for painless autoloader interoperability. You can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.
实现示例
下面的示例函数演示了遵循上述规范的自动加载过程.
SplClassLoader 实现
如果你的程序遵守上面的自动载入程序互操作性规范,可以使用下面的SplClassLoader实现来加载你的类 (classes) . 这也是 PHP 5.3 推荐的遵循本规范的类 (class) 加载方式.
来自:http://www.dunban.com/?p=30
http://gist.github.com/221634
最后参考:
http://www.jb51.net/article/23956.htm
http://blog.csdn.net/hguisu/article/details/7463333
http://www.php.net/manual/zh/function.autoload.php
http://blog.sina.com.cn/s/blog_6915bcb101017p2x.html
http://www.php100.com/html/php/lei/2013/0905/5267.html
YII框架里,一般各种框架都有这样的用法,特别是PHP5的框架:
spl_autoload_register(array('Ko', 'autoload'));
bool spl_autoload_register(array(‘class’,'static_function’))
参数为数组,数组中第一个值为类名,第二个值为方法名,且必须为静态方法。
例:
输出:
---------- 调试PHP ----------
open\OpenAPIModel.php
models\open\OpenAPIModel.php
输出完成 (耗时 0 秒) - 正常终止
在实际运用中文件名里是不能有Model的字符的,通过对findFile的Debug一下得到:
D:\www\iseeyoo\trunk\codes\application\models\open\adminchannellink.php
class open_AdminChannelLinkModel extends Model //类名包含下划线和Model(如果是Service也一样:class OpenChannelService extends baseService,文件名:\application\services\openchannel.php也不能包含Service字符。),这个规则是:文件命名里不能有Model。(这个得注意下)
{
}
//直接在Core里Debug下,得出上面的规律。
public static function findFile ($dir, $file, $ext = 'php')
{
if($file == "open_adminchannellink"){
file_put_contents("d:/wamp/www/aaa.txt","ModelfileDiR=".$dir."\n",FILE_APPEND);
file_put_contents("d:/wamp/www/aaa.txt","Modelfilepath=".$path."\n",FILE_APPEND);
}
打印出:
ModelfilePosition=open_adminchannellink
ModelfileDiR=models
Modelfilepath=models\open\adminchannellink.php
kohana 这个也是支持contrller直接接调用Module层的,实践OK的,理论上就是通过Autoload调用module,Service(文件类名有不同的标记)的类名(这个是有规范的上面有描述),进而拼接出大体位置,让findfile去找到这个文件:
application\controllers\open\index.php
http://domain.com/open/index/index
这一看是contrller下面有一个open(经过路由配置到了open目录的),后有一个index.php的文件里有一个index函数,如果想直接获取这个uri的内容,可以通过这个函数实现,如下:
这个forward吧,其实就相当于YII里的路由控制器访问index目录下的index控制器下面的index的action方法,路由相关知识:
什么是路由:
在框架里边我们通过路由获得控制器和方法,
我们有了控制器的方法,就可以进一步与视图或模型进行交互,
http://网址/index.php?r=控制器/方法
http://网址/index.php?r=user/cc
===============================================================
一般还是有一个autoload函数来做加载的:
自动auto加载代码:
自订义自动加载函数用SPL:
将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。
以上一行摘自:http://blog.csdn.net/panpan639944806/article/details/23192267
/tmp/autoload/autoload.php
/tmp/autoload/aClass.php
/tmp/autoload/bClass.php
运行一下,看一下在加载前和后引入的文件是否一样?不一样有新文件:
[root@test autoload]# php autoload.php
Array
(
[0] => /tmp/autoload/autoload.php
)
.:/opt/2012-01-30/php-5.3.10
aClass loaded...bClass loaded...Array
(
[0] => /tmp/autoload/autoload.php
[1] => /tmp/autoload/aClass.php
[2] => /tmp/autoload/bClass.php
)
上面是一个用法,第二个是把__autoload 这个函数都给重定义了:
spl_autoload_register(array('Ko', 'autoload'));//这要就由function __autoload($className)变成了:function autoload($className)
————————————————————结合框架来说这个autoload的事情—————————————————————
/**
* Enable the Ko auto-loader.
*
* @see http://php.net/spl_autoload_register
*/
spl_autoload_register(array('Ko', 'autoload'));
----于是了解到如下自动加载机制:
英文原文:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
以下内容描述了符合自动载入程序互操作性所必须遵守的强制性规范。
强制要求
一个完整的命名空间 (namespace) 和类 (class) 必须使用以下结构: \<Vendor Name>\(<Namespace>\)*<Class Name>
每个命名空间 (namespace) 必须使用供应商名称 (“Vendor Name”) 做为顶层命名空间(top-level namespace).
每个命名空间 (namespace) 的子命名空间 (sub-namespace) 数量不限.
程序从文件系统载入的时候,每个命名空间 (namespace) 的分隔符 (separator) 将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR).
在类名 (CLASS NAME) 中的下划线 ( _) 也将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR) , 在命名空间 (namespace) 中的下划线 (_)不做替换.
从文件系统载入的合格的命名空间 (namespace) 和 类 (class) 必须以 .php 结尾.
供应商名称 (vendor names), 命名空间 (namespaces) 及类名 (class names) 可以使用任意大小写字母的组合.
示例
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
在命名空间(Namespaces)和类名(Class Names)中的下划线
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
The standards we set here should be the lowest common denominator for painless autoloader interoperability. You can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.
实现示例
下面的示例函数演示了遵循上述规范的自动加载过程.
SplClassLoader 实现
如果你的程序遵守上面的自动载入程序互操作性规范,可以使用下面的SplClassLoader实现来加载你的类 (classes) . 这也是 PHP 5.3 推荐的遵循本规范的类 (class) 加载方式.
来自:http://www.dunban.com/?p=30
http://gist.github.com/221634
最后参考:
http://www.jb51.net/article/23956.htm
http://blog.csdn.net/hguisu/article/details/7463333
http://www.php.net/manual/zh/function.autoload.php
http://blog.sina.com.cn/s/blog_6915bcb101017p2x.html
http://www.php100.com/html/php/lei/2013/0905/5267.html
YII框架里,一般各种框架都有这样的用法,特别是PHP5的框架:
spl_autoload_register(array('Ko', 'autoload'));
bool spl_autoload_register(array(‘class’,'static_function’))
参数为数组,数组中第一个值为类名,第二个值为方法名,且必须为静态方法。
例:
输出:
---------- 调试PHP ----------
open\OpenAPIModel.php
models\open\OpenAPIModel.php
输出完成 (耗时 0 秒) - 正常终止
在实际运用中文件名里是不能有Model的字符的,通过对findFile的Debug一下得到:
D:\www\iseeyoo\trunk\codes\application\models\open\adminchannellink.php
class open_AdminChannelLinkModel extends Model //类名包含下划线和Model(如果是Service也一样:class OpenChannelService extends baseService,文件名:\application\services\openchannel.php也不能包含Service字符。),这个规则是:文件命名里不能有Model。(这个得注意下)
{
}
//直接在Core里Debug下,得出上面的规律。
public static function findFile ($dir, $file, $ext = 'php')
{
if($file == "open_adminchannellink"){
file_put_contents("d:/wamp/www/aaa.txt","ModelfileDiR=".$dir."\n",FILE_APPEND);
file_put_contents("d:/wamp/www/aaa.txt","Modelfilepath=".$path."\n",FILE_APPEND);
}
打印出:
ModelfilePosition=open_adminchannellink
ModelfileDiR=models
Modelfilepath=models\open\adminchannellink.php
kohana 这个也是支持contrller直接接调用Module层的,实践OK的,理论上就是通过Autoload调用module,Service(文件类名有不同的标记)的类名(这个是有规范的上面有描述),进而拼接出大体位置,让findfile去找到这个文件:
application\controllers\open\index.php
http://domain.com/open/index/index
这一看是contrller下面有一个open(经过路由配置到了open目录的),后有一个index.php的文件里有一个index函数,如果想直接获取这个uri的内容,可以通过这个函数实现,如下:
这个forward吧,其实就相当于YII里的路由控制器访问index目录下的index控制器下面的index的action方法,路由相关知识:
什么是路由:
在框架里边我们通过路由获得控制器和方法,
我们有了控制器的方法,就可以进一步与视图或模型进行交互,
http://网址/index.php?r=控制器/方法
http://网址/index.php?r=user/cc
===============================================================
一般还是有一个autoload函数来做加载的:
自动auto加载代码:
自订义自动加载函数用SPL:
首先同时按下“Windows+R”快捷键调出运行命令窗口,然后在窗口中输入“control userpasswords2”后回车。这时Windows 7中的用户帐号(User Accounts)窗口会自动弹出,
紧接着去掉“要使用本机,用户必须输入用户名和密码”前的勾选,最后点击应用按钮就会立即弹出一个自动登录窗口(Automatically Log On)在你面前。现在将你的帐户密码信息输入其中,确认以后Windows 7系统就可以自动记住你的登录帐号,当你再次进入系统的时候,它就会自动为你登录而不需要你重新输入信息了。从此,你只需开机后坐享其成就可以啦!
实操OK步骤:
1)按下“Windows+R”快捷键调出运行命令窗口,然后在窗口中输入“control userpasswords2”后回车。
2)去掉“要使用本机,用户必须输入用户名和密码”前的勾选,点击应用按钮就会立即弹出一个自动登录窗口。
3)现在将你的帐户密码信息输入其中,确认以后Windows 7系统就可以自动记住你的登录帐号,当你再次进入系统的时候,它就会自动为你登录而不需要你重新输入信息了。(这儿空密码就只用一个用户,不用输入密码,直接确认即可)
紧接着去掉“要使用本机,用户必须输入用户名和密码”前的勾选,最后点击应用按钮就会立即弹出一个自动登录窗口(Automatically Log On)在你面前。现在将你的帐户密码信息输入其中,确认以后Windows 7系统就可以自动记住你的登录帐号,当你再次进入系统的时候,它就会自动为你登录而不需要你重新输入信息了。从此,你只需开机后坐享其成就可以啦!
实操OK步骤:
1)按下“Windows+R”快捷键调出运行命令窗口,然后在窗口中输入“control userpasswords2”后回车。
2)去掉“要使用本机,用户必须输入用户名和密码”前的勾选,点击应用按钮就会立即弹出一个自动登录窗口。
3)现在将你的帐户密码信息输入其中,确认以后Windows 7系统就可以自动记住你的登录帐号,当你再次进入系统的时候,它就会自动为你登录而不需要你重新输入信息了。(这儿空密码就只用一个用户,不用输入密码,直接确认即可)
为PHP安装zip扩展
Php/Js/Shell/Go jackxiang 2012-12-23 16:40
VPS上很多应用,是需要zip扩展的。而我帮朋友配置的一台VPS,是Redhat的系统,并且是64bit的,但是貌似网上的LNAMP一键安装包恰好还不支持64位,所以我的LNAMP环境是全手动搭建的。由于手动搭建,为了简单,一些扩展默认我就没编译到php里面去,因此这次的这个zip扩展,需要手动配置进去。其实PHP的很多扩展,能在编译的时候,通过开关开启。如果编译的时候,没有开启,也没关系,可以通过php.ini中加入extension的方式开启。比如这次的zip扩展,就可以用此方法实现。此文为记录一下zip扩展手动安装的过程,备忘。
第一步,下载源代码并解压缩
http://pecl.php.net/package/zip
wget http://pecl.php.net/get/zip-1.10.2.tgz
tar zxvf zip-1.10.2.tgz
cd zip-1.10.2
第二步,编译并安装
/usr/local/php/bin/phpize
#运行此命令后,会自动生成几个文件,包括configure文件
./configure --with-php-config=/usr/local/php/bin/php-config
make & make install
第三步,配置php.ini,并开启zip扩展
zip安装后,会显示安装的路径,比如:/usr/local/php/lib/php/extensions/zip.so
在php.ini中加入: extension=/usr/local/php5/lib/php/extensions/zip.so
如果是LNMP安装包,需要重新启动php-fpm,如果是LNAMP结构,需要重启apache即可。
至此,安装zip扩展完毕,可以在phpinfo()中检查zip扩展是否已经正确启用。
第一步,下载源代码并解压缩
http://pecl.php.net/package/zip
wget http://pecl.php.net/get/zip-1.10.2.tgz
tar zxvf zip-1.10.2.tgz
cd zip-1.10.2
第二步,编译并安装
/usr/local/php/bin/phpize
#运行此命令后,会自动生成几个文件,包括configure文件
./configure --with-php-config=/usr/local/php/bin/php-config
make & make install
第三步,配置php.ini,并开启zip扩展
zip安装后,会显示安装的路径,比如:/usr/local/php/lib/php/extensions/zip.so
在php.ini中加入: extension=/usr/local/php5/lib/php/extensions/zip.so
如果是LNMP安装包,需要重新启动php-fpm,如果是LNAMP结构,需要重启apache即可。
至此,安装zip扩展完毕,可以在phpinfo()中检查zip扩展是否已经正确启用。
两台服务器, 两种情况:
1. 两台都同时部署 nginx + php-fpm
2. 一台部署nginx 一台部署 php-fpm, nginx将php请求反向代理给后面的 php-fpm 服务器
我的看法是:
第一种,配置在一起,虽然看似两台nginx可以承载更多的请求,但是由于nginx与php之间 tcp端口,CPU,Mem资源的争抢,很容易造成 nginx timeout, can't connect等错误,看似nginx收到了很多请求,但php正常处理返回的其实并没那么多。
第二种,资源分开,灵活性更高,nginx快速代理,php快速处理,可承载的有效并发会更高一些,高并发时,系统也会更稳定一些。
请问大家,以上两种情况,哪种可承载的有效并发会高一些?为什么? 大家平时会使用哪一种?
第一种好
nginx做haproxy保证高可用
nginx通过unix socket连接到后端的phpfpm,同时一台机器上面可以启用多个phpfpm进程(端口),保证充分利用资源
nginx不是瓶颈,phpfpm才是。
来自:http://www.zhihu.com/question/20030832
Nginx 和 Apache 在 Windows 下的性能表现谁更好?
nginx 的高性能依赖于 Linux 2.6 内核的 epoll [1] 或是 BSD 内核的 kqueue [2] 提供高效的网络套接字状态轮询服务【时间复杂度为 O(1) 】。在没有这两个服务的内核上则退化成为性能低下的 select 【*nix, Windows 都有、时间复杂度为 O(n) 】. Windows 没有 epoll 和 kqueue,nginx 在 Windows 上用 select 表现自然不佳。
Windows 上类似 epoll/kqueue 的服务是 I/O Completion Ports [3]【Solaris 上也有】,理论上讲是比 epoll 更加先进的服务,因为它同时支持套接字、文件、管道【kqueue 类似】,而 epoll 不支持文件。也就是说不能用 epoll 做本地文件的异步 I/O。但不幸的是没有成熟的开源网络服务器使用 I/O Completion Ports。
Apache 的性能不好一概而论。它有好多种模式,主要的两种是:1、prefork 使用的是多进程 [4];2、 worker 使用得是多进程+多线程 [5]。Windows NT 平台上线程的效率比较高【进程的效率则相对 *nix 下低】,所以使用多线程模式性能更优。Apache 还有个专门为 NT 优化的模式 [6],用的是单进程+多线程。
至于说多线程同步 I/O 相对于使用 epoll/kqueue 异步 I/O 两种方式孰优孰劣,有兴趣的朋友可以参考我在另外一个问题的回答 [7]。
1. 两台都同时部署 nginx + php-fpm
2. 一台部署nginx 一台部署 php-fpm, nginx将php请求反向代理给后面的 php-fpm 服务器
我的看法是:
第一种,配置在一起,虽然看似两台nginx可以承载更多的请求,但是由于nginx与php之间 tcp端口,CPU,Mem资源的争抢,很容易造成 nginx timeout, can't connect等错误,看似nginx收到了很多请求,但php正常处理返回的其实并没那么多。
第二种,资源分开,灵活性更高,nginx快速代理,php快速处理,可承载的有效并发会更高一些,高并发时,系统也会更稳定一些。
请问大家,以上两种情况,哪种可承载的有效并发会高一些?为什么? 大家平时会使用哪一种?
第一种好
nginx做haproxy保证高可用
nginx通过unix socket连接到后端的phpfpm,同时一台机器上面可以启用多个phpfpm进程(端口),保证充分利用资源
nginx不是瓶颈,phpfpm才是。
来自:http://www.zhihu.com/question/20030832
Nginx 和 Apache 在 Windows 下的性能表现谁更好?
nginx 的高性能依赖于 Linux 2.6 内核的 epoll [1] 或是 BSD 内核的 kqueue [2] 提供高效的网络套接字状态轮询服务【时间复杂度为 O(1) 】。在没有这两个服务的内核上则退化成为性能低下的 select 【*nix, Windows 都有、时间复杂度为 O(n) 】. Windows 没有 epoll 和 kqueue,nginx 在 Windows 上用 select 表现自然不佳。
Windows 上类似 epoll/kqueue 的服务是 I/O Completion Ports [3]【Solaris 上也有】,理论上讲是比 epoll 更加先进的服务,因为它同时支持套接字、文件、管道【kqueue 类似】,而 epoll 不支持文件。也就是说不能用 epoll 做本地文件的异步 I/O。但不幸的是没有成熟的开源网络服务器使用 I/O Completion Ports。
Apache 的性能不好一概而论。它有好多种模式,主要的两种是:1、prefork 使用的是多进程 [4];2、 worker 使用得是多进程+多线程 [5]。Windows NT 平台上线程的效率比较高【进程的效率则相对 *nix 下低】,所以使用多线程模式性能更优。Apache 还有个专门为 NT 优化的模式 [6],用的是单进程+多线程。
至于说多线程同步 I/O 相对于使用 epoll/kqueue 异步 I/O 两种方式孰优孰劣,有兴趣的朋友可以参考我在另外一个问题的回答 [7]。
今天在导入Mysql数据库时总是提示:Unknown command ‘\n’,也不知道问题出在哪里,经过无数次研究后问题才得以解决,下面给出具体思路及解决方法。 之前我的Mysql数据库版本是Server version: 5.1.51-log,我现在导入新的数据库是Server version: 5.5.24-log,我发现在Mysql5版本的数据库之间导入数据没有问题,不出现错误提示,但是导入到Mysql5时就出错了。
解决方法如下:
我们在导出Mysql4数据库时指定编码即可,相关命令如下所示:
mysqldump -u root -p dbname --default-character-set=gbk >D:\htmer.sql
说明:上面的gbk编码根据实际中你的数据库编码而定。
通过上面的导出设置,你再导入到新的Mysql数据库中就不会出错了。
解决方法如下:
我们在导出Mysql4数据库时指定编码即可,相关命令如下所示:
mysqldump -u root -p dbname --default-character-set=gbk >D:\htmer.sql
说明:上面的gbk编码根据实际中你的数据库编码而定。
通过上面的导出设置,你再导入到新的Mysql数据库中就不会出错了。
对于一个UNIX下用惯了各种终端和各种shell的人来说,在Windows世界里最大的痛苦是那个蹩脚的cmd。虽然有Cygwin和Msys 的mintty/rxvt,但它们还是更适合跑bash和它们自己的term类程序,不适合跑Windows的console程序(比如路径的斜线/反斜 线问题,比如ANSI颜色问题。。。)
下面,我们分两方面来找找替代品,这次介绍console emulater,类似UNIX下终端仿真器(terminal emulator)那样的东西,让多个字符界面程序(比如cmd/bash/python shell)跑在一个窗口里,下次再介绍类似UNIX下shell那样的东西,切实改进cmd那可怜的交互能力。
推荐: ConEmu
http://code.google.com/p/conemu-maximus5
看看下面的特性列表,颤抖吧!
支持多标签,甚至支持将其它的GUI程序(不仅仅是console程序哦,比如putty/记事本等都可以)嵌入为标签页;
可以选择各种字体,且自带抗锯齿功能;
对各种console程序都兼容得很好(比如文件管理器Far Manager,win32版本的vim,比如IPython),甚至兼容DOS程序;
支持Quake式的下拉风格(即类似于Guake/Tilda/Yakuake那样的,不用时窗口隐藏,需要时用热键呼出,界面从屏幕顶端拉下来)——这个需要最近的版本(至少2012-06-12之后的);
增强的文字选取(比如缺省按住左Alt+鼠标拖动,可以选择矩形区域)
支持ANSI X3.64和xterm 256彩色
很多针对Far Manager文件管理器的增强,比如:让Far Manager支持Windows风格的文件拖放、右键菜单、分隔条,给Far Manager文件列表增加了缩略图和小图标浏览方式(Far Manager可是个基于字符的文件管理器),为查看器/编辑器自动提供新的标签页(即将Far Manager的screen实现为了它的标签页),
注意: 中文用户请使用2012-06-17之后的版本,因为这个版本刚修正了中文的显示问题(以前的版本会在命令行中出现每个汉字出现两遍的情况。这也是为什么以前我没有推荐这个好工具的主要原因)。
补充说明一下如何将其它程序变为ConEmu里面的标签页(参见其Wiki: LaunchNewTab):
最简单的方法: 菜单里选择New console...,然后在对话框里面输入程序名称即可,注意这里不仅仅可以输入cmd/powershell/vim/far这些console程序,你输入putty甚至notepad,都是可以的!
另一种方法是,在ConEmu里面跑一个cmd.exe,然后在cmd里面输入putty -new_console,确定,哒哒!putty就变成ConEmu的一个标签页了; 输入: vim -new_console 然后vim就在一个新的标签页里面打开了! (是的,其实这里的-new_console并不是putty或者vim的参数,会被ConEmu拦截并进行处理。)
注意得选用最近几天的版本,并在Settings->Features中勾选上Inject ComEmuHk。对于以前的版本,得这样:"%ConEmuBaseDir%\ConEmuC.exe" /c vim.exe -new_console:nh0 c:\sources\1.cpp (详细解释可以参看其Wiki: NewConsole )
另外一个例子: 将grep的结果“重定向”到一个新的标签页:grep -new_console -nHi --color path cmd_autorun.cmd 而当前cmd并不阻塞,可以继续输入其它命令(缺省不想激活新标签页的话可以用-new_console:b )
来自:http://www.cnblogs.com/bamanzi/archive/2012/06/27/windows-console-emulater.html
下面,我们分两方面来找找替代品,这次介绍console emulater,类似UNIX下终端仿真器(terminal emulator)那样的东西,让多个字符界面程序(比如cmd/bash/python shell)跑在一个窗口里,下次再介绍类似UNIX下shell那样的东西,切实改进cmd那可怜的交互能力。
推荐: ConEmu
http://code.google.com/p/conemu-maximus5
看看下面的特性列表,颤抖吧!
支持多标签,甚至支持将其它的GUI程序(不仅仅是console程序哦,比如putty/记事本等都可以)嵌入为标签页;
可以选择各种字体,且自带抗锯齿功能;
对各种console程序都兼容得很好(比如文件管理器Far Manager,win32版本的vim,比如IPython),甚至兼容DOS程序;
支持Quake式的下拉风格(即类似于Guake/Tilda/Yakuake那样的,不用时窗口隐藏,需要时用热键呼出,界面从屏幕顶端拉下来)——这个需要最近的版本(至少2012-06-12之后的);
增强的文字选取(比如缺省按住左Alt+鼠标拖动,可以选择矩形区域)
支持ANSI X3.64和xterm 256彩色
很多针对Far Manager文件管理器的增强,比如:让Far Manager支持Windows风格的文件拖放、右键菜单、分隔条,给Far Manager文件列表增加了缩略图和小图标浏览方式(Far Manager可是个基于字符的文件管理器),为查看器/编辑器自动提供新的标签页(即将Far Manager的screen实现为了它的标签页),
注意: 中文用户请使用2012-06-17之后的版本,因为这个版本刚修正了中文的显示问题(以前的版本会在命令行中出现每个汉字出现两遍的情况。这也是为什么以前我没有推荐这个好工具的主要原因)。
补充说明一下如何将其它程序变为ConEmu里面的标签页(参见其Wiki: LaunchNewTab):
最简单的方法: 菜单里选择New console...,然后在对话框里面输入程序名称即可,注意这里不仅仅可以输入cmd/powershell/vim/far这些console程序,你输入putty甚至notepad,都是可以的!
另一种方法是,在ConEmu里面跑一个cmd.exe,然后在cmd里面输入putty -new_console,确定,哒哒!putty就变成ConEmu的一个标签页了; 输入: vim -new_console 然后vim就在一个新的标签页里面打开了! (是的,其实这里的-new_console并不是putty或者vim的参数,会被ConEmu拦截并进行处理。)
注意得选用最近几天的版本,并在Settings->Features中勾选上Inject ComEmuHk。对于以前的版本,得这样:"%ConEmuBaseDir%\ConEmuC.exe" /c vim.exe -new_console:nh0 c:\sources\1.cpp (详细解释可以参看其Wiki: NewConsole )
另外一个例子: 将grep的结果“重定向”到一个新的标签页:grep -new_console -nHi --color path cmd_autorun.cmd 而当前cmd并不阻塞,可以继续输入其它命令(缺省不想激活新标签页的话可以用-new_console:b )
来自:http://www.cnblogs.com/bamanzi/archive/2012/06/27/windows-console-emulater.html
wamp套件注册服务是:
服务名称:wampapache
可执行的文件路径:"d:\wamp\bin\apache\apache2.2.22\bin\httpd.exe" -k runservice
服务名称:wampmysqld
可执行的文件路径:d:\wamp\bin\mysql\mysql5.5.24\bin\mysqld.exe wampmysqld
所以,你在资源管理器里也就会以wamp进行查找进程,而不是以apache ,mysql来查找。
————————————————————————————————————————————————————
Windows下安装:wampserver. 后出现,international error...
启动apache时系统提示错误:[error]<os 2>系统找不到指定文件 no installed service named "apache2"
发生此错误的原因是Apache的目录更改了,或者注册表中Apache2服务的信息被更改。
与我之前一篇文章写的Apache出错的原因有些不同:Apache:系统找不到指定的文件: No installed ConfigArgs for the service "Apache2"
反正就是注册表中的路径和Apache实际的路径对不上号,所以提示“系统找不到指定文件”。
解决方案:重新安装apache;
在命令行cmd中cd至Apache所有的目录(运行cmd的时候要以管理员的身份运行才可以)
cd apache所有目录
cd bin
apache -k install
apache -k start
启动ok!
还原一次ghost的win7后也出现这个问题,带得重新install一次:
D:\wamp\bin\apache\apache2.2.22\bin>httpd.exe -k install
Installing the Apache2.2 service
The Apache2.2 service is successfully installed.
Testing httpd.conf....
转自:
http://blog.zxlm.cn/2007/12/apache%E7%B3%BB%E7%BB%9F%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%96%87%E4%BB%B6-no-installed-service-namedapache2.html
后来依旧没有Ok,最后这样才Ok的:
最近PP小编在做一个PHP的网站,由于重装系统后,电脑的PHP环境需要重新配置,但是为了方便,直接下载了WAMP进行安装,可是出现了为Internal Server Error的内部服务器错误,错误如下:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
以上提示大概意思为PHP服务器遇到内部错误或配置错误,无法完成请求,请联系服务器管理员等等废话。最后可以在APACHE服务器中查看日志。
PP小编问了一下度哥“装WAMP提示Internal Server Error”,终于找到了解决的办法。
Internal Server Error原因:是因为在我的网站目录下面有.htaccess文件,而Apache没有开启rewrite功能,所以才导致了Internal Server Error错误。
Internal Server Error解决方法:在右下角的WAMP5的图标中,单击选择“Apache Modles”,在模块中选择“rewrite_module”,然后重启一下Apache就OK啦!
来自:http://www.lao8.org/html/8/2011-8-18/wamp_htaccess.html
WampServer Version 2.2打开localhost,phpMyAdmin,提示:系统找不到该文件??
http://www.wampserver.com (因ghost还原,ghost之前没有ghost进去)
解决办法:重新安装是不行的,问题出现在,默认浏览器的选取上(因Firefox我重新安装了一次,位置变了)
navigator = "D:\Program Files\Firefox\firefox.exe"
D:\Program Files\Mozilla Firefox\firefox.exe
---------------------------------------------------------------------------------------------------------------------------------------------------
wamp出现could not execute run action问题
上午在安装了Chrome Dev后为了方便将原来的ChromePlus安装目录下的chrome.exe改名成为了chromeplus.exe,而wamp先前安装时选择的默认浏览器就是通过地址定位手动选择的chromeplus,这样修改后必定会出现问题。
几经周折,终于找到了解决方法:
查看wamp安装目录下wampmanager.ini和wampmanager.conf两个文件,核对对应的条目。在D:\wamp\wampmanager.conf中有这么一行:
navigator = "D:\Program Files\ChromePlus\chrome.exe"
改成chromeplus.exe即可,然后再到D:\wamp\wampmanager.ini文件里,ctrl+F搜索phpMyAdmin字样,也很快找到对应的条目,将[Menu.Left]字段下的phpMyAdmin对应浏览器路径修改一下,然后重启wamp,OK,熟悉的淡蓝色界面又出现了。
来自:http://blog.sina.com.cn/s/blog_4a60ba9c0100zzlr.html
服务名称:wampapache
可执行的文件路径:"d:\wamp\bin\apache\apache2.2.22\bin\httpd.exe" -k runservice
服务名称:wampmysqld
可执行的文件路径:d:\wamp\bin\mysql\mysql5.5.24\bin\mysqld.exe wampmysqld
所以,你在资源管理器里也就会以wamp进行查找进程,而不是以apache ,mysql来查找。
————————————————————————————————————————————————————
Windows下安装:wampserver. 后出现,international error...
启动apache时系统提示错误:[error]<os 2>系统找不到指定文件 no installed service named "apache2"
发生此错误的原因是Apache的目录更改了,或者注册表中Apache2服务的信息被更改。
与我之前一篇文章写的Apache出错的原因有些不同:Apache:系统找不到指定的文件: No installed ConfigArgs for the service "Apache2"
反正就是注册表中的路径和Apache实际的路径对不上号,所以提示“系统找不到指定文件”。
解决方案:重新安装apache;
在命令行cmd中cd至Apache所有的目录(运行cmd的时候要以管理员的身份运行才可以)
cd apache所有目录
cd bin
apache -k install
apache -k start
启动ok!
还原一次ghost的win7后也出现这个问题,带得重新install一次:
D:\wamp\bin\apache\apache2.2.22\bin>httpd.exe -k install
Installing the Apache2.2 service
The Apache2.2 service is successfully installed.
Testing httpd.conf....
转自:
http://blog.zxlm.cn/2007/12/apache%E7%B3%BB%E7%BB%9F%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%96%87%E4%BB%B6-no-installed-service-namedapache2.html
后来依旧没有Ok,最后这样才Ok的:
最近PP小编在做一个PHP的网站,由于重装系统后,电脑的PHP环境需要重新配置,但是为了方便,直接下载了WAMP进行安装,可是出现了为Internal Server Error的内部服务器错误,错误如下:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
以上提示大概意思为PHP服务器遇到内部错误或配置错误,无法完成请求,请联系服务器管理员等等废话。最后可以在APACHE服务器中查看日志。
PP小编问了一下度哥“装WAMP提示Internal Server Error”,终于找到了解决的办法。
Internal Server Error原因:是因为在我的网站目录下面有.htaccess文件,而Apache没有开启rewrite功能,所以才导致了Internal Server Error错误。
Internal Server Error解决方法:在右下角的WAMP5的图标中,单击选择“Apache Modles”,在模块中选择“rewrite_module”,然后重启一下Apache就OK啦!
来自:http://www.lao8.org/html/8/2011-8-18/wamp_htaccess.html
WampServer Version 2.2打开localhost,phpMyAdmin,提示:系统找不到该文件??
http://www.wampserver.com (因ghost还原,ghost之前没有ghost进去)
解决办法:重新安装是不行的,问题出现在,默认浏览器的选取上(因Firefox我重新安装了一次,位置变了)
navigator = "D:\Program Files\Firefox\firefox.exe"
D:\Program Files\Mozilla Firefox\firefox.exe
---------------------------------------------------------------------------------------------------------------------------------------------------
wamp出现could not execute run action问题
上午在安装了Chrome Dev后为了方便将原来的ChromePlus安装目录下的chrome.exe改名成为了chromeplus.exe,而wamp先前安装时选择的默认浏览器就是通过地址定位手动选择的chromeplus,这样修改后必定会出现问题。
几经周折,终于找到了解决方法:
查看wamp安装目录下wampmanager.ini和wampmanager.conf两个文件,核对对应的条目。在D:\wamp\wampmanager.conf中有这么一行:
navigator = "D:\Program Files\ChromePlus\chrome.exe"
改成chromeplus.exe即可,然后再到D:\wamp\wampmanager.ini文件里,ctrl+F搜索phpMyAdmin字样,也很快找到对应的条目,将[Menu.Left]字段下的phpMyAdmin对应浏览器路径修改一下,然后重启wamp,OK,熟悉的淡蓝色界面又出现了。
来自:http://blog.sina.com.cn/s/blog_4a60ba9c0100zzlr.html
操作Mysql的导入文件,想查看前面的内容时需要Less命令:
less
wget -c http://ncu.dl.sourceforge.net/sourceforge/gnuwin32/less-394-bin.zip
解压,把bin下文件放到C:\WINDOWS\coreutils-5.3.0-bin\bin下
---------------------------------------------------------------------阅读全文
less
wget -c http://ncu.dl.sourceforge.net/sourceforge/gnuwin32/less-394-bin.zip
解压,把bin下文件放到C:\WINDOWS\coreutils-5.3.0-bin\bin下
---------------------------------------------------------------------阅读全文