2007/01/31 09:57
早上发现Web服务器连不上数据库了,提示“SQL Server 不存在或访问被拒绝”。想起凌晨服务器搬迁,应该是数据库IP没改,FTP连上一看,改了。想到应该是安全策略没改,上服务器一看,果然是旧的IP,改正。
本来以为好了,确发现,一台Web连数据库正常,另一台还是不行,提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC SQL Server Driver][Named Pipes]没有发现指定的 SQL Server。
奇怪!IP安全策略没问题啊,删除了再加,还是这样:(
试试IP安全策略是否有效,Telnet 数据库IP 1433,能连上!
重启下IIS,还是不行。看来只是代码的问题。
换成其它的连接方式试试,原来是用:
connstr = "Driver={SQL Server}; server=" & db_host & "; uid=" & db_username & "; pwd=" & db_password & "; database=" & db_name
换成:
connstr = "Provider=SQLOLEDB.1;Network=DBMSSOCN;Password='" & db_password & "';Persist Security Info=True;User ID=" & db_username & ";Initial Catalog=" & db_name &";Data Source='" & db_host & "'"
居然搞定了。。。为什么这样就行了的原因不明。
哎,由于连服务器挺慢,解决这个小小的问题化了一个多小时:(
赶快吃早餐了:)
附:MS官方的如何解决 SQL Server 2000 中的连接问题,有时间再仔细看看。
本来以为好了,确发现,一台Web连数据库正常,另一台还是不行,提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC SQL Server Driver][Named Pipes]没有发现指定的 SQL Server。
奇怪!IP安全策略没问题啊,删除了再加,还是这样:(
试试IP安全策略是否有效,Telnet 数据库IP 1433,能连上!
重启下IIS,还是不行。看来只是代码的问题。
换成其它的连接方式试试,原来是用:
connstr = "Driver={SQL Server}; server=" & db_host & "; uid=" & db_username & "; pwd=" & db_password & "; database=" & db_name
换成:
connstr = "Provider=SQLOLEDB.1;Network=DBMSSOCN;Password='" & db_password & "';Persist Security Info=True;User ID=" & db_username & ";Initial Catalog=" & db_name &";Data Source='" & db_host & "'"
居然搞定了。。。为什么这样就行了的原因不明。
哎,由于连服务器挺慢,解决这个小小的问题化了一个多小时:(
赶快吃早餐了:)
附:MS官方的如何解决 SQL Server 2000 中的连接问题,有时间再仔细看看。
2007/01/29 16:46
首页是apache要装上了mod_expires模块,然后在配置文件中加如下类似代码,即可。
ExpiresActive on
ExpiresDefault "now plus 24 hours"
24 hours还可以写为 3 days,4 weeks,1 month等等。
语法:
ExpiresDefault " [plus] { }*"
ExpiresByType type/encoding " [plus] { }*"
where is one of:
access
now (equivalent to 'access')
modification
The plus keyword is optional. should be an integer value [acceptable to atoi()], and is one of:
years
months
weeks
days
hours
minutes
seconds
关于ExpiresDefault的更多设置请参阅官方说明:http://httpd.apache.org/docs/2.2/mod/mod_expires.html#expiresdefault
ExpiresActive on
ExpiresDefault "now plus 24 hours"
24 hours还可以写为 3 days,4 weeks,1 month等等。
语法:
ExpiresDefault "
ExpiresByType type/encoding "
where
access
now (equivalent to 'access')
modification
The plus keyword is optional.
years
months
weeks
days
hours
minutes
seconds
关于ExpiresDefault的更多设置请参阅官方说明:http://httpd.apache.org/docs/2.2/mod/mod_expires.html#expiresdefault
2007/01/24 11:07
基本知识:
自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。
我们假设文件上传字段的名称为 userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。
处理函数:
move_uploaded_file()
(PHP 4 >= 4.0.3, PHP 5)
move_uploaded_file -- 将上传的文件移动到新位置
说明
bool move_uploaded_file ( string filename, string destination )
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。
如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 FALSE。
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
如果目标文件已经存在,将会被覆盖。
示例:
if(move_uploaded_file($_FILES["magfile"]["tmp_name"], $uploaddir))
{
echo "Update OK!";
}
也可用copy(PHP 3, PHP 4, PHP 5)
copy -- 拷贝文件
bool copy ( string source, string dest )
将文件从 source 拷贝到 dest。如果成功则返回 TRUE,失败则返回 FALSE。
提交页:
<form action="." method="post" enctype="multipart/form-data" name="UL">
<!--这里的‘enctype="multipart/form-data" ’是必须的-->
<input type="file" name="picurl" size="15"
accept="image/x-png,image/gif,image/jpeg">
<input type="submit" name="upload" value="上传">
</form>
处理页:
if($_FILES['picurl']['size'] > 0){
if(move_uploaded_file ($_FILES['picurl']['tmp_name'], $_FILES['picurl']['name'])){
echo "图片上传成功";
}
}
其它非File类型的表单,可照样用$_POST['name']来接收。
相比asp上传需要用到第三方类来说,php的上传显的简单的多。
自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。
我们假设文件上传字段的名称为 userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。
处理函数:
move_uploaded_file()
(PHP 4 >= 4.0.3, PHP 5)
move_uploaded_file -- 将上传的文件移动到新位置
说明
bool move_uploaded_file ( string filename, string destination )
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。
如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 FALSE。
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
如果目标文件已经存在,将会被覆盖。
示例:
if(move_uploaded_file($_FILES["magfile"]["tmp_name"], $uploaddir))
{
echo "Update OK!";
}
也可用copy(PHP 3, PHP 4, PHP 5)
copy -- 拷贝文件
bool copy ( string source, string dest )
将文件从 source 拷贝到 dest。如果成功则返回 TRUE,失败则返回 FALSE。
提交页:
<form action="." method="post" enctype="multipart/form-data" name="UL">
<!--这里的‘enctype="multipart/form-data" ’是必须的-->
<input type="file" name="picurl" size="15"
accept="image/x-png,image/gif,image/jpeg">
<input type="submit" name="upload" value="上传">
</form>
处理页:
if($_FILES['picurl']['size'] > 0){
if(move_uploaded_file ($_FILES['picurl']['tmp_name'], $_FILES['picurl']['name'])){
echo "图片上传成功";
}
}
其它非File类型的表单,可照样用$_POST['name']来接收。
相比asp上传需要用到第三方类来说,php的上传显的简单的多。
2007/01/23 21:11
1.子选择器
IE6及更低版本不支持子选择器,这个例子就对IE5-6/Win隐藏透明的背景PNG图像。IE7支持子选择器,因此在IE7中也有效。
html>body{background-image:url(bg.png)}
2.属性选择器
现代浏览器(Safari,Firefox)均支持属性选择器,但IE6及更低版本不支持。以下示例使用属性选择器在符合标准的浏览器中将背景png应用于内容。
div[id="content"]{background-image:url(bg.png)}
IE的有条件注释
<!-- [if IE]
<style type="text/css">
@import ("ie.css")
</style>
-->
IE5和更高版本会接收样式 表ie.css,其它浏览器只会看到一些被注释掉的文本。
还可以使用有条件注释指定一种特定的浏览器,比如IE5.0:
<!-- [if IE 5]
<style type="text/css">
@import ("ie50.css")
</style>
-->
还可以指定一组浏览器,比如IE5.5和更高版本:
<!-- [if gte IE 5.5000]
<style type="text/css">
@import ("ie55up.css")
</style>
-->
或IE5和IE5.5:
<!-- [if lt IE 6]
<style type="text/css">
@import ("ie55up.css")
</style>
-->
这种方法需要要将注释放在HTML中。
带通过滤器
此方法是Tantek Celik基于浏览器解析错误创建的一系列过滤器(http://tantek.com/css/Examples/),允许使用@import规则将样式表提供给选择的浏览器。
将CSS传递给IE5和5.5
@media tty{
i{content:"\";/*" "*/}} @import 'ie5x.css'; /*";}
}/* */
符合标准的浏览器看到的是
@media tty{
i{content:"Blah, blah blah";}
}
实际上会忽略整个规则。
但是在IE 5.x不理解转义字符,最终应用@import规则,读取了ie5x.css。
另一种方法:
/*\*//*/
@import "ie5mac.css";
/**/
IE5下看到的是:
/* blah */
@import "ie5mac.css";
/**/
其它浏览器正确地忽略转义的元素,看到:
/* blah *//*
blah
*/
阅读《CSS Mastery:Advanced Web Standards Solutions》,中文名《精通CSS-高级Web标准解决方案》中,以上是阅读笔记,加以自己的理解和说明,只记录偶觉得重要、容易遗忘及原先不知道的知识。
IE6及更低版本不支持子选择器,这个例子就对IE5-6/Win隐藏透明的背景PNG图像。IE7支持子选择器,因此在IE7中也有效。
html>body{background-image:url(bg.png)}
2.属性选择器
现代浏览器(Safari,Firefox)均支持属性选择器,但IE6及更低版本不支持。以下示例使用属性选择器在符合标准的浏览器中将背景png应用于内容。
div[id="content"]{background-image:url(bg.png)}
IE的有条件注释
<!-- [if IE]
<style type="text/css">
@import ("ie.css")
</style>
-->
IE5和更高版本会接收样式 表ie.css,其它浏览器只会看到一些被注释掉的文本。
还可以使用有条件注释指定一种特定的浏览器,比如IE5.0:
<!-- [if IE 5]
<style type="text/css">
@import ("ie50.css")
</style>
-->
还可以指定一组浏览器,比如IE5.5和更高版本:
<!-- [if gte IE 5.5000]
<style type="text/css">
@import ("ie55up.css")
</style>
-->
或IE5和IE5.5:
<!-- [if lt IE 6]
<style type="text/css">
@import ("ie55up.css")
</style>
-->
这种方法需要要将注释放在HTML中。
带通过滤器
此方法是Tantek Celik基于浏览器解析错误创建的一系列过滤器(http://tantek.com/css/Examples/),允许使用@import规则将样式表提供给选择的浏览器。
将CSS传递给IE5和5.5
@media tty{
i{content:"\";/*" "*/}} @import 'ie5x.css'; /*";}
}/* */
符合标准的浏览器看到的是
@media tty{
i{content:"Blah, blah blah";}
}
实际上会忽略整个规则。
但是在IE 5.x不理解转义字符,最终应用@import规则,读取了ie5x.css。
另一种方法:
/*\*//*/
@import "ie5mac.css";
/**/
IE5下看到的是:
/* blah */
@import "ie5mac.css";
/**/
其它浏览器正确地忽略转义的元素,看到:
/* blah *//*
blah
*/
阅读《CSS Mastery:Advanced Web Standards Solutions》,中文名《精通CSS-高级Web标准解决方案》中,以上是阅读笔记,加以自己的理解和说明,只记录偶觉得重要、容易遗忘及原先不知道的知识。
2007/01/23 20:47
1.星号HTML
HTML元素是网页上的根元素,但IE7以下的版本有一个匿名的根元素,因此需要用* html来指定。
a:hover{border:1px dotted black;}
* html a:hover{border-style:solid;}
2.IE/Mac注释反斜线
IE5错误地允许在注释内部进行转义,其它浏览器都会这个转义,并且应用后面的规则。但是,IE5/Mac会认为注释仍然没有结束,因些会把下一个结束注释字符串前的所有字符忽略。
/* Hiding from IE5/Mac \*/
#nav a{width:6em;}
/* End Hack */
3.结合了星号HTML和注释反斜线方法,称之为Holly(发明人:Holly Bergevin)。
通过这两个规则,就可以对IE6和更低版本应用规则:
/* Hiding from IE5/Mac \*/
* html{height:1px;}
/* End Hack */
可参考站:http://www.positioniseverything.net
4.!important和下划线方法
#nav{position: fixed !important;
position: static;
}
IE4-6会忽略第一个声明并且应用第二个,其它浏览器则应用第一个声明,因为它使用了!important关键字,这提高了此规则在层叠中的优先级。
下划线方法与!important相似,IE6及更低版本会忽略下划线,因此应用第二个声明。
#nav{position: fixed;
_position: static;
}
阅读《CSS Mastery:Advanced Web Standards Solutions》,中文名《精通CSS-高级Web标准解决方案》中,以上是阅读笔记,加以自己的理解和说明,只记录偶觉得重要、容易遗忘及原先不知道的知识。
HTML元素是网页上的根元素,但IE7以下的版本有一个匿名的根元素,因此需要用* html来指定。
a:hover{border:1px dotted black;}
* html a:hover{border-style:solid;}
2.IE/Mac注释反斜线
IE5错误地允许在注释内部进行转义,其它浏览器都会这个转义,并且应用后面的规则。但是,IE5/Mac会认为注释仍然没有结束,因些会把下一个结束注释字符串前的所有字符忽略。
/* Hiding from IE5/Mac \*/
#nav a{width:6em;}
/* End Hack */
3.结合了星号HTML和注释反斜线方法,称之为Holly(发明人:Holly Bergevin)。
通过这两个规则,就可以对IE6和更低版本应用规则:
/* Hiding from IE5/Mac \*/
* html{height:1px;}
/* End Hack */
可参考站:http://www.positioniseverything.net
4.!important和下划线方法
#nav{position: fixed !important;
position: static;
}
IE4-6会忽略第一个声明并且应用第二个,其它浏览器则应用第一个声明,因为它使用了!important关键字,这提高了此规则在层叠中的优先级。
下划线方法与!important相似,IE6及更低版本会忽略下划线,因此应用第二个声明。
#nav{position: fixed;
_position: static;
}
阅读《CSS Mastery:Advanced Web Standards Solutions》,中文名《精通CSS-高级Web标准解决方案》中,以上是阅读笔记,加以自己的理解和说明,只记录偶觉得重要、容易遗忘及原先不知道的知识。







