为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
背景:十进制日志是用来恢复数据用的,但是呢,往往我们是想通过看二进制日志进行看慢sql。
284M /data/mysql/mysql-bin.000023
674M /data/mysql/mysql-bin.000024
831M /data/mysql/mysql-bin.000022
mysql-bin.0000* 这些是mysql运行过程中的操作日志。
保留的话:当你数据丢失可用来恢复数据,当你需要主从复制时需要靠这些文件。
不保留的话:节省空间,加快mysql速度。
关闭办法:
找到my.cnf或者my.ini文件,把 “ log-bin= ” 这个参数用#号注释掉,然后重启mysql就可以。
折中办法:
在my.cnf或者my.ini文件中,log-bin参数后面,加入expire_logs_days=15。意思就是日志保留15天。然后重启mysql就可以。
把现有的log-bin清了: purge master logs before now()
#log_bin = mysql-bin
#binlog_format = mixed
#expire_logs_days = 1
http://outofmemory.cn/code-snippet/4291/clear-mysql-bin-with-mysql-command-reset-master
0) mysql bin-log 主从配置:
http://blog.csdn.net/zbfaaadjl/article/details/18557975
一)浅析MySql二进制日志的应用:
http://www.blogjava.net/dongbule/archive/2010/09/04/331050.html
log-bin=/data/db/binLogs
binlog_format=mixed
#log-bin = mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径,如:/home/www/mysql_bin_log/mysql-bin
expire_logs_days = 2 # 自动清理 2 天前的log文件,可根据需要修改
启动后是这样的:
[root@localhost db]# ls /data/db/
binLogs binLogs.000001 binLogs.000002 binLogs.index mysql
所以,得修改成如下所示:
于是关闭重启也就对了(关闭mysql的方法:http://jackxiang.com/post/3531/),如下:
ls /data/db/binLogs/
mysql-bin.000001 mysql-bin.index
二)对mysql日志进行操作的总结包括 启用,过期自动删除 等:
http://www.cnblogs.com/cocos/archive/2010/12/22/1913557.html
三)清除mysql的log-bin日志,mysql5.6 log-bin操作:
http://blog.163.com/zjc_8886/blog/static/2408175201411394628257/
查看mysql是否开启log-bin日志:show variables like '%log%'
默认开启log-bin日志,默认安装路径为C:\ProgramData\MySQL\MySQL Server 5.6。
修改该目录下my.ini文件,把log-bin前面的#去掉,
后面是存储log-bin的日志位置。
log-bin=C:/ProgramData/MySQL/MySQL Server 5.6/mylog-bin.log
查看mysql bin-log日志命令:show binary logs
产生新的bin-log日志文件命令:flush logs
删除bin-log日志文件命令:purge binary logs to 'mysql-bin.000018'; mysql-bin.000018为文件名称。
全部删除bin-log日志命令:reset master
查看日志事件命令为:show binlog events;
或查看某个日志详细信息:show binlog events in 'mysql_bin.000001'\G
通过bin-log恢复数据:mysqlbinlog mysql_bin.000001 | mysql -uroot -proot
mysqlbinlog后可以跟(--start-date="" --stop-date="" ,或--start-positon="100" --stop-postion="200")
也可以直接导出sql文件: mysqlbinlog mysql_bin.000001 >d:\my.sql 通过source d:\my.sql 导入数据库。
可以查看表是否为分区表 :SHOW TABLE STATUS
查看表中最新bin-log信息 :SHOW master STATUS
.frm 代表表中的结构,.MYD代表表中的数据,.MYI代表表中的索引。
四)脚本清除n天以前的日志文件以及mysql-bin文件:
http://blog.chinaunix.net/uid-11121450-id-335163.html
PURGE {MASTER | BINARY} LOGS TO 'log_name' --用于删除指定的日志
PURGE {MASTER | BINARY} LOGS BEFORE 'date' --用于删除日期之前的日志,BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式
如:(MASTER 和BINARY 在这里都是等效的)
PURGE MASTER LOGS TO 'test-bin.000001'; //后面脚本会用到。
PURGE MASTER LOGS BEFORE '2011-01-0100:00:00';
——————————————————————————————————————————
MySQL运行时间长了之后,二进制日志会占用大量硬盘空间,清楚这些日志的命令如下:
我把这个日志给停了:
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
来自:http://rashost.com/blog/remove-mysql-bin-log
——————————————————————————————————————————
前些日子,系统上线了,发现tomcat 下的日志增长得挺快的,写了个脚本清除n天以前的日志
web_def_tomcat_log_path=/Application/tomcat/log
$web_def_tomcat_log_expire_days=7
if [ "$web_def_tomcat_log_expire_days" -gt 0 ]
then
echo "find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;"
find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;
fi
由于web的mysql下面挂的同步太多了,每天产生1-2G的mysql-bin文件,因此也写了个清除mysql-bin的文件,这个文件会至少保留最新的一个mysql-bin.0*文件
web_def_host="1.2.3.4" #mysql的ip
web_def_port=3306 #mysql的端口
web_def_username="tester" #mysql的用户
web_def_password="123" #mysql的密码
web_def_mysql_expire_logs_days=7 #删除7天以前的mysql-bin,但是最后至少保留一个文件
mysql_exe="mysql -h $web_def_host -P $web_def_port -u $web_def_username --password=$web_def_password -e "
if [ "$web_def_mysql_expire_logs_days" -gt 0 ]
then
#获取n天以前被修改的mysql-bin文件,
logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name 'mysql-bin.0*' |sort|head -1`
if [ "$logFileName" != "" ]
then
logFileName=`basename $logFileName`
echo $mysql_exe "\"PURGE MASTER LOGS TO '$logFileName'\""
$mysql_exe "PURGE MASTER LOGS TO '$logFileName'";
fi
fi
上面这两个脚本,需要在crontab 里每天执行一次,定时删除n天以前的日志文件
end
shell入门的拦路虎:syntax error: unexpected end of file,把上面的代码转一下就Ok了,原因是\r\n\r\n的问题:
http://www.2cto.com/os/201302/191298.html
实践Ok如下:
原理就是查找到文件后,去mysql终端里给用命令删除掉:
find /data/db/binLogs/ -follow -atime -1 -name 'mysql-bin.0*'|sort|head -1
/data/db/binLogs/mysql-bin.000001
[root@localhost scripts]# dos2unix ./clearMySqlsBinLogFile.sh
dos2unix: converting file ./clearMySqlsBinLogFile.sh to UNIX format ...
删除bin-log日志:http://laowafang.blog.51cto.com/251518/790929
284M /data/mysql/mysql-bin.000023
674M /data/mysql/mysql-bin.000024
831M /data/mysql/mysql-bin.000022
mysql-bin.0000* 这些是mysql运行过程中的操作日志。
保留的话:当你数据丢失可用来恢复数据,当你需要主从复制时需要靠这些文件。
不保留的话:节省空间,加快mysql速度。
关闭办法:
找到my.cnf或者my.ini文件,把 “ log-bin= ” 这个参数用#号注释掉,然后重启mysql就可以。
折中办法:
在my.cnf或者my.ini文件中,log-bin参数后面,加入expire_logs_days=15。意思就是日志保留15天。然后重启mysql就可以。
把现有的log-bin清了: purge master logs before now()
#log_bin = mysql-bin
#binlog_format = mixed
#expire_logs_days = 1
http://outofmemory.cn/code-snippet/4291/clear-mysql-bin-with-mysql-command-reset-master
0) mysql bin-log 主从配置:
http://blog.csdn.net/zbfaaadjl/article/details/18557975
一)浅析MySql二进制日志的应用:
http://www.blogjava.net/dongbule/archive/2010/09/04/331050.html
log-bin=/data/db/binLogs
binlog_format=mixed
#log-bin = mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径,如:/home/www/mysql_bin_log/mysql-bin
expire_logs_days = 2 # 自动清理 2 天前的log文件,可根据需要修改
启动后是这样的:
[root@localhost db]# ls /data/db/
binLogs binLogs.000001 binLogs.000002 binLogs.index mysql
所以,得修改成如下所示:
于是关闭重启也就对了(关闭mysql的方法:http://jackxiang.com/post/3531/),如下:
ls /data/db/binLogs/
mysql-bin.000001 mysql-bin.index
二)对mysql日志进行操作的总结包括 启用,过期自动删除 等:
http://www.cnblogs.com/cocos/archive/2010/12/22/1913557.html
三)清除mysql的log-bin日志,mysql5.6 log-bin操作:
http://blog.163.com/zjc_8886/blog/static/2408175201411394628257/
查看mysql是否开启log-bin日志:show variables like '%log%'
默认开启log-bin日志,默认安装路径为C:\ProgramData\MySQL\MySQL Server 5.6。
修改该目录下my.ini文件,把log-bin前面的#去掉,
后面是存储log-bin的日志位置。
log-bin=C:/ProgramData/MySQL/MySQL Server 5.6/mylog-bin.log
查看mysql bin-log日志命令:show binary logs
产生新的bin-log日志文件命令:flush logs
删除bin-log日志文件命令:purge binary logs to 'mysql-bin.000018'; mysql-bin.000018为文件名称。
全部删除bin-log日志命令:reset master
查看日志事件命令为:show binlog events;
或查看某个日志详细信息:show binlog events in 'mysql_bin.000001'\G
通过bin-log恢复数据:mysqlbinlog mysql_bin.000001 | mysql -uroot -proot
mysqlbinlog后可以跟(--start-date="" --stop-date="" ,或--start-positon="100" --stop-postion="200")
也可以直接导出sql文件: mysqlbinlog mysql_bin.000001 >d:\my.sql 通过source d:\my.sql 导入数据库。
可以查看表是否为分区表 :SHOW TABLE STATUS
查看表中最新bin-log信息 :SHOW master STATUS
.frm 代表表中的结构,.MYD代表表中的数据,.MYI代表表中的索引。
四)脚本清除n天以前的日志文件以及mysql-bin文件:
http://blog.chinaunix.net/uid-11121450-id-335163.html
PURGE {MASTER | BINARY} LOGS TO 'log_name' --用于删除指定的日志
PURGE {MASTER | BINARY} LOGS BEFORE 'date' --用于删除日期之前的日志,BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式
如:(MASTER 和BINARY 在这里都是等效的)
PURGE MASTER LOGS TO 'test-bin.000001'; //后面脚本会用到。
PURGE MASTER LOGS BEFORE '2011-01-0100:00:00';
——————————————————————————————————————————
MySQL运行时间长了之后,二进制日志会占用大量硬盘空间,清楚这些日志的命令如下:
我把这个日志给停了:
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
来自:http://rashost.com/blog/remove-mysql-bin-log
——————————————————————————————————————————
前些日子,系统上线了,发现tomcat 下的日志增长得挺快的,写了个脚本清除n天以前的日志
web_def_tomcat_log_path=/Application/tomcat/log
$web_def_tomcat_log_expire_days=7
if [ "$web_def_tomcat_log_expire_days" -gt 0 ]
then
echo "find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;"
find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;
fi
由于web的mysql下面挂的同步太多了,每天产生1-2G的mysql-bin文件,因此也写了个清除mysql-bin的文件,这个文件会至少保留最新的一个mysql-bin.0*文件
web_def_host="1.2.3.4" #mysql的ip
web_def_port=3306 #mysql的端口
web_def_username="tester" #mysql的用户
web_def_password="123" #mysql的密码
web_def_mysql_expire_logs_days=7 #删除7天以前的mysql-bin,但是最后至少保留一个文件
mysql_exe="mysql -h $web_def_host -P $web_def_port -u $web_def_username --password=$web_def_password -e "
if [ "$web_def_mysql_expire_logs_days" -gt 0 ]
then
#获取n天以前被修改的mysql-bin文件,
logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name 'mysql-bin.0*' |sort|head -1`
if [ "$logFileName" != "" ]
then
logFileName=`basename $logFileName`
echo $mysql_exe "\"PURGE MASTER LOGS TO '$logFileName'\""
$mysql_exe "PURGE MASTER LOGS TO '$logFileName'";
fi
fi
上面这两个脚本,需要在crontab 里每天执行一次,定时删除n天以前的日志文件
end
shell入门的拦路虎:syntax error: unexpected end of file,把上面的代码转一下就Ok了,原因是\r\n\r\n的问题:
http://www.2cto.com/os/201302/191298.html
实践Ok如下:
原理就是查找到文件后,去mysql终端里给用命令删除掉:
find /data/db/binLogs/ -follow -atime -1 -name 'mysql-bin.0*'|sort|head -1
/data/db/binLogs/mysql-bin.000001
[root@localhost scripts]# dos2unix ./clearMySqlsBinLogFile.sh
dos2unix: converting file ./clearMySqlsBinLogFile.sh to UNIX format ...
删除bin-log日志:http://laowafang.blog.51cto.com/251518/790929
近来发现chrome浏览器每次启动的时候总会打开最后一次关闭的网页,后来发现在选项->基本设置->启用 :
1)打开主页
2)重新打开最后一次打开的网页
3)打开以下网页:
这个不知道什么时修改给搞成第三项了,选择第一项就行了。
1)打开主页
2)重新打开最后一次打开的网页
3)打开以下网页:
这个不知道什么时修改给搞成第三项了,选择第一项就行了。
[个人原创]CentOS6.2 下 7z的源码安装
Unix/LinuxC技术 jackxiang 2012-2-25 22:13
近来PHP的一个扩展爆出一个libpng的漏洞,我记录了一下: http://jackxiang.com/post/4975/ ,于是就去那个网站下载最新版本的libpng:
http://libpng.sourceforge.net/ 没有想到下载了一个7z结尾的文件,lpng159.7z
于是否就问了一下Google大神。Linux下的7Zip的解决方案是 p7zip ,于是对应的两用下载方法。
1.万能的Yum
[root@ hostname ~] #
[centos6.2好像不行,不知道还是yum源头的问题]
2.源代码下载编译
下载地址:http://p7zip.sourceforge.net/
Wget以下Url:
http://downloads.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fp7zip%2F&ts=1330178243&use_mirror=nchc
当然,这里不会出现乌龙的7zip的源码包。这里出现的是tar.bz2 包。
1.解压
2.安装
在进行make install 命令的时候提示No such file or directory,则使用 sudo make install 命令。
3.使用,解压7Zip包
1 [root@ hostname ~] # 7za x lpng159.7z
.......
Everything is Ok
Folders: 21
Files: 200
Size: 3011760
Compressed: 497174
后面就是重新编译一次以替换掉这个旧的版本即可。
http://libpng.sourceforge.net/ 没有想到下载了一个7z结尾的文件,lpng159.7z
于是否就问了一下Google大神。Linux下的7Zip的解决方案是 p7zip ,于是对应的两用下载方法。
1.万能的Yum
[root@ hostname ~] #
[centos6.2好像不行,不知道还是yum源头的问题]
2.源代码下载编译
下载地址:http://p7zip.sourceforge.net/
Wget以下Url:
http://downloads.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fp7zip%2F&ts=1330178243&use_mirror=nchc
当然,这里不会出现乌龙的7zip的源码包。这里出现的是tar.bz2 包。
1.解压
2.安装
在进行make install 命令的时候提示No such file or directory,则使用 sudo make install 命令。
3.使用,解压7Zip包
1 [root@ hostname ~] # 7za x lpng159.7z
.......
Everything is Ok
Folders: 21
Files: 200
Size: 3011760
Compressed: 497174
后面就是重新编译一次以替换掉这个旧的版本即可。
阿里巴巴集团和阿里巴巴网络有限公司今天联合宣布,阿里巴巴集团向阿里巴巴网络有限公司董事会提出私有化要约。阿里巴巴集团及其一致行动人目前持有此上市公司73.5%的股份。以下是马云写给阿里巴巴全体员工的信:阅读全文
1、下载驱动程序。
地址:http://www.broadcom.com/support/802.11/linux_sta.php
根据你的机器选择32位或者64位驱动。我这里是hybrid-portsrc_x86_32-v5_100_82_112.tar.gz
2.解压下载的驱动文件,“tar -zxvf xxxx.tar.gz”。
3.进入解压目录,输入“make”,“make install”编译。
4.看到生成“wl.ko”文件和显示所在的路径,进入该路径。
5.加载“wl.ko”模块,输入“insmod wl.ko”,如果出错,可以先输入“modprobe cfg80211”或者“modprobe lib80211”或者“ieee80211_crypt_tkip (depending on your os)”。
6.重启“reboot”后继续配置。
7.进入到第4步的路径,输入“depmod -a”,“echo modeprobe wl >> /etc/rc.local”
8.To enable monitor mode:输入“echo 1 > /proc/brcm_monitor0”
9.reboot测试。
来自:http://hi.baidu.com/xujin421281/blog/item/67162a09b226eb97d53f7c1c.html
阅读全文
地址:http://www.broadcom.com/support/802.11/linux_sta.php
根据你的机器选择32位或者64位驱动。我这里是hybrid-portsrc_x86_32-v5_100_82_112.tar.gz
2.解压下载的驱动文件,“tar -zxvf xxxx.tar.gz”。
3.进入解压目录,输入“make”,“make install”编译。
4.看到生成“wl.ko”文件和显示所在的路径,进入该路径。
5.加载“wl.ko”模块,输入“insmod wl.ko”,如果出错,可以先输入“modprobe cfg80211”或者“modprobe lib80211”或者“ieee80211_crypt_tkip (depending on your os)”。
6.重启“reboot”后继续配置。
7.进入到第4步的路径,输入“depmod -a”,“echo modeprobe wl >> /etc/rc.local”
8.To enable monitor mode:输入“echo 1 > /proc/brcm_monitor0”
9.reboot测试。
来自:http://hi.baidu.com/xujin421281/blog/item/67162a09b226eb97d53f7c1c.html
阅读全文
今天下载了一个SecureCRT5.1.3中文版,安装完以后,将我原来用的英文版的config文件夹复制到中文版默认文件夹下,可是登陆路由器的时候提示“数据库未找到防火墙"none”这个会话将尝试连接”确定以后就可以连接上。
主要是因为中文版中,在.ini文件(包括默认文件和登陆文件)认为S:"Firewall Name"=无,是没有防火墙。而英文版中是S:"Firewall Name"=None,这样中文版就会认为有一个名字为None的防火墙,因此会提示说没有找到名字为"None"的防火墙。把这个None改成“无”就好了。
反之,把“无”改为“None”即可。注意,区分大小写。
操作步骤:
选项->全局选项->常规->配置文件夹->找到这们folder的位置后,再直接:查找所有的ini文件,找到出现未找到防火墙None的这个ip的ini,打开这个ini后,将"Firewall Name"=无 修改为"Firewall Name"=None,及可。当然你要是嫌弃麻烦,也可以批量脚本替换。注意:None中的N是大写。
主要是因为中文版中,在.ini文件(包括默认文件和登陆文件)认为S:"Firewall Name"=无,是没有防火墙。而英文版中是S:"Firewall Name"=None,这样中文版就会认为有一个名字为None的防火墙,因此会提示说没有找到名字为"None"的防火墙。把这个None改成“无”就好了。
反之,把“无”改为“None”即可。注意,区分大小写。
操作步骤:
选项->全局选项->常规->配置文件夹->找到这们folder的位置后,再直接:查找所有的ini文件,找到出现未找到防火墙None的这个ip的ini,打开这个ini后,将"Firewall Name"=无 修改为"Firewall Name"=None,及可。当然你要是嫌弃麻烦,也可以批量脚本替换。注意:None中的N是大写。
今天在网上找到一个小程序,一编译出现一大堆的
错误: 程序中有游离的 ......
开始觉得可能我从网页上直接复制的代码中有别的字符。于是把中文的全角空格全部替换了。
这次好多了,少了一些,不过还有很多,调试信息说是XX行有游离的。。。哪怕我把他全部删除,手动输入也不行。。。
baidu了一下找到一个高手的一个解决方法:
od -c das-server.c > log.txt
终于找到了,其实不是那一行,而是别的行有 302 240 等。
删除了,终于好了,小记一下。
http://blog.csdn.net/wuff1988/article/details/7067373
1. 程序(*.c,*.h)中使用了中文的标点符号(全角),比如;,},+。
改成英文的标点半角符号就行了。
甚至有时候空格也会出现类似错误,删掉该空格 重新输入。
vim里面做类似替换还是很容易的。
如何看到报错的符号?
od -c hello.c > log.txt
在log中就能看到符号了
2. 如果替换成了英文标点还出错的话,还报此错误,那么就是文件存贮格式的问题了。
一般在windows下的文件都存成ansi格式,为了在linux下能通用,建议保存成UTF-8不带BOM
编码格式,因为目前gcc和g++不支持UTF-8带BOM编码格式。
用g++编译的时候碰到UTF-8 BOM错误怎么办?
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: 错误: 程序中有游离的’\357′
unit_test.cpp:1: 错误: 程序中有游离的’\273′
unit_test.cpp:1: 错误: 程序中有游离的’\277′
In file included from unit_test.cpp:63:
…
或在英文系统下:
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: error: stray ‘\357′ in program
unit_test.cpp:1: error: stray ‘\273′ in program
unit_test.cpp:1: error: stray ‘\277′ in program
In file included from unit_test.cpp:63:
…
如何判断文件是否是使用UTF-8 BOM存储的?
执行下面的命令:
$ cat cpp/src/unit_test/unit_test.cpp |hd -n 10
00000000 ef bb bf 2f 2a 2a 2a 2a 2a 2a |…/******|
0000000a
linux下c编程有时会遇到 :
wanglitaotest.c:4: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:4: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:4: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:4: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘char’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\214’
解决办法
1.程序中输入的字符: , ; " ' / 等符号,有可能是使用的中文输入发输入的
2.程序中有使用全角拼音的现象
把程序完全用 英语输入,半角输入运行正常
错误提示 : a.c:6: 错误:程序中有游离的 ‘\200’
a.c:6: 错误:程序中有游离的 ‘\200’
a.c:8: 错误:程序中有游离的 ‘\343’
a.c:8: 错误:程序中有游离的 ‘\200’
a.c:8: 错误:程序中有游离的 ‘\200’
原因
这个错误一般是由于你程序(a.c)中使用了中文的标点符号,比如;,},+。
改成英文的就行了。
甚至有时候空格也会出现类似错误,删掉该空格 重新输入。
如果找不出来,解决的办法就是关闭中文输入法然后把有错这一行重新敲一遍。
来自:http://blog.163.com/lgs_002/blog/static/2873604320119109353553/
来自:
http://tiaozhanshu.com/computer/software/gcc%E7%BC%96%E8%AF%91%E6%8A%A5%E9%94%99%EF%BC%9A%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%9C%89%E6%B8%B8%E7%A6%BB%E7%9A%84357273277%E7%AD%89.html
http://apps.hi.baidu.com/share/detail/47329734
错误: 程序中有游离的 ......
开始觉得可能我从网页上直接复制的代码中有别的字符。于是把中文的全角空格全部替换了。
这次好多了,少了一些,不过还有很多,调试信息说是XX行有游离的。。。哪怕我把他全部删除,手动输入也不行。。。
baidu了一下找到一个高手的一个解决方法:
od -c das-server.c > log.txt
终于找到了,其实不是那一行,而是别的行有 302 240 等。
删除了,终于好了,小记一下。
http://blog.csdn.net/wuff1988/article/details/7067373
1. 程序(*.c,*.h)中使用了中文的标点符号(全角),比如;,},+。
改成英文的标点半角符号就行了。
甚至有时候空格也会出现类似错误,删掉该空格 重新输入。
vim里面做类似替换还是很容易的。
如何看到报错的符号?
od -c hello.c > log.txt
在log中就能看到符号了
2. 如果替换成了英文标点还出错的话,还报此错误,那么就是文件存贮格式的问题了。
一般在windows下的文件都存成ansi格式,为了在linux下能通用,建议保存成UTF-8不带BOM
编码格式,因为目前gcc和g++不支持UTF-8带BOM编码格式。
用g++编译的时候碰到UTF-8 BOM错误怎么办?
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: 错误: 程序中有游离的’\357′
unit_test.cpp:1: 错误: 程序中有游离的’\273′
unit_test.cpp:1: 错误: 程序中有游离的’\277′
In file included from unit_test.cpp:63:
…
或在英文系统下:
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: error: stray ‘\357′ in program
unit_test.cpp:1: error: stray ‘\273′ in program
unit_test.cpp:1: error: stray ‘\277′ in program
In file included from unit_test.cpp:63:
…
如何判断文件是否是使用UTF-8 BOM存储的?
执行下面的命令:
$ cat cpp/src/unit_test/unit_test.cpp |hd -n 10
00000000 ef bb bf 2f 2a 2a 2a 2a 2a 2a |…/******|
0000000a
linux下c编程有时会遇到 :
wanglitaotest.c:4: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:4: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:4: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:4: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘char’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:9: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\214’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\357’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\274’
wanglitaotest.c:17: 错误:程序中有游离的 ‘\214’
解决办法
1.程序中输入的字符: , ; " ' / 等符号,有可能是使用的中文输入发输入的
2.程序中有使用全角拼音的现象
把程序完全用 英语输入,半角输入运行正常
错误提示 : a.c:6: 错误:程序中有游离的 ‘\200’
a.c:6: 错误:程序中有游离的 ‘\200’
a.c:8: 错误:程序中有游离的 ‘\343’
a.c:8: 错误:程序中有游离的 ‘\200’
a.c:8: 错误:程序中有游离的 ‘\200’
原因
这个错误一般是由于你程序(a.c)中使用了中文的标点符号,比如;,},+。
改成英文的就行了。
甚至有时候空格也会出现类似错误,删掉该空格 重新输入。
如果找不出来,解决的办法就是关闭中文输入法然后把有错这一行重新敲一遍。
来自:http://blog.163.com/lgs_002/blog/static/2873604320119109353553/
来自:
http://tiaozhanshu.com/computer/software/gcc%E7%BC%96%E8%AF%91%E6%8A%A5%E9%94%99%EF%BC%9A%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%9C%89%E6%B8%B8%E7%A6%BB%E7%9A%84357273277%E7%AD%89.html
http://apps.hi.baidu.com/share/detail/47329734
其实说到编码转换,那就不得不说到iconv这个库了,如果已经安装了这个工具,那在命令行下直接打这个命令就行了。下面就用这个工具来实现中文系统下的常用编码转换。
首先,来了解一下iconv这个命令的使用方法。命令格式如下:
iconv -f 源编码 -t 目标编码 文件名
-f 参数指所要转换文件的文件编码,当然必须事先知道文件的编码,不然不能正确转换。
-t 参数指希望转换成的文件编码,当然应该知道所指定文件的编码能不能转换成该编码,不然转换后的结果可能一无所用。比如你将中文编码转换成西欧的某种编码的话,是没有什么意义的。
文件名 就是你希望转换的文件的名称的,当然也可以包含路径了。
比如,将notepad.txt文件用GBK转换成UTF8,命令如下:
iconv -f gbk -t utf8 notepad.txt
如果,转换文件编码的同时不想覆盖源文件,可以使用如下命令:
iconv -f gbk -t utf8 notepad.txt > notepad-utf8.txt
如果要批量转换文件编码,可以使用以下命令:
find ./ -type d -exec mkdir -p newdir/{} \;
find ./ -type f -exec iconv -f gbk -t utf8 {} -o newdir/{} \;
将当前目录下的所有文件转换成UTF8格式放在newdir目录下。
用法: iconv [选项...] [文件...]
转换给定文件的编码。
来自:http://www.iusecms.com/page/2/
首先,来了解一下iconv这个命令的使用方法。命令格式如下:
iconv -f 源编码 -t 目标编码 文件名
-f 参数指所要转换文件的文件编码,当然必须事先知道文件的编码,不然不能正确转换。
-t 参数指希望转换成的文件编码,当然应该知道所指定文件的编码能不能转换成该编码,不然转换后的结果可能一无所用。比如你将中文编码转换成西欧的某种编码的话,是没有什么意义的。
文件名 就是你希望转换的文件的名称的,当然也可以包含路径了。
比如,将notepad.txt文件用GBK转换成UTF8,命令如下:
iconv -f gbk -t utf8 notepad.txt
如果,转换文件编码的同时不想覆盖源文件,可以使用如下命令:
iconv -f gbk -t utf8 notepad.txt > notepad-utf8.txt
如果要批量转换文件编码,可以使用以下命令:
find ./ -type d -exec mkdir -p newdir/{} \;
find ./ -type f -exec iconv -f gbk -t utf8 {} -o newdir/{} \;
将当前目录下的所有文件转换成UTF8格式放在newdir目录下。
用法: iconv [选项...] [文件...]
转换给定文件的编码。
来自:http://www.iusecms.com/page/2/
find / -path /backup -prune -o -name "mysqld" -type f -executable 2>/dev/null
解释:
find /:从根目录开始查找。
-path /backup -prune:排除 /backup 目录。
-name "mysqld":查找文件名为 mysqld 的文件。
-type f:只查找普通文件。
-executable:只显示可执行文件。
2>/dev/null:忽略权限不足的错误消息。
-o 是 OR 操作符,它在 find 命令中用于连接不同的条件。
在您的命令中,-o 用于将排除路径 /backup 和实际查找条件组合在一起。
-path /backup -prune:先排除 /backup 路径。
-o:表示如果文件路径不在 /backup 下,就继续执行后面的条件。
-name "mysqld" -type f -executable:在未排除的路径中查找名为 mysqld 的可执行文件。
这样可以确保 /backup 被忽略,其他路径按指定条件查找 mysqld。
find 是默认不递归软链接下面的文件夹子目录的:
find /data/www/ -path "/data/www/newcomment.jackxiang.com/newattachments" -path "/data/www/newcomment.jackxiang.com/attachments" -prune -o -print
Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法
(1)Linux下find一次查找多个指定文件:
查找a.html和b.html
find . -regex '.*\.txt\|.*\.doc\|.*\.mp3'
(2)排除某些文件类型:
排除目录下所有以html结尾的文件:
(3)排除多种文件类型的示例:
(3)在 GREP 中匹配多个关键字的方法:
grep查找多个数字的文件:
-r 递归,-E:正则 -l:只显示文件名
多种类型文件示例:
用Awk:
参考本站:http://jackxiang.com/post/714/
解释:
find /:从根目录开始查找。
-path /backup -prune:排除 /backup 目录。
-name "mysqld":查找文件名为 mysqld 的文件。
-type f:只查找普通文件。
-executable:只显示可执行文件。
2>/dev/null:忽略权限不足的错误消息。
-o 是 OR 操作符,它在 find 命令中用于连接不同的条件。
在您的命令中,-o 用于将排除路径 /backup 和实际查找条件组合在一起。
-path /backup -prune:先排除 /backup 路径。
-o:表示如果文件路径不在 /backup 下,就继续执行后面的条件。
-name "mysqld" -type f -executable:在未排除的路径中查找名为 mysqld 的可执行文件。
这样可以确保 /backup 被忽略,其他路径按指定条件查找 mysqld。
find 是默认不递归软链接下面的文件夹子目录的:
find /data/www/ -path "/data/www/newcomment.jackxiang.com/newattachments" -path "/data/www/newcomment.jackxiang.com/attachments" -prune -o -print
Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法
(1)Linux下find一次查找多个指定文件:
查找a.html和b.html
find . -regex '.*\.txt\|.*\.doc\|.*\.mp3'
(2)排除某些文件类型:
排除目录下所有以html结尾的文件:
(3)排除多种文件类型的示例:
(3)在 GREP 中匹配多个关键字的方法:
grep查找多个数字的文件:
-r 递归,-E:正则 -l:只显示文件名
多种类型文件示例:
用Awk:
参考本站:http://jackxiang.com/post/714/
通常情况下实现定时计划任务有以下几种方式:
linux下可以借助crontab+php的方式(Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 )
windows 下有两种方式:
借助于vbscript脚本加载无窗口的服务
新建文本文件,复制以上脚本,另存为后缀为*(.vbs)的文件后即可。
上面“D:\php\php.exe D:\php\source\do.php” 这种方式可以写在bat文件中,或者window计划任务中都可以执行。
php内部支持的一种利用函数“ignore_user_abort ” 来永久执行的方案。
第三种方案,需要总是执行脚本,而且响应请求的时间是无限制的,对于定义了最大响应时间的fastcgi方式不可行,脚本还是会停止。所以需要找一种更加稳妥的方案。
**找到了**
数学是很神奇的东西。实际上定时执行,是一个时间条件执行,php中有取得时间秒数的函数time() 返回据1970年1月1日开始的秒数,而我们通常定时任务执行,可以使300秒,1000秒之类的时间间隔,意味着 。这个就好处理了,time()%timestamp==0 只要整除到了符合间隔的时间,就执行一次,恰好符合了定时的目的。
实际上最后一种简单实现,解决的是普通请求中脚本定时任务的问题,这里会受到响应时间的限制,想让这部分代码执行的更久一下可以参考ignore_user_abort和set_time_limit,如果需要大运算量的处理,就需要借助前面介绍的方式在服务器端控制定时任务了,但作为普通需求,最后一种方案是一种简单直接的实现,有一定意义!
来自:http://develop.9he.info/php/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0
其它方法:
下面的这段代码,可以在当前文件夹下,生成一个test.txt,并每隔20秒,往里面写入一个时间戳,无论客户端是否关闭浏览器。
关键的两个函数:
ignore_user_abort(true),这个函数的作用是,无论客户端是否关闭浏览器,下面的代码都将得到执行。
set_time_limit(0),这个函数的作用是,取消php文件的执行时间,要是没有这个函数的话,默认php的执行时间是30秒,也就是说30秒后,这个文件就say goodbay了。
linux下可以借助crontab+php的方式(Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 )
windows 下有两种方式:
借助于vbscript脚本加载无窗口的服务
新建文本文件,复制以上脚本,另存为后缀为*(.vbs)的文件后即可。
上面“D:\php\php.exe D:\php\source\do.php” 这种方式可以写在bat文件中,或者window计划任务中都可以执行。
php内部支持的一种利用函数“ignore_user_abort ” 来永久执行的方案。
第三种方案,需要总是执行脚本,而且响应请求的时间是无限制的,对于定义了最大响应时间的fastcgi方式不可行,脚本还是会停止。所以需要找一种更加稳妥的方案。
**找到了**
数学是很神奇的东西。实际上定时执行,是一个时间条件执行,php中有取得时间秒数的函数time() 返回据1970年1月1日开始的秒数,而我们通常定时任务执行,可以使300秒,1000秒之类的时间间隔,意味着 。这个就好处理了,time()%timestamp==0 只要整除到了符合间隔的时间,就执行一次,恰好符合了定时的目的。
实际上最后一种简单实现,解决的是普通请求中脚本定时任务的问题,这里会受到响应时间的限制,想让这部分代码执行的更久一下可以参考ignore_user_abort和set_time_limit,如果需要大运算量的处理,就需要借助前面介绍的方式在服务器端控制定时任务了,但作为普通需求,最后一种方案是一种简单直接的实现,有一定意义!
来自:http://develop.9he.info/php/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0
其它方法:
下面的这段代码,可以在当前文件夹下,生成一个test.txt,并每隔20秒,往里面写入一个时间戳,无论客户端是否关闭浏览器。
关键的两个函数:
ignore_user_abort(true),这个函数的作用是,无论客户端是否关闭浏览器,下面的代码都将得到执行。
set_time_limit(0),这个函数的作用是,取消php文件的执行时间,要是没有这个函数的话,默认php的执行时间是30秒,也就是说30秒后,这个文件就say goodbay了。
代码发布上线,用PHP来做的话很可能会用到。
使用PHP完成SVN的操作,包括复制,查看列表,删除,移动,创建目录,查看diff,更新,合并,提交,获取状态,获取commit log,获取当前版本号操作。在svn 1.6.11版本中测试通过。
来自Url:http://www.oschina.net/code/snippet_162844_7312
代码如下:
阅读全文
使用PHP完成SVN的操作,包括复制,查看列表,删除,移动,创建目录,查看diff,更新,合并,提交,获取状态,获取commit log,获取当前版本号操作。在svn 1.6.11版本中测试通过。
来自Url:http://www.oschina.net/code/snippet_162844_7312
代码如下:
阅读全文
CVS 和Subversion 都支持分支(branch)和基线(tag),通过分支与合并,可以有效支持大项目的并行开发模式;通过基线管理,可以准确标识一组文件的版本,有效进行软件发布管理和必要时的历史回溯。
但CVS 和Subversion 在实现分支和基线的方式上存在很大的不同。CVS 在创建分支的时候,需要对所有进行分支的文件进行依次的操作,因此分支的建立成本(主要是建立分支所需的时间,或消耗的计算资源)与参与分支的文件数量成比例,项目越大,版本库越大,文件越多,分支的建立成本越高;基线(tag)的建立与此类似。
Subversion 的分支和基线是通过执行“拷贝”来建立的:回想一下在没有引入版本管理工具的时候我们是如何进行所谓的“分支”和“基线”管理的?答案显然是“拷贝” — 我们通过“拷贝”或“备份”来建立基线;同样,为支持多个开发人员可以同时进行开发,我们为每个开发人员创建一份“拷贝”。由此看来,Subversion 通过“拷贝”来建立分支和基线显得非常自然,有点“返朴归真”的意思。
由于Subversion 的全局版本号特性,Subversion 中分支或基线的创建过程,或Subversion中的“拷贝”过程,真正的操作是在版本库中创建一个到某一全局版本号的指针(pointer),不再需要针对众多的单个文件依次执行操作。因此,该操作的成本为一个很小的常数,与项目大小,版本库大小,文件数目的多少无关;并且,分支或基线的建立不需要进行版本的冗余存储,新建立的分支或基线基本不占用版本库空间,分支的后续存储空间的开销也只与修改的大小有关。
来自:http://wubiao-china.blog.sohu.com/80083880.html
但CVS 和Subversion 在实现分支和基线的方式上存在很大的不同。CVS 在创建分支的时候,需要对所有进行分支的文件进行依次的操作,因此分支的建立成本(主要是建立分支所需的时间,或消耗的计算资源)与参与分支的文件数量成比例,项目越大,版本库越大,文件越多,分支的建立成本越高;基线(tag)的建立与此类似。
Subversion 的分支和基线是通过执行“拷贝”来建立的:回想一下在没有引入版本管理工具的时候我们是如何进行所谓的“分支”和“基线”管理的?答案显然是“拷贝” — 我们通过“拷贝”或“备份”来建立基线;同样,为支持多个开发人员可以同时进行开发,我们为每个开发人员创建一份“拷贝”。由此看来,Subversion 通过“拷贝”来建立分支和基线显得非常自然,有点“返朴归真”的意思。
由于Subversion 的全局版本号特性,Subversion 中分支或基线的创建过程,或Subversion中的“拷贝”过程,真正的操作是在版本库中创建一个到某一全局版本号的指针(pointer),不再需要针对众多的单个文件依次执行操作。因此,该操作的成本为一个很小的常数,与项目大小,版本库大小,文件数目的多少无关;并且,分支或基线的建立不需要进行版本的冗余存储,新建立的分支或基线基本不占用版本库空间,分支的后续存储空间的开销也只与修改的大小有关。
来自:http://wubiao-china.blog.sohu.com/80083880.html
最近在看C指针编程之道,于是否涉及到队列,简单介绍了下,是以指针为原型的,在网上找了一篇文章,发现其写法和书上差不多,做下备案,代码如下,有时间用gdb跟踪学习一下:
阅读全文
阅读全文
[个人原创]Linux shell 之paste 和 awk 和basename合用解决beyond Compare的文件夹对比上线时线上线下不一样的文件问题
Unix/LinuxC技术 jackxiang 2012-2-15 11:49
写给自己,So,
场景: 线上代码要升级,此次代码要上线时,但线上和线下的某几个文件不一样,不能直接覆盖,需要对比,升级文件通过svn导出(包含文件夹导出),而线上用sz(可sz不能帮助建立文件的目录,导出都在一个目录里),于是否想通过Beyond Compare做文件夹的比较。
问题: 如何把线上的导出的部分需要覆盖的文件在导出后再通过建立文件夹和线上结构一样?【要是sz能帮助在导出时就按文件夹存放好就好了,可好像没有看到有这个选项】
核心: 如何重建线上需要覆盖的文件,好让Beyond Compare比较两个文件夹。
步骤: 两个步骤
(1)摘取线上的需要覆盖的文件名下载到线下一个文件夹中。
把线下svn要覆盖的文件导出到目录后用find命令:find . -type f 找出所有的文件,该命令的结果已经包含了目录和文件。
把这些文件名,前面加上sz及可导出到线下的一个文件夹中。
(2)建立和线上一样的目录并拷贝对应文件到目录中
建立和线上一样的目录结构:对线下svn导出的文件(注意是:export才包含文件夹,而save revision to这个的导出比较乱。参考:http://jackxiang.com/post/4847/)
用find命令找出文件夹:
find . -type d
再在find结果的内容前面添加mkdir ,后到线上导出的文件目录下运行这个mkdir 的命令:在线上代码的文件夹下生成目录。
(3)构造cp a.php abc/a.php 类似并运行。
在线下svn包含目录的文件中,运行如相命令,生成文件a.txt:
以上文件是一个文件名。下一步就是要一个 abc/a.php ,这个好办,直接:find . -type f 就能搞定,为b.txt,
Linux提供了一个: paste 命令:
结果如下:
a.php abc/a.php
再vim或者awk在前面加一个正则替换实现:cp a.php abc/a.php,即可,再到线上文件下载的目录下运行这个生成好的脚本,也就完成了把原来的文件放到对应的目录下。
场景: 线上代码要升级,此次代码要上线时,但线上和线下的某几个文件不一样,不能直接覆盖,需要对比,升级文件通过svn导出(包含文件夹导出),而线上用sz(可sz不能帮助建立文件的目录,导出都在一个目录里),于是否想通过Beyond Compare做文件夹的比较。
问题: 如何把线上的导出的部分需要覆盖的文件在导出后再通过建立文件夹和线上结构一样?【要是sz能帮助在导出时就按文件夹存放好就好了,可好像没有看到有这个选项】
核心: 如何重建线上需要覆盖的文件,好让Beyond Compare比较两个文件夹。
步骤: 两个步骤
(1)摘取线上的需要覆盖的文件名下载到线下一个文件夹中。
把线下svn要覆盖的文件导出到目录后用find命令:find . -type f 找出所有的文件,该命令的结果已经包含了目录和文件。
把这些文件名,前面加上sz及可导出到线下的一个文件夹中。
(2)建立和线上一样的目录并拷贝对应文件到目录中
建立和线上一样的目录结构:对线下svn导出的文件(注意是:export才包含文件夹,而save revision to这个的导出比较乱。参考:http://jackxiang.com/post/4847/)
用find命令找出文件夹:
find . -type d
再在find结果的内容前面添加mkdir ,后到线上导出的文件目录下运行这个mkdir 的命令:在线上代码的文件夹下生成目录。
(3)构造cp a.php abc/a.php 类似并运行。
在线下svn包含目录的文件中,运行如相命令,生成文件a.txt:
以上文件是一个文件名。下一步就是要一个 abc/a.php ,这个好办,直接:find . -type f 就能搞定,为b.txt,
Linux提供了一个: paste 命令:
结果如下:
a.php abc/a.php
再vim或者awk在前面加一个正则替换实现:cp a.php abc/a.php,即可,再到线上文件下载的目录下运行这个生成好的脚本,也就完成了把原来的文件放到对应的目录下。