11 11 月 2013

word文档中图片保存

将含有图片的WORD文档另存为网页文件,注意不是“单个文件网页”,要同时能生成一个与WORD文档同名的文件夹的“网页文件”格式,然后你打开与你WORD同名的新生成的文件夹,就会找到你所需要的所有WORD图片,既有原始的未压缩的图片,也有经过WORD压缩处理过的图片。

10 11 月 2013

建立能通过微信发消息的人人匿名主页

 

 

 

  1. 如果你还没有建立你们学校的树洞/表白墙/分手墙,请移步:http://page.renren.com/apply
  2. 如果你已经建立了你们学校的树洞/表白墙/分手墙,但还不知道怎么像中南财大树洞(http://page.renren.com/601701572),华科树洞(http://page.renren.com/601663302)一样能通过微信号自动发送出去,可以试试下面的方法.

1.直接访问网址:http://www.weixinwall.com/dxhand/hole

2、在人人公共主页类型一栏选择树洞/表白墙/分手墙。

3.按上面的要求填写,包括人人网公共主页ID,学校和公共主页类型

其中人人网公共主页ID就是你访问公共主页时的网址后面的那串数字(比如601663302)对接成功后会提示

22 8 月 2013

百度网盘1块钱获取1T网络硬盘/永久使用

百度无节操

看到标题再看看360送360G空间,或许就知道怎么回事了,而这次百度网盘破天荒的抛出了1T空间,而且还是永久使用的,什么100G,漏洞营销等等都弱爆了,一个个公司被360逼的不得不免费,这互联网的竞争不是一般的大的。

进入正题,上次360的免费360G分两个步骤,下载PC端和下载手机端就可以了,这次百度网盘,前两个步骤也是一样的,做完前两个步骤即可免费获取460G的空间,如果没什么需要,疯子不推荐大家使用快捷支付获取剩下的564G空间,虽然1块钱就能获取546G空间,但是你用的了这么多么? 多注几个账号也是一样的,省的到时候银行卡那边钱莫名不见了,就该蛋疼了。

剩下的564G空间,可以使用网银支付,原先疯子没测试,以为只能绑定快捷支付才能开通。

活动地址:http://yun.baidu.com/1t

 

最后说一点,网络硬盘呢,容量适合自己就好了,百度的节操早就碎一互联网了,刚开始推广的话,做的非常好,现在下载大文件还需要下载客户端。

另外,领了几百G的空间,好像不用的话有点对不起百度啊,疯子先去把盘塞满看看(1300多G)。。。

转自:分享吧 http://sharebar.org/other/942.html

21 8 月 2013

PHP获取域名方法及获取域名IP的方法

 

我最近在做的一个项目用到获取域名和IP的功能,大致有以下几种方法。

获取域名IP的方法可以使用内置的函数gethostbyname获取,例如:

echo gethostbyname(“www.baidu.com”);

以上则会直接输出域名所对应的的IP,当然各个地方测试的结果是不一样的,因为百度的服务器也不只有一台,我这边的ip是115.239.210.27;
下面是获取域名的方法,例如有一段网址是这样的:http://www.kakata.com/all-the-resources-of-this-blog.html

//则会输出www.kakata.com
//全局数组
echo $_SERVER[“HTTP_HOST”];

我在本地测试则会输出localhost
第二种获得域名的方法则是使用:parse_url函数;

    $url =”http://www.kakata.com/index.php?referer=kakata.com”;
$arr=parse_url($url);
echo “<pre>”;
print_r($arr);
echo “</pre>”;

这段代码获得一个数组,当我们打印这个数组,你会一目了然;
Array
(
[scheme] => http
[host] => www.kakata.com
[path] => /index.php
[query] => referer=kakata.com
)
scheme对应着协议,host则对应着域名,path对应着执行文件的路径,query则对应着相关的参数;
第三种方法:
同样是这一段域名我们使用第三种方法获取域名,我们采用自定义函数获得。

<?php
$url =”http://www.kakata.com/index.php?referer=kakata.com”;
get_host($url);
function get_host($url){
//首先替换掉http://
$url=str_replace(“http://”,””,$url);
//获得去掉http://url的/最先出现的位置
$position=strpos($url,”/”);
//如果没有斜杠则表明url里面没有参数,直接返回url,
//否则截取字符串
if($position==false){
echo $url;
}else{
echo substr($url,0,$position);
}
}
?>

最后一种方法则是使用正则了,这一步比较复杂,要实现复杂的域名匹配就得更复杂的正则,我只是简单的提供一下思路,大家多尝试。

<?php
header(“Content-type:text/html;charset=utf-8″);
$url =”http://www.kakata.com/index.php?referer=kakata.com”;
$pattern=”/(http:\/\/)?(.*)\//”;
if(preg_match($pattern,$url,$arr)){
echo “匹配成功”;
echo “匹配到了”.$arr[2];
}
?>
12 8 月 2013

又搬家了

点点

原来用的主机快到期了,于是昨天申请到小蒋博客的免费主机上,想节省些费用吧。

小蒋博客主机的服务真心不错,昨天傍晚申请,晚上就给开通了。

给小蒋做个广告

小蒋博客

 

 创智主机(有多款稳定超赞的免费主机哟)

 

昨晚到今天,转移主机出了问题。本来数据库导入成功,文件恢复成功,配置修改成功。

可是!打开网站的响应速度到了忍无可忍的地步,可是小蒋的主机是国内的,不应该啊。

只有一一排查,今天中午时候,终于找到原因,是某一个插件,可能国内的阿帕奇的主机与国外的性能不一样吧,某些插件带不了。

这个插件是有名的卖链接的backlinks。因为我的账户现在每个月可以有3条链接的收入,所以也一直在做,可是和博客的速度相比,只有舍弃那一点点的美元了,哈哈哈。

 

在排查时,主题也顺便被我怀疑,所以又动了一下效果。并且清空了所有原来用过的主题。

唉,希望不要再折腾了啊。

 

换了个logo,风骚吧?

 

 

 

07 8 月 2013

网站通过dnspod分布式解析,利用安全宝,Incapsula实行海内外,搜索引擎的分别cdn加速

我之前也做过,但是后来以为对seo不好,加上嫌麻烦,所以又放弃了。 最近自己的百度掉链严重,昨天和乐乐博主聊了又觉得自己网站打开的很慢,在Alexa条的数据中,85%的网站都比我快。亚历山大。 所以今天就又做了这个事情。   首先你要确定哪个是你的主域名,下面全部对主域名进行操作。 (要区分带www的和不带的域名)   我的是www.blogfeng.com(我的根域名是通过htaccess的301跳转方式设置转向这个域名的,据说有利于seo) 所以我只演示这个

一、配置安全宝cnd加速

安全宝官网     点击添加域名

安全宝

点击放大

再点击上图的设置向导 进入到了接入步骤:

安全宝

点击放大

最好选择cname方式,因为dns还是放在dnspod比较管理方便。(当然我们今天做的这件事必须通过dnspod)

安全宝

点击放大

这一步就是设置源站的ip了(注意安全宝的源站不提供cname等其他方式,如果有些人不知道自己的网站ip,请ping一下域名就可以得到了)

安全宝

点击放大

设置好你需要的源站 请只要设置你的主域名即可,比如我,只设置www.blogfeng.com(其他域名如果需要用也可以)     如果你的域名没在安全宝里使用过,那么久还得等审核(国内的服务,都要审核的,所幸安全宝比加速乐好,不需要备案)   审核通过后,就去dnspod那里设置cname   把上图最后一段末尾是aqb.so的长域名设置到dnspod里的cname里就好了。 设置好如下图

dnspod

点击放大

设置好刷新之前的安全宝源站页面如果如下图一样打钩的图像出现,证明一件设置好了

dnspod

点击放大

下面切换到开启安全宝服务的页面,如下图

安全宝

点击放大

好了安全宝这里已经设置好了。

二、Incapsula的设置

 

注意,在这里的设置之前,请回dnspod里,把域名的解析恢复到没做第一步安全宝之前,也就是正常的解析

Incapsula的官网

Incapsula

点击放大

添加需要的主域名   点击add按钮   它会自动扫描该域名当前的ip(如果没扫描正确的话,请回dnspod里恢复最原始的解析,在做这部分设置过程里安全宝要完全弃用)

Incapsula

点击放大

下面会出现它要求设置的根域名和主域名的ip和cname的解析

Incapsula

点击放大

照着去dnspod里面做   做完以后要等5——10分钟,再刷新my site这个页面,直到出现有enable的状态

Incapsula

点击放大

基本上已经成功了,但是现在的设置会自动出现Incapsula的广告,我们点击最右边的”state”按钮进入

Incapsula

点击放大

在最上面点击”settings”设置按钮 最下面的“Web Seal” 右边“Show Seal”原来是打钩的,把它去掉,再点击最上方的“save”保存,设置结果如下图

Incapsula

点击放大

Incapsula也完全设置好了

三、Dnspod的加速设置

先熟悉下我们要用到的dnspod最关键的服务,如下图

dnspod

点击放大

这是分布线路的解析方式,包括电信类型,地点,搜索引擎   但是注意!默认是一定要设置的!防止系统有时候无法判断当前线路的情况下,会有解析。   我默认用的是安全宝

dnspod

点击放大

海外设置成Incapsula   至于搜索引擎,我没有设置,有兴趣的博主可以试试。   下面是完全设置好以后,超级ping的结果图 国内部分:

ping

点击放大

国外部分

ping

点击放大

总体情况

ping

点击放大

 

四、总结

安全宝现在几乎没什么流量限制,但是没备案的网站的节点大多很少,只在香港。我的网站因为有备案,所以可用的国内节点很多,效果较好。 Incapsula现在滥用的人比较少,所以被q的ip很少,但是不排除以后的恶劣情形。另外流量每月限制50g,如果一般的博客还是够用了。     PS:最新更新~dnspod现在不支持分路了,请去注册dnspod国际版,注意需要代理,需要英文浏览器!!!

04 8 月 2013

MYSQL删除表的记录后如何使ID从1开始

方法1:
truncate table 你的表名
//这样不但将数据全部删除,而且重新定位自增的字段

方法2:
delete from 你的表名
dbcc checkident(你的表名,reseed,0)
//重新定位自增的字段,让它从1开始

方法3:
如果你要保存你的数据,介绍你第三种方法,by QINYI
用phpmyadmin导出数据库,你在里面会有发现哦
编辑sql文件,将其中的自增下一个id号改好,再导入。

 

————————-

truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,再加回自增,这也是自增段还原为1的方法。

 

 

———–

MySql数据库唯一编号字段(自动编号字段)
在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性

来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据

列自增属性。

ISAM表

如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开

始,并1为基数递增。

把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。

当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果

插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况

二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递

增。也就是说,可以跳过一些编号。

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号

从该值开始递增。

如果用replace命令基于AUTO_INCREMENT数据列里的值来修改数据表里的现有记录,即AUTO_INCREMENT数

据列出现在了replace命令的where子句里,相应的AUTO_INCREMENT值将不会发生变化。但如果replace命

令是通过其它的PRIMARY KEY OR UNIQUE索引来修改现有记录的(即AUTO_INCREMENT数据列没有出现在

replace命令的where子句中),相应的AUTO_INCREMENT值–如果设置其为NULL(如没有对它赋值)的话–就

会发生变化。

last_insert_id()函数可获得自增列自动生成的最后一个编号。但该函数只与服务器的本次会话过程中

生成的值有关。如果在与服务器的本次会话中尚未生成AUTO_INCREMENT值,则该函数返回0。

其它数据表的自动编号机制都以ISAM表中的机制为基础。

MyISAM数据表

删除最大编号的记录后,该编号不可重用。

可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。

可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。

可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数据表创建一

个由多个数据列组成的PRIMARY KEY OR UNIQUE索引,并把AUTO_INCREMENT数据列包括在这个索引里作为

它的最后一个数据列。这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾

的AUTO_INCREMENT数据列就会生成一个与该组合相对应的序列编号。
HEAP数据表

HEAP数据表从MySQL4.1开始才允许使用自增列。

自增值可通过CREATE TABLE语句的 AUTO_INCREMENT=n选项来设置。

可通过ALTER TABLE语句的AUTO_INCREMENT=n选项来修改自增始初值。

编号不可重用。

HEAP数据表不支持在一个数据表中使用复合索引来生成多个互不干扰的序列编号。

BDB数据表

不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。

可重用编号。

支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。

InnDB数据表

不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。

不可重用编号。

不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。

在使用AUTO_INCREMENT时,应注意以下几点:

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序

列的编号个可增加一倍。

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上

UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

当进行全表删除时,AUTO_INCREMENT会从1重新开始编号。全表删除的意思是发出以下两条语句时:

delete from table_name;
or
truncate table table_name

这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然

后重建数据表。如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以

抑制MySQL的优化:

delete from table_name where 1;

这将迫使MySQL为每个删除的数据行都做一次条件表达式的求值操作。

强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据

表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的

表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用LAST_INSERT_ID()函数

取得这个编号,并把它赋值给主表的存放序列的数据列。如:

insert into id set id = NULL;
insert into main set main_id = LAST_INSERT_ID();

可用alter命令给一个数据表增加一个具有AUTO_INCREMENT属性的数据列。MySQL会自动生成所有的编号

要重新排列现有的序列编号,最简单的方法是先删除该列,再重建该,MySQL会重新生连续的编号序列。

在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_INSERT_ID()函数。如果用一个带参数

的LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_INSERT_ID()函数,

则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作:

先创建一个只有一个数据行的数据表:
create table seq_table (id int unsigned not null);
insert into seq_table values (0);
接着用以下操作检索出序列号:
update seq_table set seq = LAST_INSERT_ID( seq + 1 );
select LAST_INSERT_ID();
通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。

该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_INSERT_ID()函数的返回

值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不

会影响其它客户程序的正常表操作。

alter table table_name auto_increment=n;
注意n只能大于已有的auto_increment的整数值,小于的值无效.
show table status like ‘table_name’ 可以看到auto_increment这一列是表现有的值.
步进值没法改变.只能通过下面提到last_inset_id()函数变通使用
在使用AUTO_INCREMENT时,应注意以下几点:

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序

列的编号个可增加一倍。

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上

UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_INSERT_ID()函数。如果用一个带参数

的LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_INSERT_ID()函数,

则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作:

先创建一个只有一个数据行的数据表:
create table seq_table (id int unsigned not null);
insert into seq_table values (0);
接着用以下操作检索出序列号:
update seq_table set seq = LAST_INSERT_ID( seq + 1 );
select LAST_INSERT_ID();
通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。

该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_INSERT_ID()函数的返回

值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不

会影响其它客户程序的正常表操作。

有两点需要加强注意:
1、只有一列的时候是不行的!
2、自动编号必须作为主键才有效!

04 8 月 2013

C#连接SQL Server数据库连接字符串

数据库常用连接字符串

C#连接SQL Server
程序代码: 
——————————————————————————–
using System.Data;
using System.Data.SqlClient;

string strConnection=”user id=sa;password=;”;
strConnection+=”initial catalog=Northwind;Server=YourSQLServer;”;
strConnection+=”Connect Timeout=30″;
SqlConnection objConnection=new SqlConnection(strConnection);

objConnection.Open();
objConnection.Close();

——————————————————————————–

解释:
连接SQL Server数据库的机制与连接Access的机制没有什么太大的区别,只是改变了Connection对象和连接字符串中的不同参数.

首先,连接SQL Server使用的命名空间不是”System.Data.OleDb”,而是”System.Data.SqlClient”.

其次就是他的连接字符串了,我们一个一个参数来介绍(注意:参数间用分号分隔):
“user id=sa”:连接数据库的验证用户名为sa.他还有一个别名”uid”,所以这句我们还可以写成”uid=sa”.
“password=”:连接数据库的验证密码为空.他的别名为”pwd”,所以我们可以写为”pwd=”.
这里注意,你的SQL Server必须已经设置了需要用户名和密码来登录,否则不能用这样的方式来登录.如果你的SQL Server设置为Windows登录,那么在这里就不需要使用”user id”和”password”这样的方式来登录,而需要使用”Trusted_Connection=SSPI”来进行登录.
“initial catalog=Northwind”:使用的数据源为”Northwind”这个数据库.他的别名为”Database”,本句可以写成”Database=Northwind”.
“Server=YourSQLServer”:使用名为”YourSQLServer”的服务器.他的别名为”Data Source”,”Address”,”Addr”.如果使用的是本地数据库且定义了实例名,则可以写为”Server=(local)\实例名”;如果是远程服务器,则将”(local)”替换为远程服务器的名称或IP地址.
“Connect Timeout=30”:连接超时时间为30秒.
在这里,建立连接对象用的构造函数为:SqlConnection.

————————————————————————————————-
另外,关于身份验证可以参考一下下面的这个:

SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合。每一个属性/值对都由分号隔开。
         PropertyName1=Value1;PropertyName2=Value2;PropertyName3=Value3;…..
同样,连接字符串必须包含SQL Server实例名称:
         Data Source=ServerName;
         使用本地的SQL Server(localhost),如果想要使用远程服务器运行,应该在示例对象中把正确的服务器赋给Data Source 属性。此外,还必须指定所支持的两种身份验证方法(即Windows身份验证和SQL Server身份验证)中的其中一种。Windows身份验证使用Windows登录用户身份连接数据库,而SQL身份验证要求显式地指定SQL Server用户ID和密码。要想使用Windows身份验证,必须在连接字符串中包括 Integrated Security 属性:
         Data Source=ServerName;Integrated Security=True;

         默认情况下,Integrated Security 属性为 False ,这意味着将禁用Windows身份验证。如果没有显式地把这个属性的值设置为True,连接将使用SQL Server身份验证,因此,必须提供SQL Server用户ID和密码。Integrated Security属性还能识别的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口).在所有的Windows NT操作系统上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份验证时可以使用的惟一接口,相当于把Integrated Security 属性值设置为True。
         在Windows身份验证模式中,SQL Server使用Windows的安全子系统对用户连接进行有效性验证。即使显示地指定用户ID和密码,SQL Server也不检查连接字符串中的用户ID和密码。因为只有Windows NT、2000、XP支持SSPI,因此如果正使用的是这些操作系统,则只能使用Windows集成的安全策略去连接SQL Server。不论使用哪一个操作系统,当使用SQL Server身份验证时,必须在连接字符串中指定用户ID和密码:
Data Source=ServerName;User ID=donaldx;Password=unbreakable

         默认情况下,SQL Server .NET Data Provider连接指定用户的默认数据库,当在数据库中创建用户时,可以设置用户的默认数据库。此外,也可以在任意时间更改用户的默认数据库。例如,系统管理员的默认数据库是master。如果想要连接不同的数据库,应该指定数据库的名称:
Data Source=ServerName;Integrated Security=SSPI;Initial Catalog=Northwind

         每一种身份验证都有它的优点和缺点。Windows身份验证使用单一的用户信息库源,因此,不需要为数据库访问去分别配置用户。连接字符串不包含用户ID和密码,因此消除了把用户ID和密码暴露给未授权的用户的危险。可以在Active Directory中管理用户和他们的角色,而不必在SQL Server中显式地配置他们的属性。
Windows身份验证的缺点是,它要求客户通过Windows的安全子系统支持的安全通道去连接SQL Server。如果应用种序需要通过不安全的网络(例如Internet)连接SQL Server,Windows身份验证将不工作。此外,这种身份验证方法也部分地把管理数据库访问控制的责任从DBA身上转移到了系统管理员身上,这在确定的环境中也许是一个问题。
         一般而言,在设计通用的应用程序时,为了使用Windows身份验证,将会对一些方面进行加强。大多数公司的数据库都驻留在比较健壮的Windows服务器操作系统上,那些操作系统都支持Windows身份验证。数据访问层和数据表示层的分离也促进了把数据访问代码封装在中间层组件思想的应用,中间层组件通常运行在具有数据库服务器的内部网络中。当这样设计时,就不需要通过不安全通道建立数据库连接。除此之外,Web服务也使直接连接不同域中数据库的需要大减少。