存档

作者存档

正则匹配换行

2012年2月7日 admin 没有评论

正则要匹配如果有的有换行,有的没有换行的处理 比如
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>
**这里有些有换行有些没有**
<p>
</pre>
用如下就可以了
<pre lang=’php’>
<p>
<a href=”(?<linkurl2>.*?)”>
(?<title>.*?)</a></p>[.|\n\r]*
<p>
</pre>

分类: Index 标签: ,

Dnspod免费dns

2012年2月7日 admin 没有评论

Dnspod免费dns确实难记啊

f1g1ns1.dnspod.net
f1g1ns2.dnspod.net

收费的就有好几组了
NS1.DNSV2.COM,NS2.DNSV2.COM
NS1.DNSV3.COM,NS2.DNSV3.COM等等

FTP 数据socket错误 连接超时

2012年1月4日 admin 没有评论

flashfxp
FTP连接网站时出现“数据 Socket 错误: 连接超时 列表错误”

方法很简单,只要在ftp的“选项”——“参数设置”——“连接”——“代理”里把“被动模式”去掉就行了。如下图:

搞定

分类: Index 标签: , ,

PHP写日志

2011年12月30日 admin 没有评论

习惯了写日志来记录调试信息 也弄个php的写写

<?php
/** 
* 写文件 
* @param string $file 文件路径 
* @param string $str 写入内容 
* @param char $mode 写入模式 
*/ 
function logwrite($filename,$str,$mode='a') 	
{ 
	$file=DT_ROOT.'\\log\\'.$filename.'.txt';
 
	$oldmask = @umask(0); 
	$fp = @fopen($file,$mode); 
	@flock($fp, 3); 
	if(!$fp) 
	{ 
		Return false; 
	} 
	else 
	{ 
		@fwrite($fp,$str."\r\n"); 
		@fclose($fp); 
		@umask($oldmask); 
		Return true; 
	} 
} 
?>
分类: Php 标签:

centos 添加IP

2011年12月27日 admin 没有评论

一、添加单个IP的方法:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-eth0:0
# nano ifcfg-eth0:0

使用cp命令复制一个eth0的文件,新的文件名为eth0:0 ,然后用nano编辑此文件。不习惯用nano的可以用vi等命令。打开文件后编辑:

DEVICE=eth0:0      #此处添加:0,保持和文件名一致,添加多个IP依次递增
ONBOOT=yes                      #是否开机激活
BOOTPROTO=static              #静态IP,如果需要DHCP获取请输入dhcp
IPADDR=192.168.1.2            #此处修改为要添加的IP
NETMASK=255.255.255.0      #子网掩码根据你的实际情况作修改

文件编辑完之后,运行:

/etc/init.d/network reload

用ifconfig看新的IP是否已经加上。

删除IP用如下

如删除eth0:1这样的虚拟网卡

rm /etc/sysconfig/network-scripts/ifcfg-eth0:0

建议删除后重启网络服务或重启系统

引用
service network restart

二、批量添加IP:

在/etc/sysconfig/network-scripts下创建一个range文件,也可以用vi等编辑

nano /etc/sysconfig/network-scripts/ifcfg-eth0-range0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR_START=192.168.2.2     #起始IP
IPADDR_END=192.168.2.254         #结束IP
CLONENUM_START=1        #表示这段IP网卡号从eth0:1开始
NETMASK=255.255.255.0

无类域间路由(CIDR)的子网掩码设置参考:http://www.taohost.net/tools/subnet.htm

/29 (5 usable) NETMASK = 255.255.255.248
/28 (13 usable) NETMASK = 255.255.255.240
/27 (29 usable) NETMASK = 255.255.255.224
/26 (61 usable) NETMASK = 255.255.255.192
/25 (125 usable) NETMASK = 255.255.255.128
/24 (253 usable) NETMASK = 255.255.255.0

三、为一块新网卡配置IP地址的方法:

如果是为第二块网卡配IP,在/etc/sysconfig/network-scripts目录下编辑一个ifcfg-eth1的文件:

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

修改一下IPADDR,NETMASK和GATEWAY的参数。

运行:

/etc/init.d/network reload

用ifconfig看新的IP是否已经加上。

分类: Linux 标签: ,

由显示器超频而引发的血案

2011年12月9日 admin 没有评论

今天去机房加内存,加了内存之后 电脑重启,windows加载条一直摇晃,
然后 要进入输密码这步骤时候,突然显示器 黑屏,显示器信号登快闪了
七八下。初步排查可能是内存不兼容或是没插好。只能一条条换着插试试
到最好还是不行,只能把新加的拔了 用原先的内存 结果还是这样。
这下纠结了。进步了系统了。这时,小余说他曾经碰到过类似情况。原因是
客户的机子装了金山卫士什么的
。庆幸的是安全模式能进,然后进安全模式,
卸载金山和360等。重启还是不行。还有个就是金山贝壳很难卸,弄不好就是
会影响网卡驱动
。然后只能把贝壳重新装上。顺着小余的思路,初步怀疑是由于软件
的问题引起的。现在就看看日志里有些什么提示
偶然看到mssql有警告。仔细回想下 好像是曾经升级sql2005后就没重启过。
在安全模式下启动sql,但是提示什么无法启动。看了网上都是说sql配置管理
的VIA禁用掉。可是我本来就禁用的。逼不得已就卸载2005再装。
杯具的是安全模式不能用windows installer.没办法,最后只能启用备用服务器,
把数据库导过去,然后安装。最后心灰意冷。乱试一通,通过备用服务器居然能
远程登录。说明系统已经起来了。然后从远程查看了分辨率。比较了下。
我X,机房什么破显示器啊。超频也不提示下。蛋疼。不过最终找到问题还是值得

分类: Index 标签:

Whois简易查询Android版

2011年11月29日 admin 1 条评论

有空玩了下android,配置环境比较啰嗦。google下
贴效果图;

效果简单 之前是模仿了cnblog的一篇文章。不过他是抓url。我是用socket。
后缀还没细分,喜欢的人自己研究去,贴代码

public class MyWhois extends Activity {
	private TextView vResult;
	private EditText eKeyWord;
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Button sButton1 = (Button)findViewById(R.id.Submit); 
        vResult = (TextView)findViewById(R.id.ResultView);
    	eKeyWord = (EditText)findViewById(R.id.KeyWord); 
 
        //注册点击事件监听者  
        sButton1.setOnClickListener(new OnClickListener()
        {
            public void onClick(View aView) { 
            	TextView vResult = (TextView)findViewById(R.id.ResultView);
            	vResult.setText("正在查询中,请稍等!");
 
            	//新建查询线程,否则UI界面会假死
            	Thread mThread = new Thread(new Runnable() {
            		public void run() {  
            			String whoisMes="";
                    	  try {
                    		  try
                 		     {
                 			   String domain=eKeyWord.getText().toString();
                 			   String IP="whois.cnnic.cn";
                 			   if(domain.contains(".com")||domain.contains(".com")){
                 				   IP="whois.internic.net";
                 			   }				   
                 		       Socket socket = new Socket(IP, 43);
                 		       InputStream Is = socket.getInputStream();
                 		       OutputStream Os = socket.getOutputStream();
                 		       DataInputStream DIS = new DataInputStream(Is);
                 		       PrintStream PS = new PrintStream(Os);
                 		       DataInputStream in = new DataInputStream(System.in);		      
                 		       PS.println(domain);
                 		       System.out.println("please wait whois's message...");
 
                 		       boolean TF = false;
 
                 		       while (DIS.read() > 0) {
                 		         String tempStr = DIS.readLine();
                 		        whoisMes = whoisMes + tempStr + "\r\n";
                 		       }
                 		       whoisMes=new String(whoisMes.getBytes("ISO-8859-1"),"utf-8");
                 		       System.out.println(whoisMes);
                 		       DIS.close();
                 		       PS.close();
                 		       Is.close();
                 		       Os.close();
                 		       socket.close();
                 		     } catch (Exception e) {
                 		       System.out.println("Error:" + e);
                 		     }
                    		  //返回的数据需要使用'\n'来换行!
                    		            Message mg = Message.obtain();  
                    		            mg.obj = whoisMes;  
                    		            mHandler.sendMessage(mg);  
 
                    		  } catch (Exception e) {
                    		   e.printStackTrace();
                    		  }
            		}
 
            	});
            	 mThread.start();  
            }
        }
 
        ); 
    }
 
    //定义一个Handler  
    private Handler mHandler = new Handler(){  
        public void handleMessage(Message msg){  
        	String m = (String) msg.obj;
        	if(m.length()<=0)
        	{
        		vResult.setText("查询结果为空.");
        	}
        	else
        	{
        		vResult.setText(m);
        	}
        }  
    };  
}
分类: .NET 标签: ,

sql2000升级sql2005

2011年11月11日 admin 没有评论

这次升级真是太折腾了。大大影响了平台的正常使用,把自己也搞的疲惫不堪。
sql2000升级2005有几种服务。
一种是在2000的基础上默认升级实例。另一种 是通过备份还原的形式。
我用的是备份还原。刚开始升级后,运行速度非常快,网站访问也很 顺畅。
但是过会之后,就会越来越卡,越来越慢,严重的超时现象。也不占cpu,就是
很卡,到最后不得已重启服务器。重启后又恢复正常。但是之后有开始了。
查阅了很多资料,最后 还是很可能在一个问题上 索引的重聚和索引碎片的整理。
我用了DBCC INDEXDEFRAG(‘dbname’,'tablename’),这样一个个执行表,很费力,
最后看了文章有用sp_updatestats 更新所有的。更新之后 至今还没有发现之前的
那种卡。说明数据库升级总算成功了。总算是平台正常了。
2005性能 还是有很大的提升的。其实主要还是用他的rownumber来提高分页查询的速度
下面用个自己的分页存储过程:

ALTER  PROCEDURE [dbo].[P_PAGE] (
@CurrentPage int,
@PageSize int,
@TableName varchar(1000),
@KeyField varchar(1000),
@Fields varchar(1000),
@Condition1 varchar(2000),
@Condition2 varchar(1000),
@PageCount int output,
@RecordCount int output,
@sql nvarchar(4000) output
)AS
declare @num numeric(8,2),@pz numeric(8,2),@rpz int
set @sql = 'select @RecordCount=count(id) from '+@TableName+' '+@Condition1
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
set @pz = @PageSize
set @num = @RecordCount / @pz
set @rpz = @num
if @num &gt; @rpz set @rpz = @rpz + 1
select @PageCount = @rpz
if @CurrentPage &lt; 1
begin
	set @CurrentPage = 1
end
if @CurrentPage &gt; @PageCount and @PageCount &gt;0
begin
	set @CurrentPage = @PageCount
end
print @CurrentPage
if(@CurrentPage=1)
begin
	set @sql = 'select top '+convert(varchar,@PageSize)+' '+@Fields+' from '+@TableName+' '+@Condition1+' '+@Condition2
end
else
begin
set @sql='SELECT '+@Fields+' FROM (SELECT '+@Fields+', ROW_NUMBER() OVER(ORDER BY id asc) AS rownum FROM '+@TableName+' ) as Tbl
  WHERE rownum BETWEEN '+convert(varchar,(@CurrentPage-1)*@PageSize+1)+' AND '+convert(varchar,@CurrentPage*@PageSize)
end
exec sp_executesql @sql
另附2005 索引重聚proc
 
GO
/****** 对象:  StoredProcedure [dbo].[db2005_indexes]    脚本日期: 01/05/2012 09:32:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[db2005_indexes]
AS
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @objectowner VARCHAR(255)
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @indexname CHAR(255)
DECLARE @dbname sysname
DECLARE @tableid INT
DECLARE @tableidchar VARCHAR(255)
 
SELECT @dbname = db_name()
IF @dbname IN ('master', 'msdb', 'model', 'tempdb')
BEGIN
PRINT '不能运行系统数据库'
RETURN
END
 
DECLARE tables CURSOR FOR
SELECT convert(varchar,so.id)
FROM sysobjects so
JOIN sysindexes si
ON so.id = si.id
WHERE so.type ='U'
AND si.indid &lt; 10 AND si.rows &gt; 0 
 
CREATE TABLE #templist (
ObjectName CHAR (255),
ObjectId INT,
IndexName CHAR (255),
IndexId INT,
Lvl INT,
CountPages INT,
CountRows INT,
MinRecSize INT,
MaxRecSize INT,
AvgRecSize INT,
ForRecCount INT,
Extents INT,
ExtentSwitches INT,
AvgFreeBytes INT,
AvgPageDensity INT,
ScanDensity DECIMAL,
BestCount INT,
ActualCount INT,
LogicalFrag DECIMAL,
ExtentFrag DECIMAL)
 
OPEN tables
 
FETCH NEXT
FROM tables
INTO @tableidchar
 
WHILE @@FETCH_STATUS = 0
BEGIN
 
INSERT INTO #templist
EXEC ('DBCC SHOWCONTIG (' + @tableidchar + ') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
FETCH NEXT
FROM tables
INTO @tableidchar
END
 
CLOSE tables
DEALLOCATE tables
 
SELECT * FROM #templist w--here indexname like '%destine%'

DECLARE indexes CURSOR FOR
SELECT ObjectName, ObjectOwner = user_name(so.uid), ObjectId, IndexName, ScanDensity
FROM #templist f
JOIN sysobjects so ON f.ObjectId=so.id
WHERE INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') &gt; 0
 
SELECT '开始重新生成或者重组索引 ' + CONVERT(VARCHAR,GETDATE())
 
OPEN indexes
 
FETCH NEXT
FROM indexes
INTO @tablename, @objectowner, @objectid, @indexname, @frag
 
WHILE @@FETCH_STATUS = 0
BEGIN
SET QUOTED_IDENTIFIER ON
 
if(@frag&gt;30)
begin
SELECT @execstr = 'DBCC DBREINDEX (' + '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) + '''' +
', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS'
SELECT '正在执行: '
--SELECT(@execstr)
print @execstr
EXEC (@execstr)
 
end
else if (@frag&lt;30)
begin
SELECT @execstr = 'DBCC INDEXDEFRAG ('+db_name()+','+ '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) +  '''' +
', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS'
SELECT '正在执行: '
--SELECT(@execstr)
print @execstr
EXEC (@execstr)
end 
 
SET QUOTED_IDENTIFIER OFF
 
FETCH NEXT
FROM indexes
INTO @tablename, @objectowner, @objectid, @indexname, @frag
END
 
CLOSE indexes
DEALLOCATE indexes
 
SELECT '完成结束索引' + CONVERT(VARCHAR,GETDATE())
 
DROP TABLE #templist

修改SVN的UUID

2011年10月23日 admin 没有评论

svn relocate 提示uuid ****但是工作副本是******
重新定位SVN的时候,遇到uuid不一致的问题.

Google得知可以使用以下命令

有到svnadmin命令:(位于 D:\Program Files\VisualSVN Server\bin)

svnadmin setuuid

你可以使用它来设置UUID。这样,你的工作副本不会抱怨的UUID不匹配。

分类: Index 标签: ,

Wrapper Linux Java Service

2011年8月29日 admin 没有评论

乃妹的,折腾了2天的linux底下service的创建终于搞定了。
用tomcat的jsvc始终没搞定,说是找不到class,但是单独运行jar是可以的,
这不是坑爹吗。不管了 反正wrapper可以用就行了。
需要注意的地方:一个是jdk的路径,一个是要对wrapper 加权限,另一个是mainclass。
步骤如下:
1、下载Java Service Wrapper(目前版本wrapper-linux-x86-32-3.2.3), 解压。

http://wrapper.tanukisoftware.org/

复制src\bin\sh.script.in到/opt/testapp/bin目录,重命名为symydns
复制wrapper\bin目录下的wrapper文件到/opt/testapp/bin目录
复制src\conf\wrapper.conf.in到/opt/testapp/conf目录,重命名为wrapper.conf
复制src\lib\lib目录下3个文件到/opt/testapp/lib目录
wrapper.so
wrapper.jar
我把我的配置文件贴出来

APP_NAME="SocketServer"
APP_LONG_NAME="SocketServer Application Server"
WRAPPER_CMD="./wrapper"
WRAPPER_CONF="../conf/wrapper.conf"
赋予执行权限
chmod 775 /opt/testapp/bin/symydns
chmod 775 /opt/testapp/bin/wrapper
 
3、修改/opt/testapp/conf/wrapper.conf文件
wrapper.java.command=/opt/jdk1.6.0_02/bin/java
使用WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序,这个千万不要改,改了后会启动多个JVM。
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp
#这里添加你用到的jar包文件,从1..n你自己全写上吧,不过wrapper是必须的
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/test.jar
wrapper.java.classpath.3=/opt/jdk1.6.0_02/lib/dt.jar
wrapper.java.classpath.4=/opt/jdk1.6.0_02/lib/tools.jar
wrapper.java.library.path.1=../lib
#这个就是你自己可执行程序的主类(MainClass),一般来说,就是包含public static void main的那个类
wrapper.app.parameter.1=mydns.testjsvc
wrapper.app.parameter.2=1
wrapper.app.parameter.3=true
wrapper.app.parameter.4=cn.com.ppnote.SocketServer
wrapper.app.parameter.5=true
wrapper.app.parameter.6=1
wrapper.app.parameter.7=stop
上面的配置里使用了WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序。
 
4、让SocketServer开机自动运行
ln -s /opt/testapp/bin/SocketServer /etc/init.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc0.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc1.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc2.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc3.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc4.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc5.d/SocketServer
ln -s /opt/testapp/bin/SocketServer /etc/rc6.d/SocketServer
 
5、测试 执行命令:service symydns start|stop|restart|status

程序运行时,Java Service Wrapper在/opt/testapp/bin/目录下产生wrapper.log日志,
STATUS | wrapper | 2007/08/01 17:17:01 | –> Wrapper Started as Daemon
STATUS | wrapper | 2007/08/01 17:17:01 | Launching a JVM…
INFO | jvm 1 | 2007/08/01 17:17:09 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2007/08/01 17:17:09 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2007/08/01 17:17:09 |
INFO | jvm 1 | 2007/08/01 17:17:10 | 程序开始运行…
INFO | jvm 1 | 2007/08/01 17:17:26 | Connection: Open
……

附目录结构
/opt/testapp/bin
| SocketServer
| wrapper
| wrapper.log(程序运行时自动产生)
/opt/testapp/conf
| wrapper.conf
/opt/testapp/lib
| libwrapper.so
| wrapper.jar
| test.jar

网上参考教程很多:

http://hi.baidu.com/ling1026/blog/item/1a060e97bf03d96b54fb9654.html

分类: Linux 标签: