Jquery 操作添加缓存数据,实践如下,主要是下面这个缓存数据的设置和获取有点意思,特做记录:
阅读全文
阅读全文
新注意问题,将sprintf这个写在foreach时拼接URl时,要注意,不能直接写成:
1.sprintf错误赋值的写法(不能修改下面这个$getURlStr),如下:
2.而应该写成,如下,sprintf的值应该重新赋值给一个新的变量:
------------------------------------------------------------
接着讲:PHP的sprintf()函数用法
主要是对:在 0 后面的是 1 这个 1 是规定,小数点前面的数字占位要有1位以上。
例子,使用范例
这个 %01.2f 是什么意思呢?
首先 这个 % 符号是开始的意思,他写在最前面表示指定格式要开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。
主要是想了解这一句:
如果把 1 改成 2 如果 $money 的值为 1.23 ,则 $formatted 的值将为 01.23
因为,在小数点前面的数字只占了1位,按照上面所规定的格式,小数点前数字应该占2位,现在只有1位,所以,用0来填满。
到目前,在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,规定,小数点后的数字,必需占2位. 如果这时候,$money 的值为 1.234,则 $formatted 的值将为 1.23。
为什么 4 不见了呢? 因为,在小数点后面 按照上面的规定,必需且仅能占2位。 可是 $money 的值中,小数点占了3位,所以,4 被去掉了,只剩下 23。
最后,以 f "转换字符" 结尾,其他转换字符请自行参考上面的转换字符列表。
关于对齐
如果在 % 起始符号后面 加上 - (负号) 则,将会把数字以向右对齐的方式进行处理。
这时候,$formatted 将不会再是 01.40 而是 1.400
阅读全文
1.sprintf错误赋值的写法(不能修改下面这个$getURlStr),如下:
2.而应该写成,如下,sprintf的值应该重新赋值给一个新的变量:
------------------------------------------------------------
接着讲:PHP的sprintf()函数用法
主要是对:在 0 后面的是 1 这个 1 是规定,小数点前面的数字占位要有1位以上。
例子,使用范例
这个 %01.2f 是什么意思呢?
首先 这个 % 符号是开始的意思,他写在最前面表示指定格式要开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。
主要是想了解这一句:
如果把 1 改成 2 如果 $money 的值为 1.23 ,则 $formatted 的值将为 01.23
因为,在小数点前面的数字只占了1位,按照上面所规定的格式,小数点前数字应该占2位,现在只有1位,所以,用0来填满。
到目前,在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,规定,小数点后的数字,必需占2位. 如果这时候,$money 的值为 1.234,则 $formatted 的值将为 1.23。
为什么 4 不见了呢? 因为,在小数点后面 按照上面的规定,必需且仅能占2位。 可是 $money 的值中,小数点占了3位,所以,4 被去掉了,只剩下 23。
最后,以 f "转换字符" 结尾,其他转换字符请自行参考上面的转换字符列表。
关于对齐
如果在 % 起始符号后面 加上 - (负号) 则,将会把数字以向右对齐的方式进行处理。
这时候,$formatted 将不会再是 01.40 而是 1.400
阅读全文
php与smarty结合时:smarty下PHP一样的strpos函数的使用示例
Php/Js/Shell/Go jackxiang 2012-3-22 15:18
一.最小化释放内存。在地址栏输入 about:config,然后新建一个名为 config.trim_on_minimize,并设定值为 true,重新启动 Firefox,这样当 Firefox 最小化时就会释放内存占用。(很有效)
为 Firefox 分配指定大小的内存缓存。这招我之前没实践过,正好试试。方法很简单,在地址栏输入 about:config,利用过滤器找到 browser.cache.memory.enable,更改它的值为 true;新建一个整数值,名为 browser.cache.memory.capacity,按照如下方案设定其值:
256M 内存=> 4096
512M 内存 => 8192
1G 内存=> 16384
From:http://blog.istef.info/2007/04/17/reduce-the-memory-usage-on-firefox/
二.减少内存泄露
使用Firefox的同学可能已经发现:Firefox占用的内存会越来越多,刚启动的时候几十M,过了半个小时,会飙升至200M甚至更多!这就是Firefox的内存泄露问题。
如果觉得限制Firefox内存会影响性能的话,推荐使用foxboost这个小工具来减少内存泄露。在文章结尾下载foxboost.zip,解压后,运行foxBoost.exe即可,foxBoost安静的在后台运行,关闭时右击托盘图标,close即可。它可以有效减少Firefox的内存泄漏问题,而不是限制内存使用。
From:http://www.x-berry.com/firefox-memory 减少内存泄露:foxboost-0.0.1.19 :
http://dl.commentcamarche.net/en.kioskea.net/download/files/foxboost-0.0.1.19.zip
为 Firefox 分配指定大小的内存缓存。这招我之前没实践过,正好试试。方法很简单,在地址栏输入 about:config,利用过滤器找到 browser.cache.memory.enable,更改它的值为 true;新建一个整数值,名为 browser.cache.memory.capacity,按照如下方案设定其值:
256M 内存=> 4096
512M 内存 => 8192
1G 内存=> 16384
From:http://blog.istef.info/2007/04/17/reduce-the-memory-usage-on-firefox/
二.减少内存泄露
使用Firefox的同学可能已经发现:Firefox占用的内存会越来越多,刚启动的时候几十M,过了半个小时,会飙升至200M甚至更多!这就是Firefox的内存泄露问题。
如果觉得限制Firefox内存会影响性能的话,推荐使用foxboost这个小工具来减少内存泄露。在文章结尾下载foxboost.zip,解压后,运行foxBoost.exe即可,foxBoost安静的在后台运行,关闭时右击托盘图标,close即可。它可以有效减少Firefox的内存泄漏问题,而不是限制内存使用。
From:http://www.x-berry.com/firefox-memory 减少内存泄露:foxboost-0.0.1.19 :
http://dl.commentcamarche.net/en.kioskea.net/download/files/foxboost-0.0.1.19.zip
PHP百分号转小数,php 小数转换百分数函数
Php/Js/Shell/Go jackxiang 2012-3-20 15:04
Linux tar压缩时 排除某个文件/文件夹,tar打包排除某个目录。
Unix/LinuxC技术 jackxiang 2012-3-12 14:58
tar -zcvf jackxiang.com.2015.11.02.tar.gz jackxiang.com --exclude=jackxiang.com/data/logs
tar zcvf fd.tar.gz * --exclude=file1 --exclude=dir1
注意:
1、--exclude=file1 而不是 --exclude file1
2、要排除一个目录是--exclude=dir1而不是--exclude=dir1/
也可以在父目录打包
tar zcvf fd.tar.gz pardir --exclude=pardir/file1 --exclude=pardir/dir1
http://www.cnblogs.com/ShepherdIsland/p/3715902.html
在对某个目录进行压缩的时候,有时候想排除掉某个目录,例如:
如果123目录下有3个子目录,aa、bb、cc。
我现在想只对aa和bb目录打包压缩,命令如下:
tar -zcvf 123.tar.gz --exclude=cc 123
多个文件 用多个 –exclude=
解压的时候直接用
tar zxvf 123.tar.gz
实践如下:
tar zcvf fd.tar.gz * --exclude=file1 --exclude=dir1
注意:
1、--exclude=file1 而不是 --exclude file1
2、要排除一个目录是--exclude=dir1而不是--exclude=dir1/
也可以在父目录打包
tar zcvf fd.tar.gz pardir --exclude=pardir/file1 --exclude=pardir/dir1
http://www.cnblogs.com/ShepherdIsland/p/3715902.html
在对某个目录进行压缩的时候,有时候想排除掉某个目录,例如:
如果123目录下有3个子目录,aa、bb、cc。
我现在想只对aa和bb目录打包压缩,命令如下:
tar -zcvf 123.tar.gz --exclude=cc 123
多个文件 用多个 –exclude=
解压的时候直接用
tar zxvf 123.tar.gz
实践如下:
Editplus列选择和Word-wrap功能是相冲突的,如果选择了Word-wrap功能,说白了就是长度太长时的换行功能,就不能有alt+c的功能,否则就可以有,在右键上也得到了体现。
右键菜单-》column select然后鼠标拖动,或者alt+c用键盘扩展选择。
注意:使用这个功能时,不能使用Word-wrap功能。
右键菜单-》column select然后鼠标拖动,或者alt+c用键盘扩展选择。
注意:使用这个功能时,不能使用Word-wrap功能。
想通过.pac文件用PHP的CURL实现代理可以吗?cURL的FAQ上明确提到这点,是不可能的,呵呵,来自:http://curl.haxx.se/docs/faq.html#Does_curl_support_Javascript_or
-----------------------------------------------
Many web pages do magic stuff using embedded Javascript. Curl and libcurl have no built-in support for that, so it will be treated just like any other contents.
.pac files are a netscape invention and are sometimes used by organizations to allow them to differentiate which proxies to use. The .pac contents is just a Javascript program that gets invoked by the browser and that returns the name of the proxy to connect to. Since curl doesn't support Javascript, it can't support .pac proxy configuration either.
Some workarounds usually suggested to overcome this Javascript dependency:
- Depending on the Javascript complexity, write up a script that
translates it to another language and execute that.
- Read the Javascript code and rewrite the same logic in another language.
- Implement a Javascript interpreter, people have successfully used the
Mozilla Javascript engine in the past.
- Ask your admins to stop this, for a static proxy setup or similar.
。。。
-----------------------------------------------
Many web pages do magic stuff using embedded Javascript. Curl and libcurl have no built-in support for that, so it will be treated just like any other contents.
.pac files are a netscape invention and are sometimes used by organizations to allow them to differentiate which proxies to use. The .pac contents is just a Javascript program that gets invoked by the browser and that returns the name of the proxy to connect to. Since curl doesn't support Javascript, it can't support .pac proxy configuration either.
Some workarounds usually suggested to overcome this Javascript dependency:
- Depending on the Javascript complexity, write up a script that
translates it to another language and execute that.
- Read the Javascript code and rewrite the same logic in another language.
- Implement a Javascript interpreter, people have successfully used the
Mozilla Javascript engine in the past.
- Ask your admins to stop this, for a static proxy setup or similar.
。。。
代理的项目示例:
1)Apache 开80端口,Htdocs:D:\apmxe\htdocs\index.html
2)Nginx配置两样东西。
(1)8080端口是用来当成负载均衡的一台机器。
(2)72端口是入口,用来做入口,72下面是变的多台机器的端口来做负载均衡。
Nginx的配置文件如下,加入了对目录的浏览:
访问:http://localhost:72/index.html
测试:把Nginx里的htdocs文件index.html去掉后,一直能访问到,因为nginx这个负载均衡的proxy_next_upstream参数就是干这个事情的,于是否,我们发现一直能访问,
但如果只访问:http://localhost:72 出现当访问到Nginx那一台出现因访问到目录的情况,是因为上面的命令打开了目录浏览,认为有数据返回,不是:http_502 http_504 error timeout invalid_header http_500 http_503 http_404,所以没有转移走,于是否,出现了目录的情况。
=============================================================================
可能出现的问题:[emerg]: "upstream" directive is not allowed here in ......
后来检查了一下原来是upstream backend 位置放错了, upstream位置应该放在http模块里面 但必须是在server模块的外面.
参考:http://wiki.nginx.org/LoadBalanceExample
再就是这种多IP下的Nginx负载均衡怎么用PHP的Smarty来自动化呢?一般情况都如下:
PHP的Smarty去配置server实现思考:
经PHP的smarty翻译后如下:
server 1.1 weight=1 max_fails fail_timeout=30s;
server 1.2 weight=1 max_fails fail_timeout=30s;
localip = 72.46.128.82
这样,也就实现了Nginx的自动配置,做一个前端的Web界面,后经过zoomkeeper,进行自动重启动nginx,进而reload这个修改过的nginx的配置文件即可。
1)Apache 开80端口,Htdocs:D:\apmxe\htdocs\index.html
2)Nginx配置两样东西。
(1)8080端口是用来当成负载均衡的一台机器。
(2)72端口是入口,用来做入口,72下面是变的多台机器的端口来做负载均衡。
Nginx的配置文件如下,加入了对目录的浏览:
访问:http://localhost:72/index.html
测试:把Nginx里的htdocs文件index.html去掉后,一直能访问到,因为nginx这个负载均衡的proxy_next_upstream参数就是干这个事情的,于是否,我们发现一直能访问,
但如果只访问:http://localhost:72 出现当访问到Nginx那一台出现因访问到目录的情况,是因为上面的命令打开了目录浏览,认为有数据返回,不是:http_502 http_504 error timeout invalid_header http_500 http_503 http_404,所以没有转移走,于是否,出现了目录的情况。
=============================================================================
可能出现的问题:[emerg]: "upstream" directive is not allowed here in ......
后来检查了一下原来是upstream backend 位置放错了, upstream位置应该放在http模块里面 但必须是在server模块的外面.
参考:http://wiki.nginx.org/LoadBalanceExample
再就是这种多IP下的Nginx负载均衡怎么用PHP的Smarty来自动化呢?一般情况都如下:
PHP的Smarty去配置server实现思考:
经PHP的smarty翻译后如下:
server 1.1 weight=1 max_fails fail_timeout=30s;
server 1.2 weight=1 max_fails fail_timeout=30s;
localip = 72.46.128.82
这样,也就实现了Nginx的自动配置,做一个前端的Web界面,后经过zoomkeeper,进行自动重启动nginx,进而reload这个修改过的nginx的配置文件即可。
PHP 5.4.0 正式版发布,扩展支持还跟不上,有待学习提高,用于生产还需等待。
Php/Js/Shell/Go jackxiang 2012-3-3 21:10
PHP 5.4.0 正式版发布了,该版本包含大量的新特性,同时也修复了很多的 bug ,其中新特性有 traits、一些数组语法的提升、内建的 Web 服务器、性能提升等等,想去请看 changelog
官方发行说明:http://php.net/releases/5_4_0.php
5.3 到 5.4 的移植指南:http://php.net/migration54
下载地址:http://php.net/downloads.php#v5.4.0
来自:http://www.oschina.net/news/26249/php-5-4-0-final
新特性:http://www.oschina.net/question/54100_33123
今天试装了一下这个最新的版本,PHP的ea加速有问题:
lroot@192.168.225.128:~/software/eaccelerator-0.9.6.1# make
make: Warning: File `Makefile' has modification time 2.7e+04 s in the future
Build complete.
Don't forget to run 'make test'.
make: 警告:检测到时钟错误。您的创建可能是不完整的。
2)APC加速:
文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现.
虽然说, 它们能很好的解决现在的问题, 但是也有很明显的不足:
1. 他们都需要额外安装(我们并没有打算把APC加入PHP5.4)
。。。来自:http://www.laruence.com/2011/10/10/2217.html
无大文件上传和进度需求,先安一下试试:
root@192.168.225.128:~/software/APC-3.1.9# phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
root@192.168.225.128:~/software/APC-3.1.9# make
make: *** 没有指明目标并且找不到 makefile。 停止
3)Memcache Client扩展,安装成功,但有问题:
root@192.168.225.128:~/software/memcache-2.2.6# ls /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
问题:
root@192.168.225.128:~/software/memcache-2.2.6# php -m
PHP Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' - /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' - /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0
其他扩展,还没有试,我估计也有很多这样那样的问题,为此,我估计这个PHP5.4.0应该是一个过渡版本,还有很多东东,不光是它本身,还有周边配合主件的完善,这还是需要一短时间的。So,建议大家还是用这个:PHP5.3.10吧,毕竟生产环境不是实验场所。
官方发行说明:http://php.net/releases/5_4_0.php
5.3 到 5.4 的移植指南:http://php.net/migration54
下载地址:http://php.net/downloads.php#v5.4.0
来自:http://www.oschina.net/news/26249/php-5-4-0-final
新特性:http://www.oschina.net/question/54100_33123
今天试装了一下这个最新的版本,PHP的ea加速有问题:
lroot@192.168.225.128:~/software/eaccelerator-0.9.6.1# make
make: Warning: File `Makefile' has modification time 2.7e+04 s in the future
Build complete.
Don't forget to run 'make test'.
make: 警告:检测到时钟错误。您的创建可能是不完整的。
2)APC加速:
文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现.
虽然说, 它们能很好的解决现在的问题, 但是也有很明显的不足:
1. 他们都需要额外安装(我们并没有打算把APC加入PHP5.4)
。。。来自:http://www.laruence.com/2011/10/10/2217.html
无大文件上传和进度需求,先安一下试试:
root@192.168.225.128:~/software/APC-3.1.9# phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
root@192.168.225.128:~/software/APC-3.1.9# make
make: *** 没有指明目标并且找不到 makefile。 停止
3)Memcache Client扩展,安装成功,但有问题:
root@192.168.225.128:~/software/memcache-2.2.6# ls /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
问题:
root@192.168.225.128:~/software/memcache-2.2.6# php -m
PHP Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' - /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' - /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0
其他扩展,还没有试,我估计也有很多这样那样的问题,为此,我估计这个PHP5.4.0应该是一个过渡版本,还有很多东东,不光是它本身,还有周边配合主件的完善,这还是需要一短时间的。So,建议大家还是用这个:PHP5.3.10吧,毕竟生产环境不是实验场所。
本文,摘写并加工自杜洋老师的音频节目:
放下,重识,运用,自我感悟,自我思考,自我风格,创新思维,真正的授人以渔,是一种思维方式,是一种尝试,没有系统,书店里只教技术,没有创新,也是市场的空白,前人很难把这些东西归纳,在商业管理,成功学里也有讲创新,但是理论上,没有聚焦,就好像某个技术,没有应用,这个应用就是针对创新具象的应用,
不能单单的说技术,也不能空的说概念,得结合实际,创新是对现有结构有设计加以改进,是个单片机,激光技术,某个工厂的造船技术等。
放下:放下现有思维方式,有点像洗脑,只要让你接受一种观念,就叫洗脑。具有强制性,无选择性,你没有别的思维去考虑问题,没有从多个角度去考虑,你可以选择,按各种方式去选择,你有没有新的思路去解释一个技术物件?怎么去学,大部分我们接触的知识都是单向的,看书,看完后会所有功能,你会操作,但不一定花样多,人人都会用笔,但能写出好字的较少,颠倒概念,倒掉传统,这就是放下,怎么放下?是忘掉所学么?不现实。放下,也就是多一些角度,多一些思维方式干同一件事,不是倒掉,而是注入新水,溢出一部分,从多角度去考虑问题,多角度本身就是一个思想工具,你可能就不会固执了,不会切换角度和立场,就是没有放下,为什么要倒掉,赤壁里面有一个片段,满了满了。。。(略) 创新本是一种紧缺,俏丽的资源,这是一种能力。
重识:重新倒水,因放下后,不知道何去何从后,你空了,导入创新思维的水,一种行为习惯,它是一种理性思维,没有主见,给新的主见,人是有天赋的,但这个创新思维是可以学习的。一大拿因被打下山谷,不段潜移默化,不段发现,感悟,此侠客被逼也好,忍辱负重也罢,他愿意思考,思考可是实实在在的是一个工具。有一部分人,有缘遇到好的指导的人,愿意思考,愿意学,努力去完成这个转变。有思想有什么用?不能变成一个设计,一个很虚无的东西,那就是下面的运用了。
运用:转变思维,用思想这个工具,改变思想本身,用思思(是工具?),来改变其本身这个工具(有点像练习葵花宝典:欲练此功,必先自),放下和重识之后,把我们学过的东西用在我们的实例,通过实例,弄明白设计和应用,在程序的编写方法,功能设计,外观UI设计,面向客户群的营销的分析(辅)。
做一个创新思维的清道夫。。。EOF
放下,重识,运用,自我感悟,自我思考,自我风格,创新思维,真正的授人以渔,是一种思维方式,是一种尝试,没有系统,书店里只教技术,没有创新,也是市场的空白,前人很难把这些东西归纳,在商业管理,成功学里也有讲创新,但是理论上,没有聚焦,就好像某个技术,没有应用,这个应用就是针对创新具象的应用,
不能单单的说技术,也不能空的说概念,得结合实际,创新是对现有结构有设计加以改进,是个单片机,激光技术,某个工厂的造船技术等。
放下:放下现有思维方式,有点像洗脑,只要让你接受一种观念,就叫洗脑。具有强制性,无选择性,你没有别的思维去考虑问题,没有从多个角度去考虑,你可以选择,按各种方式去选择,你有没有新的思路去解释一个技术物件?怎么去学,大部分我们接触的知识都是单向的,看书,看完后会所有功能,你会操作,但不一定花样多,人人都会用笔,但能写出好字的较少,颠倒概念,倒掉传统,这就是放下,怎么放下?是忘掉所学么?不现实。放下,也就是多一些角度,多一些思维方式干同一件事,不是倒掉,而是注入新水,溢出一部分,从多角度去考虑问题,多角度本身就是一个思想工具,你可能就不会固执了,不会切换角度和立场,就是没有放下,为什么要倒掉,赤壁里面有一个片段,满了满了。。。(略) 创新本是一种紧缺,俏丽的资源,这是一种能力。
重识:重新倒水,因放下后,不知道何去何从后,你空了,导入创新思维的水,一种行为习惯,它是一种理性思维,没有主见,给新的主见,人是有天赋的,但这个创新思维是可以学习的。一大拿因被打下山谷,不段潜移默化,不段发现,感悟,此侠客被逼也好,忍辱负重也罢,他愿意思考,思考可是实实在在的是一个工具。有一部分人,有缘遇到好的指导的人,愿意思考,愿意学,努力去完成这个转变。有思想有什么用?不能变成一个设计,一个很虚无的东西,那就是下面的运用了。
运用:转变思维,用思想这个工具,改变思想本身,用思思(是工具?),来改变其本身这个工具(有点像练习葵花宝典:欲练此功,必先自),放下和重识之后,把我们学过的东西用在我们的实例,通过实例,弄明白设计和应用,在程序的编写方法,功能设计,外观UI设计,面向客户群的营销的分析(辅)。
做一个创新思维的清道夫。。。EOF
163为它的游戏用户推出了动态口令卡。售价才10元。这让我非常的诧异。首先,我觉得这几乎是无懈可击的密保技术。其次,RSA的 SecurID卡在国内在几百RMB一个。而163的这东西,实在是便宜……
RSA 令牌 SID700 RSA SecurID
以前一直对这东西的原理很好奇。今天翻了些文档,略微整理如下:
1、密码:
登陆密码=f(静态密码,动态密码)。
静态密码就是用户自己设置的一个密码。
动态密码是通过卡动态生成的密码。
f是一个简单函数。例如不进位的加法、字符串拼接。
用户的静态密码最好是不要通过电脑键盘输入不通过网络传输的,所以很不推荐采用字符串拼接的方式。
2、构成
一个8位的处理器,一个时钟,一个LCD显示屏,一块电池。可能还会有一个键盘。
外壳的设计目标:一旦打开外壳,那么立即清空内存数据。
内部的设计目标:存储一个种子文件。然后按文件中的数据和当前时间拼起来进行AES,然后hash成6-8位的数字,显示在LCD上。
如果有键盘,那么用户可以通过键盘输入一串数字(用户的静态密码)。卡把这串数字(静态密码)与卡实际生成的数字(动态密码)用一种公开的算法(前面所说的那个f)进行组合,然后显示出来。通常采用的是不进位的加法。因此这个部件不是我们所需要关心的部分。
理论上来讲,如果知道种子、如果知道时间、如果知道生成器内部所采用的算法,那么我们就可以自行的算出这个动态密码。既然RSA公司敢发布软件版的生成器,那么就意味着它不怕这个算法被知道。事实上这个算法被hacker们公开已经是10年前的事情了。一个俄国hacker在发布自己的软件模拟器后留下这样一段话:
“RSA公司的伙计们:
如果你需要人帮助你设计安全的加密算法和协议,告诉我们,我们将会帮助你做出来。俄罗斯人并不都是熊。我们的国际象棋比你们下的好,记住!”
但是难点在于从卡中取走种子文件。就目前而言,是不可能通过它产生的随机序列反推回去得到它的种子文件的。
在网上看到了另一种类似方案:
1、用户输入一个用户名,发送给服务器
2、服务器返回一个随机数,记做C
3、用户使用自己的密码unlock动态口令卡
4、用户输入C。动态口令卡计算f(C,time,seed),然后显示出来
5、用户把口令卡的结果发送给服务器6
6、用户锁住口令卡
将DKEY动态密码结合PAM认证方案,在PAM静态密码认证基础之上,增加一层宁盾动态密码(该密码是由硬件令牌产生,每隔60秒变化一次,密码一次使用有效)认证,用以提升Linux/Unix服务器安全。
网址:http://ndkey.com/zh/dkey_for_linux.html
Linux Pam认证:http://www.chineselinuxuniversity.net/articles/35383.shtml
Tencent 也有类似的产品:http://item.taobao.com/item.htm?spm=a230r.1.10.156.Stwlht&id=15704549799&_u=119u1sf4e9
淘宝一堆这样的产品:http://s.taobao.com/search?q=%C1%EE%C5%C6%CB%F8&initiative_id=staobaoz_20121201
RSA SecurID Software Token:
http://m.163.com/android/software/31teqh.html
使用TC采用RSA算法制作C语言代码:http://wenwen.soso.com/z/q188326537.htm
——————————————————————————————————————————
rsa编程1
要求输入p,q,e
输出d
算法描述为求逆元的方法
RSA 令牌 SID700 RSA SecurID
以前一直对这东西的原理很好奇。今天翻了些文档,略微整理如下:
1、密码:
登陆密码=f(静态密码,动态密码)。
静态密码就是用户自己设置的一个密码。
动态密码是通过卡动态生成的密码。
f是一个简单函数。例如不进位的加法、字符串拼接。
用户的静态密码最好是不要通过电脑键盘输入不通过网络传输的,所以很不推荐采用字符串拼接的方式。
2、构成
一个8位的处理器,一个时钟,一个LCD显示屏,一块电池。可能还会有一个键盘。
外壳的设计目标:一旦打开外壳,那么立即清空内存数据。
内部的设计目标:存储一个种子文件。然后按文件中的数据和当前时间拼起来进行AES,然后hash成6-8位的数字,显示在LCD上。
如果有键盘,那么用户可以通过键盘输入一串数字(用户的静态密码)。卡把这串数字(静态密码)与卡实际生成的数字(动态密码)用一种公开的算法(前面所说的那个f)进行组合,然后显示出来。通常采用的是不进位的加法。因此这个部件不是我们所需要关心的部分。
理论上来讲,如果知道种子、如果知道时间、如果知道生成器内部所采用的算法,那么我们就可以自行的算出这个动态密码。既然RSA公司敢发布软件版的生成器,那么就意味着它不怕这个算法被知道。事实上这个算法被hacker们公开已经是10年前的事情了。一个俄国hacker在发布自己的软件模拟器后留下这样一段话:
“RSA公司的伙计们:
如果你需要人帮助你设计安全的加密算法和协议,告诉我们,我们将会帮助你做出来。俄罗斯人并不都是熊。我们的国际象棋比你们下的好,记住!”
但是难点在于从卡中取走种子文件。就目前而言,是不可能通过它产生的随机序列反推回去得到它的种子文件的。
在网上看到了另一种类似方案:
1、用户输入一个用户名,发送给服务器
2、服务器返回一个随机数,记做C
3、用户使用自己的密码unlock动态口令卡
4、用户输入C。动态口令卡计算f(C,time,seed),然后显示出来
5、用户把口令卡的结果发送给服务器6
6、用户锁住口令卡
将DKEY动态密码结合PAM认证方案,在PAM静态密码认证基础之上,增加一层宁盾动态密码(该密码是由硬件令牌产生,每隔60秒变化一次,密码一次使用有效)认证,用以提升Linux/Unix服务器安全。
网址:http://ndkey.com/zh/dkey_for_linux.html
Linux Pam认证:http://www.chineselinuxuniversity.net/articles/35383.shtml
Tencent 也有类似的产品:http://item.taobao.com/item.htm?spm=a230r.1.10.156.Stwlht&id=15704549799&_u=119u1sf4e9
淘宝一堆这样的产品:http://s.taobao.com/search?q=%C1%EE%C5%C6%CB%F8&initiative_id=staobaoz_20121201
RSA SecurID Software Token:
http://m.163.com/android/software/31teqh.html
使用TC采用RSA算法制作C语言代码:http://wenwen.soso.com/z/q188326537.htm
——————————————————————————————————————————
rsa编程1
要求输入p,q,e
输出d
算法描述为求逆元的方法
一直以来,google android手机老是出现google talk身份验证失败,然后就是提示声音,这样道也习惯了,但偶尔还会收到在google上注册的gmail邮箱收到的邮件,但99%的时间都是身份验证失败,我估计是国内把那个域名或者System\etc\hosts文件的IP给屏蔽了,导致连接不上这个服务器,或者给防火墙堵了,不用也罢,但不想让它这样的骚扰,于是想卸载它,手机应用程序找不到google talk这个程序,有一次直接弄到root给相关服务卸载了,但手机开机挂了,返回去刷机,又给装回来了,这Google明明是一件好事,但这样整出个骚扰用户了,老是这么身份验证失败,我们也就用个google android玩玩,没有必要去细节深入其中的道理,我于是在网上找到这么一段:
./plugin/seopack/firstheader.php: $fp = @fopen('sitemap.xml', 'w+') or die('没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试.');
grep -r "没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试." ./
./plugin/seopack/firstheader.php: $fp = @fopen('sitemap.xml', 'w+') or die('没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试.');
vi ./plugin/seopack/firstheader.php
查看刚迁移过这个目录下的这个文件位置:
jackxiang@72.46.128.82:~/public_html# find . -name "sitemap.xml"
./sitemap.xml
发现自己的这个突然没有了,于是给touch一个,如下:
。。。
我在想怎么会给出现这个问题呢?我有时间问一下bob。
grep -r "没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试." ./
./plugin/seopack/firstheader.php: $fp = @fopen('sitemap.xml', 'w+') or die('没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试.');
vi ./plugin/seopack/firstheader.php
查看刚迁移过这个目录下的这个文件位置:
jackxiang@72.46.128.82:~/public_html# find . -name "sitemap.xml"
./sitemap.xml
发现自己的这个突然没有了,于是给touch一个,如下:
。。。
我在想怎么会给出现这个问题呢?我有时间问一下bob。
为PHP增加SVN扩展,不让PHP退出的启动方法:/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid 。
Unix/LinuxC技术 jackxiang 2012-2-28 15:40
最近的一个项目需要PHP与SVN交互,最先想到的解决方案是用PHP的SVN扩展,搜了已经有PHP的SVN扩展,这两天也去http:/pecl.php.net/package/svn 上面下载了SVN扩展的源码.【备注:比如我看到php的subversion扩展是有的, 不过手册里写的却是试用阶段. 应该不如python的成熟. 何况...我觉得这种事情确实应该让python干, 就像web的事情应该让php干一样.http:/blog.csdn.net/akara/article/details/5566524】
为PHP增加SVN扩展:
http:/www.swordair.com/blog/2010/01/85
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/ successed
至此,终于通过编译,并在完成的最后提示在php.ini中增加一行:
版本比较差异,这样导出差异文件,后覆盖线上即可:
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
svn diff -r 版本号1:版本号2 工作拷贝文件地址 > 保存差异文件
例:
svn diff -r PREV:COMMITTED ./project/trunk/helloworld.c > patch.c
写一个脚本测试一下,成功。
----------------------------------------------------------------------------------------------------
svn diff 比较两个目录:
svn diff --summarize http://rep_url/tags/proj1_090214 http://rep_url/trunk/proj1 >diff.txt
这个命令比较了 proj1_090214 和 proj1 的差异,并将差异信息输出到文件 diff.txt
summarize 选项的含义是只显示结果的概要,不显示文件的具体差异。
---------------------------------------------------------------------------------------------------
这样也成:
svn diff -r 3797:3788 --summarize https://tc-svn.XXXX.com/web/CCCC/web_aXc_proj/trunk
下面是给svn设置用户名密码来访问,特别是ssl这块否则在终端是可以的,但是在apache加载后会报错:
通过svn list 导出该目录下所有的文件。
svn list -R http:/192.168.1.11/svn/reponame/J2EE11 | wc -l
http:/192.168.1.11/svn 是 svn server 的root /reponame 是库 /J2EE11 是路径
这样会包括 目录
过滤目录
svn list -R svn_server_addr/svnrepo/folder | grep -v \/$ | wc -l
请在 linux 下运行 win 平台可以装cygwin .
获取目录的函数实践:
查询版本下的注释:
Please not that using svn_log without giving revisions is much, much slower then with revisions. Examples:
$ time php -r "svn_log('http://localhost/svn/shopadsl');"
real 0m2.140s
user 0m0.140s
sys 0m0.000s
VS
$ time php -r "svn_log('http://localhost/svn/shopadsl', 0, 45);"
real 0m0.063s
user 0m0.024s
sys 0m0.016s
默认svn在linux下的密码位置参考:http:/jackxiang.com/post/4512/
更多使用方法:http:/www.php.net/manual/en/function.svn-checkout.php
重启Apache
[plain] view plaincopy
/etc/init.d/apache2 reload
或php-fpm 重启:
[plain] view plaincopy
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
发现在Apache启动后会报错,解决方法如下:
If you having trouble with certificate verification like this:
PHP Warning: svn_log(): svn error(s) occured 175002 (RA layer request failed) OPTIONS of 'https://example.com/your/repos/path': Server certificate verification failed: issuer is not trusted
Try this two steps:
1. Run
"svn log https://example.com/your/repos/path"
on the commandline and permanent accept the certificate by typing "p" when asked.
2. Use the following settings for svn_auth_set_parameter() before calling other svn functions:
当然,也可以直接用PHP的Popen:
popen()这个函数, 看来echo t | svn ci ...那些命令可以用另外的方式来解决了
附转:
popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。
常用操作
1.查看最近3个版本日志
svn log [PATH] -v -l3
2.查看某两个版本,用来对比
svn log -r 14:15
3.日志放入文件
$ svn log -r 14 > mylog
$ svn log -r 19 >> mylog
$ svn log -r 27 >> mylog
$ cat mylog
或者
$ svn log –incremental -r 14 > mylog
$ svn log –incremental -r 19 >> mylog
$ svn log –incremental -r 27 >> mylog
$ cat mylog
参考:http:/www.php.net/manual/en/function.svn-checkout.php
你也可以参考:http:/blog.csdn.net/dragon8299/article/details/6689685
http:/www.swordair.com/blog/2010/01/85
http:/biancheng.dnbcw.info/win2003/377268.html
如果configure报下面的错
checking for svn includes... configure: error: failed to find svn_client.h
安装libsvn-dev包:CentOs应该也有对应的包
apt-get install libsvn-dev
解压缩后 切换到安装目录 执行/opt/lamp/php/bin/phpize
然后:./configure –with-php-config=/opt/lamp/php/bin/php-config
出现错误:checking for svn includes… configure: error: failed to find svn_client.h
解决办法:添加subversion服务端的目录 –with-svn=/usr/local/subversion
./configure –with-php-config=/opt/lamp/php/bin/php-config –with-svn=/usr/local/subversion
make出错:
/usr/bin/ld: cannot find -lsvn_client-1
ok
===================================================================
在Tlinux的64位机器上折腾步骤记录,我艹,比Cenots折腾了更多时间来整这个玩意,真是步步惊心啊,如下:
第一步:编译,参数如下 ,这个参数都折腾了老半天啊。
./configure --with-php-config=/usr/local/qqwebsrv/php/bin/php-config --with-svn=/opt/CollabNet_Subversion --with-svn-apr=/usr/local/apr
中间就会提示找不到什么.h啊:checking for svn includes... configure: error: failed to find svn_client.h,于是得找个这个h的包放在里面去才行。
root@10.12.21.108:~/software/svn-1.0.2# ls /usr/local/include/
subversion-1 subversion-1.tar.gz
第二步:/usr/local/apr-util/include/apr-1 这个Include进Makefile里。
修改Makefile: 39行左右
39 INCLUDES = -I/usr/local/qqwebsrv/php/include/php -I/usr/local/qqwebsrv/php/include/php/main -I/usr/local/qqwebsrv/php/includ e/php/TSRM -I/usr/local/qqwebsrv/php/include/php/Zend -I/usr/local/qqwebsrv/php/include/php/ext -I/usr/local/qqwebsrv/php/in clude/php/ext/date/lib -I/usr/local/include/subversion-1 -I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1 -DLINUX=2 -D_REENTRANT -D_GNU_SOURC
加入:/usr/local/apr-util/include/apr-1
-I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1
第三步:出现老是什么 cannot find -lsvn_client-1 ,做软链接后,出现下一个,太多了,于是否,如下:
全拷贝过去得了,注意:/opt/CollabNet_Subversion 这个是在网上找的整个包进行安装的SVN,是Rpm包。
cp -Rf /opt/CollabNet_Subversion/lib/* /usr/lib/
make
make install
root@10.12.22.108:~/software/svn-1.0.2# make install
Installing shared extensions: /usr/local/qqwebsrv/php/lib/extensions/
第四步:因发现在加入这个扩展后,出现:libsvn_client-1.so.0 cannot open shared object file no such file or directory
root@10.12.22.108:/# /sbin/ldconfig
/sbin/ldconfig: libraries libsasl2.so.2.0.21 and libsasl2.so.2.0.23 in directory /usr/lib have same soname but different type.
/sbin/ldconfig: libraries libgz.so.1 and libz.so.1.2.5 in directory /usr/lib have same soname but different type.
ldconfig: /usr/lib/libsvn_client-1.so.0 is not a symbolic link
根据上面的提示,于是删除掉这个文件:
rm -Rf /usr/lib/libsvn_client-1.so.0
上面两个不管它,就这样就好了。
第五步(经实践是多余的):
查找网上文章:http://www.cnblogs.com/amboyna/archive/2008/02/06/1065322.html
vi /etc/ld.so.conf
加上:
再运行这个PHP的SVN扩展,好了。前面的libsasl2,libgz,删除高版本的,做个软链接就Ok了。
但是TLamp有问题了,Apache出现了:
[codes=html]
Apache2 has detected a syntax error in your configuration files:
apache2: Syntax error on line 142 of /etc/apache2/httpd.conf: Cannot load /usr/lib64/apache2/modules/mod_ssl.so into server: /usr/lib64/apache2/modules/mod_ssl.so: undefined symbol: SSL_CTX_set_client_cert_cb
[codes=html]
于是,自己重新下了一个Apache,PHP5.3.11等,重新编译后,这个问题也就没有了,直接访问SVN扩展输出Ok了,还以为需要用system或者popen去打开呢,看来用不着了。
为了安全把一些函数都给屏蔽了,在php.ini里可以看到:
[codes=html]
disable_functions = passthru,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,system,exec
[codes=html]
因只为了这个svn扩展,PHP5.3.11的编译也很简单,如下:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs --enable-sockets --enable-mbstring
原本想加入其它的,现在想来,没有必要加上什么Mysql,Pdo,Mbstring等等。
(./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs --with-pdo=shared --with-pdo-mysql=/usr/local/mysql --enable-sockets --enable-mbstring)
EOF
为PHP增加SVN扩展:
http:/www.swordair.com/blog/2010/01/85
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/ successed
至此,终于通过编译,并在完成的最后提示在php.ini中增加一行:
版本比较差异,这样导出差异文件,后覆盖线上即可:
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
svn diff -r 版本号1:版本号2 工作拷贝文件地址 > 保存差异文件
例:
svn diff -r PREV:COMMITTED ./project/trunk/helloworld.c > patch.c
写一个脚本测试一下,成功。
----------------------------------------------------------------------------------------------------
svn diff 比较两个目录:
svn diff --summarize http://rep_url/tags/proj1_090214 http://rep_url/trunk/proj1 >diff.txt
这个命令比较了 proj1_090214 和 proj1 的差异,并将差异信息输出到文件 diff.txt
summarize 选项的含义是只显示结果的概要,不显示文件的具体差异。
---------------------------------------------------------------------------------------------------
这样也成:
svn diff -r 3797:3788 --summarize https://tc-svn.XXXX.com/web/CCCC/web_aXc_proj/trunk
下面是给svn设置用户名密码来访问,特别是ssl这块否则在终端是可以的,但是在apache加载后会报错:
通过svn list 导出该目录下所有的文件。
svn list -R http:/192.168.1.11/svn/reponame/J2EE11 | wc -l
http:/192.168.1.11/svn 是 svn server 的root /reponame 是库 /J2EE11 是路径
这样会包括 目录
过滤目录
svn list -R svn_server_addr/svnrepo/folder | grep -v \/$ | wc -l
请在 linux 下运行 win 平台可以装cygwin .
获取目录的函数实践:
查询版本下的注释:
Please not that using svn_log without giving revisions is much, much slower then with revisions. Examples:
$ time php -r "svn_log('http://localhost/svn/shopadsl');"
real 0m2.140s
user 0m0.140s
sys 0m0.000s
VS
$ time php -r "svn_log('http://localhost/svn/shopadsl', 0, 45);"
real 0m0.063s
user 0m0.024s
sys 0m0.016s
默认svn在linux下的密码位置参考:http:/jackxiang.com/post/4512/
更多使用方法:http:/www.php.net/manual/en/function.svn-checkout.php
重启Apache
[plain] view plaincopy
/etc/init.d/apache2 reload
或php-fpm 重启:
[plain] view plaincopy
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
发现在Apache启动后会报错,解决方法如下:
If you having trouble with certificate verification like this:
PHP Warning: svn_log(): svn error(s) occured 175002 (RA layer request failed) OPTIONS of 'https://example.com/your/repos/path': Server certificate verification failed: issuer is not trusted
Try this two steps:
1. Run
"svn log https://example.com/your/repos/path"
on the commandline and permanent accept the certificate by typing "p" when asked.
2. Use the following settings for svn_auth_set_parameter() before calling other svn functions:
当然,也可以直接用PHP的Popen:
popen()这个函数, 看来echo t | svn ci ...那些命令可以用另外的方式来解决了
附转:
popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。
常用操作
1.查看最近3个版本日志
svn log [PATH] -v -l3
2.查看某两个版本,用来对比
svn log -r 14:15
3.日志放入文件
$ svn log -r 14 > mylog
$ svn log -r 19 >> mylog
$ svn log -r 27 >> mylog
$ cat mylog
或者
$ svn log –incremental -r 14 > mylog
$ svn log –incremental -r 19 >> mylog
$ svn log –incremental -r 27 >> mylog
$ cat mylog
参考:http:/www.php.net/manual/en/function.svn-checkout.php
你也可以参考:http:/blog.csdn.net/dragon8299/article/details/6689685
http:/www.swordair.com/blog/2010/01/85
http:/biancheng.dnbcw.info/win2003/377268.html
如果configure报下面的错
checking for svn includes... configure: error: failed to find svn_client.h
安装libsvn-dev包:CentOs应该也有对应的包
apt-get install libsvn-dev
解压缩后 切换到安装目录 执行/opt/lamp/php/bin/phpize
然后:./configure –with-php-config=/opt/lamp/php/bin/php-config
出现错误:checking for svn includes… configure: error: failed to find svn_client.h
解决办法:添加subversion服务端的目录 –with-svn=/usr/local/subversion
./configure –with-php-config=/opt/lamp/php/bin/php-config –with-svn=/usr/local/subversion
make出错:
/usr/bin/ld: cannot find -lsvn_client-1
ok
===================================================================
在Tlinux的64位机器上折腾步骤记录,我艹,比Cenots折腾了更多时间来整这个玩意,真是步步惊心啊,如下:
第一步:编译,参数如下 ,这个参数都折腾了老半天啊。
./configure --with-php-config=/usr/local/qqwebsrv/php/bin/php-config --with-svn=/opt/CollabNet_Subversion --with-svn-apr=/usr/local/apr
中间就会提示找不到什么.h啊:checking for svn includes... configure: error: failed to find svn_client.h,于是得找个这个h的包放在里面去才行。
root@10.12.21.108:~/software/svn-1.0.2# ls /usr/local/include/
subversion-1 subversion-1.tar.gz
第二步:/usr/local/apr-util/include/apr-1 这个Include进Makefile里。
修改Makefile: 39行左右
39 INCLUDES = -I/usr/local/qqwebsrv/php/include/php -I/usr/local/qqwebsrv/php/include/php/main -I/usr/local/qqwebsrv/php/includ e/php/TSRM -I/usr/local/qqwebsrv/php/include/php/Zend -I/usr/local/qqwebsrv/php/include/php/ext -I/usr/local/qqwebsrv/php/in clude/php/ext/date/lib -I/usr/local/include/subversion-1 -I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1 -DLINUX=2 -D_REENTRANT -D_GNU_SOURC
加入:/usr/local/apr-util/include/apr-1
-I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1
第三步:出现老是什么 cannot find -lsvn_client-1 ,做软链接后,出现下一个,太多了,于是否,如下:
全拷贝过去得了,注意:/opt/CollabNet_Subversion 这个是在网上找的整个包进行安装的SVN,是Rpm包。
cp -Rf /opt/CollabNet_Subversion/lib/* /usr/lib/
make
make install
root@10.12.22.108:~/software/svn-1.0.2# make install
Installing shared extensions: /usr/local/qqwebsrv/php/lib/extensions/
第四步:因发现在加入这个扩展后,出现:libsvn_client-1.so.0 cannot open shared object file no such file or directory
root@10.12.22.108:/# /sbin/ldconfig
/sbin/ldconfig: libraries libsasl2.so.2.0.21 and libsasl2.so.2.0.23 in directory /usr/lib have same soname but different type.
/sbin/ldconfig: libraries libgz.so.1 and libz.so.1.2.5 in directory /usr/lib have same soname but different type.
ldconfig: /usr/lib/libsvn_client-1.so.0 is not a symbolic link
根据上面的提示,于是删除掉这个文件:
rm -Rf /usr/lib/libsvn_client-1.so.0
上面两个不管它,就这样就好了。
第五步(经实践是多余的):
查找网上文章:http://www.cnblogs.com/amboyna/archive/2008/02/06/1065322.html
vi /etc/ld.so.conf
加上:
再运行这个PHP的SVN扩展,好了。前面的libsasl2,libgz,删除高版本的,做个软链接就Ok了。
但是TLamp有问题了,Apache出现了:
[codes=html]
Apache2 has detected a syntax error in your configuration files:
apache2: Syntax error on line 142 of /etc/apache2/httpd.conf: Cannot load /usr/lib64/apache2/modules/mod_ssl.so into server: /usr/lib64/apache2/modules/mod_ssl.so: undefined symbol: SSL_CTX_set_client_cert_cb
[codes=html]
于是,自己重新下了一个Apache,PHP5.3.11等,重新编译后,这个问题也就没有了,直接访问SVN扩展输出Ok了,还以为需要用system或者popen去打开呢,看来用不着了。
为了安全把一些函数都给屏蔽了,在php.ini里可以看到:
[codes=html]
disable_functions = passthru,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,system,exec
[codes=html]
因只为了这个svn扩展,PHP5.3.11的编译也很简单,如下:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs --enable-sockets --enable-mbstring
原本想加入其它的,现在想来,没有必要加上什么Mysql,Pdo,Mbstring等等。
(./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs --with-pdo=shared --with-pdo-mysql=/usr/local/mysql --enable-sockets --enable-mbstring)
EOF
近来看一个Js函数如下:
对这个eventstop(e);,有点迷惑
Demo:
近来发现比如页面点击位置监控,目前有用坐标的,但会因为屏幕的大小导致不一致,可能不是很准,用如下直接监控id就好很多,
再就是一个div里有很多个button,或者其他div,如果一个一个的去写它的调用函数,这样会很麻烦,于是这个冒泡的思想也就出来了,如下(注意在:IE和Firefox下不是特别一样):
Js兄弟说是让我查找了一下事件冒泡,这个文章写得好,能解惑:http://justcoding.iteye.com/blog/587876
Query对DOM的事件触发具有冒泡特性。有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡。这个时候就要阻止 jQuery.Event冒泡。
在jQuery.Event 的文档 中的开头得知,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。
jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();
但是这个方法对使用live 绑 定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;
另外 JavaScript 阻止冒泡
阻止冒泡事件的方法有两种,第一种是IE的方法,第二种是DOM方法,至于为什么要分为两种方法去讨论之,这里就不做讨论了,总之是浏览器一些蹩 脚的问题,好了废话不说了,直接贴代码了:
举个例子:就是谷歌首页的更多选项吧,不知道的可以去看看http://www.google.com/ 。
这里要应用两个点击事件,一个是div.onclick,另一个就是document.onclick,那么问题就出现了,在调用 div.onclick的时候,由于冒泡事件的存在,会自动的调用document.onclick,由于冒泡的顺序是从里向外的
(div->body->document->html)所以div.onclick事件就会被覆盖掉,也就不会执行了,解决的方案其 实也是很简单的哦,就是在执行div.onclick的时候阻止冒泡事件就好了,那怎么阻止呢,就调用上面的函数就ok了!哈哈!
ps:在介绍 一下阻止浏览器默认行为的方法,大同小异,这里就不再赘述了。
正是这个函数,如下:
对这个eventstop(e);,有点迷惑
Demo:
近来发现比如页面点击位置监控,目前有用坐标的,但会因为屏幕的大小导致不一致,可能不是很准,用如下直接监控id就好很多,
再就是一个div里有很多个button,或者其他div,如果一个一个的去写它的调用函数,这样会很麻烦,于是这个冒泡的思想也就出来了,如下(注意在:IE和Firefox下不是特别一样):
Js兄弟说是让我查找了一下事件冒泡,这个文章写得好,能解惑:http://justcoding.iteye.com/blog/587876
Query对DOM的事件触发具有冒泡特性。有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡。这个时候就要阻止 jQuery.Event冒泡。
在jQuery.Event 的文档 中的开头得知,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。
jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();
但是这个方法对使用live 绑 定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;
另外 JavaScript 阻止冒泡
阻止冒泡事件的方法有两种,第一种是IE的方法,第二种是DOM方法,至于为什么要分为两种方法去讨论之,这里就不做讨论了,总之是浏览器一些蹩 脚的问题,好了废话不说了,直接贴代码了:
举个例子:就是谷歌首页的更多选项吧,不知道的可以去看看http://www.google.com/ 。
这里要应用两个点击事件,一个是div.onclick,另一个就是document.onclick,那么问题就出现了,在调用 div.onclick的时候,由于冒泡事件的存在,会自动的调用document.onclick,由于冒泡的顺序是从里向外的
(div->body->document->html)所以div.onclick事件就会被覆盖掉,也就不会执行了,解决的方案其 实也是很简单的哦,就是在执行div.onclick的时候阻止冒泡事件就好了,那怎么阻止呢,就调用上面的函数就ok了!哈哈!
ps:在介绍 一下阻止浏览器默认行为的方法,大同小异,这里就不再赘述了。
正是这个函数,如下:
https://gitee.com/surprise/Chrome.Website.Ip
显示网站 ip WebsiteIP
主要有几个场景:
平时修改了 host 切换 ip 后,不知道访问的站点 ip
想知道当前站的 ip
演示图片 demo
下载地址
chrome 商店:https://chrome.google.com/webstore/detail/%E7%BD%91%E7%AB%99ip/eaghlkamibfjbicomdmbbohljdhicpgb
快捷键说明
快捷键:
按ESC切换展示和隐藏左下角IP
双击地址复制 IP
无法打开商店如何安装
点击chrome浏览器最右侧的按钮(就是最右边的按钮嘛)-> 工具 -> 扩展程序 (或者地址栏输入chrome://extensions/)
样反查一个IP上有哪些网站域名?怎样查询有多少个域名指向了某个IP?使用下面的这个网站即可:http://www.domaintools.com/research/reverse-ip/
---------------------------------------------------------------------
ip72.46.128.86
22d4.com
54147.com
luxzip.com
AND 144 other domains… 好像要登录注册才能看剩下的一百多个域名。
Chrome 网站IP插件:
https://gitee.com/surprise/Chrome.Website.Ip
显示网站 ip WebsiteIP
主要有几个场景:
平时修改了 host 切换 ip 后,不知道访问的站点 ip
想知道当前站的 ip
演示图片 demo
下载地址
chrome 商店:https://chrome.google.com/webstore/detail/%E7%BD%91%E7%AB%99ip/eaghlkamibfjbicomdmbbohljdhicpgb
快捷键说明
快捷键:
按ESC切换展示和隐藏左下角IP
双击地址复制 IP
无法打开商店如何安装
点击chrome浏览器最右侧的按钮(就是最右边的按钮嘛)-> 工具 -> 扩展程序 (或者地址栏输入chrome://extensions/)
样反查一个IP上有哪些网站域名?怎样查询有多少个域名指向了某个IP?使用下面的这个网站即可:http://www.domaintools.com/research/reverse-ip/
---------------------------------------------------------------------
ip72.46.128.86
22d4.com
54147.com
luxzip.com
AND 144 other domains… 好像要登录注册才能看剩下的一百多个域名。
Chrome 网站IP插件:
https://gitee.com/surprise/Chrome.Website.Ip