PHP整理架

我的朋友PHP

#

发现几个不错的字符串截取函数

1. 截取GB2312中文字符串
<?php
//截取中文字符串
function mysubstr($str, $start, $len) {
    
$tmpstr = "";
    
$strlen = $start + $len;
    
for($i = 0$i < $strlen$i++) {
        
if(ord(substr($str, $i, 1)) > 0xa0) {
            
$tmpstr .= substr($str, $i, 2);
            
$i++;
        } 
else
            
$tmpstr .= substr($str, $i, 1);
    }
    
return $tmpstr;
}
?>

2. 截取utf8编码的多字节字符串
<?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
    
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       
'$1',$str);
}
?>

3. UTF-8、GB2312都支持的汉字截取函数
<?php
/* 
Utf-8、gb2312都支持的汉字截取函数 
cut_str(字符串, 截取长度, 开始长度, 编码); 
编码默认为 utf-8 
开始长度默认为 0 
*/ 
 
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8'

    
if($code == 'UTF-8'
    { 
        
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"
        
preg_match_all($pa, $string, $t_string); 
 
        
if(count($t_string[0]) - $start > $sublenreturn join('', array_slice($t_string[0], $start, $sublen)).""
        
return join('', array_slice($t_string[0], $start, $sublen)); 
    } 
    
else 
    { 
        
$start = $start*2
        
$sublen = $sublen*2
        
$strlen = strlen($string); 
        
$tmpstr = ''
 
        
for($i=0$i< $strlen$i++
        { 
            
if($i>=$start && $i< ($start+$sublen)) 
            { 
                
if(ord(substr($string, $i, 1))>129
                { 
                    
$tmpstr.= substr($string, $i, 2); 
                } 
                
else 
                { 
                    
$tmpstr.= substr($string, $i, 1); 
                } 
            } 
            
if(ord(substr($string, $i, 1))>129$i++
        } 
        
if(strlen($tmpstr)< $strlen ) $tmpstr.= ""
        
return $tmpstr
    } 

 
$str = "abcd需要截取的字符串"
echo cut_str($str, 8, 0, 'gb2312'); 
?>

4. BugFree 的字符截取函数
<?php
/*
 * @package     BugFree 
 * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ 
 * 
 * 
 * Return part of a string(Enhance the function substr()) 
 * 
 * @author                  Chunsheng Wang <wwccss@263.net> 
 * @param string  $String  the string to cut. 
 * @param int     $Length  the length of returned string. 
 * @param booble  $Append  whether append "": false|true 
 * @return string           the cutted string. 
 
*/ 
function sysSubStr($String,$Length,$Append = false

    
if (strlen($String< = $Length ) 
    { 
        
return $String
    } 
    
else 
    { 
        
$I = 0
        
while ($I < $Length
        { 
            
$StringTMP = substr($String,$I,1); 
            
if ( ord($StringTMP>=224 ) 
            { 
                
$StringTMP = substr($String,$I,3); 
                
$I = $I + 3
            } 
            
elseiford($StringTMP>=192 ) 
            { 
                
$StringTMP = substr($String,$I,2); 
                
$I = $I + 2
            } 
            
else 
            { 
                
$I = $I + 1
            } 
            
$StringLast[] = $StringTMP
        } 
        
$StringLast = implode("",$StringLast); 
        
if($Append
        { 
            
$StringLast .= ""
        } 
        
return $StringLast
    } 

 
$String = "CodeBit.cn -- 简单、精彩、通用"
$Length = "18"
$Append = false
echo sysSubStr($String,$Length,$Append); 
?>

posted @ 2008-11-19 18:59 小博 阅读(203) | 评论 (0)编辑 收藏

判断远程图片是否存在,否则替换成默认图片或隐藏

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>判断远程图片是否存在,否则替换成默认图片或隐藏</title>
</head>

<body>

<p>判断远程图片是否存在,不存在的话替换成默认的图片,代码如下:</p>
<p>第一种情况存在:<IMG src="http://buy.hipiao.com/images/logo.gif" onerror="javascript:this.src='http://www.XFBBS.Com/Images/Logo.gif'"></p>
<p>第二种情况不存在,替换成本站的logo:<IMG src="http://www.163.com/images/neteaselogo1.gif" onerror="javascript:this.src='http://www.XFBBS.Com/Images/Logo.gif'"></p>


<p>判断远程图片是否存在,隐藏,代码如下:</p>
<p>第一种情况存在:<IMG src="http://buy.hipiao.com/images/logo.gif" onerror="javascript:this.style.display='none'"></p>
<p>第二种情况不存在:<IMG src="http://buy.hipiao.com/images/logo.gi" onerror="javascript:this.style.display='none'"></p>




</body>

</html>
 
注意字符的转义。
 \' \"

posted @ 2008-11-04 16:24 小博 阅读(465) | 评论 (0)编辑 收藏

PHP中$_SERVER的详细用法

$_SERVER['PHP_SELF'#当前正在执行脚本的文件名,与 document root相关。
$_SERVER['argv'#传递给该脚本的参数。
$_SERVER['argc'#包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'#服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['SERVER_NAME'#当前运行脚本所在服务器主机的名称。
$_SERVER['SERVER_SOFTWARE'#服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'#请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'#访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER['QUERY_STRING'#查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'#当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['HTTP_ACCEPT'#当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'#当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'#当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'#当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'#当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'#链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'#当前请求的 User_Agent: 头部的内容。
$_SERVER['REMOTE_ADDR'#正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'#正在浏览当前页面用户的主机名。
$_SERVER['REMOTE_PORT'#用户连接到服务器时所使用的端口。
$_SERVER['SCRIPT_FILENAME'#当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'#管理员信息
$_SERVER['SERVER_PORT'#服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'#包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'#当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'#包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'#访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['PHP_AUTH_USER'#当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'#当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'#当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。 

进一步说明

例:  我需要 获取当前的 的URL  地址

$url_this =  "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $url_this;


则显示 :   http://localhost/lu.php

服务器变量:$_SERVER

注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。

$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 specification 中说明,所以您应该仔细研究它。

这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中您不需要使用 global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。

$HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)

如 果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。相关信息,请参阅安全的相关章节 使用 Register Globals。这些单独的全局变量不是自动全局变量。

您或许会发现下面列出的某些 $_SERVER 元素并不可用。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。

“PHP_SELF”
当前正在执行脚本的文件名,与 document root相关。举例来说,在URL地址为
http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。

如果 PHP 以命令行方式运行,该变量无效。

“argv”
传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 C 语言样式的命令行参数。当调用 GET 方法时,该变量包含请求的数据。

“argc”
包含传递给程序的命令行参数的个数(如果运行在命令行模式)。

“GATEWAY_INTERFACE”
服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。

'SERVER_NAME'
当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,该名称是由那个虚拟主机所设置的值决定。

'SERVER_SOFTWARE'
服务器标识的字串,在响应请求时的头部中给出。

“SERVER_PROTOCOL”
请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。

“REQUEST_METHOD”
访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。

“QUERY_STRING”
查询(query)的字符串。

“DOCUMENT_ROOT”
当前运行脚本所在的文档根目录。在服务器配置文件中定义。

“HTTP_ACCEPT”
当前请求的 Accept: 头部的内容。

“HTTP_ACCEPT_CHARSET”
当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。

“HTTP_ACCEPT_ENCODING”
当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。

“HTTP_ACCEPT_LANGUAGE”
当前请求的 Accept-Language: 头部的内容。例如:“en”。

“HTTP_CONNECTION”
当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。

“HTTP_HOST”
当前请求的 Host: 头部的内容。

“HTTP_REFERER”
链接到当前页面的前一页面的 URL 地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,这个变量不总是正确真实的。

“HTTP_USER_AGENT”
当前请求的 User_Agent: 头部的内容。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。您也可以使用 get_browser() 得到这个信息。

“REMOTE_ADDR”
正在浏览当前页面用户的 IP 地址。

'REMOTE_HOST'
正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。

注: 必须配置 Web 服务器来建立此变量。例如 Apache 需要在 httpd.conf 中有 HostnameLookups On。参见 gethostbyaddr()。

“REMOTE_PORT”
用户连接到服务器时所使用的端口。

“SCRIPT_FILENAME”
当前执行脚本的绝对路径名。

“SERVER_ADMIN”
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。

“SERVER_PORT”
服务器所使用的端口。默认为“80”。如果你使用 SSL 安全连接,则这个值为您所设置的 HTTP 端口。

“SERVER_SIGNATURE”
包含服务器版本和虚拟主机名的字符串。

“PATH_TRANSLATED”
当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。

“SCRIPT_NAME”
包含当前脚本的路径。这在页面需要指向自己时非常有用。

“REQUEST_URI”
访问此页面所需的 URI。例如,“/index.html”。

“PHP_AUTH_USER”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。

“PHP_AUTH_PW”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。

“AUTH_TYPE”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。


posted @ 2008-11-04 09:25 小博 阅读(431) | 评论 (0)编辑 收藏

SELECT 与 SET 对变量赋值的区别(存储过程)

SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。
对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们
并没有注意,其实这两种方式还是有很多差别的。

SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。

下表列出 SET 与 SELECT 的区别。请特别注意红色部分。


set select
同时对多个变量同时赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式未返回值 变量被赋null值 变量保持原值

下面以具体示例来说明问题:

create table chinadba1(
userid int ,
addr varchar(128)
)
go
insert into chinadba1(userid,addr) values(1,'addr1')
insert into chinadba1(userid,addr) values(2,'addr2')
insert into chinadba1(userid,addr) values(3,'addr3')
go

表达式返回多个值时,使用 SET 赋值


declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
--出错信息为
服务器: 消息 512,级别 16,状态 1,行 2
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
*/
go

表达式返回多个值时,使用 SELECT 赋值

declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3
go

表达式未返回值时,使用 SET 赋值

declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值
go

表达式未返回值时,使用 SELECT 赋值

declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go

需要注意的是,SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值。
此时与 使用 SET 赋值是完全相同的
对标量子查询的概念大家应该都觉得陌生,举个例子就能说明

declare @addr varchar(128)
set @addr = '初始值'
--select addr from chinadba1 where userid = 4 为标量子查询语句
select @addr = (select addr from chinadba1 where userid = 4)
print @addr --null值
go

posted @ 2008-10-24 15:25 小博 阅读(439) | 评论 (0)编辑 收藏

PHP E-mail邮箱正则

php 正则匹配邮箱代码,分析的也比较详细,希望对这方面有问题的朋友,可以看下:
code:
<?php
  
if (ereg(“/^[a-z]([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i; ”,$email)){
      
echo “Your email address is correct!”;}
  
else{
      
echo “Please try again!”;
 }
?>

国际域名格式如下:

域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i;
/内容/i 构成一个不区分大小写的正则表达式;
^ 匹配开始

$ 匹配结束

[a-z] E-Mail前缀必需是一个英文字母开头

([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。

*表示0个或多个前面的字符.

[a-z0-9]* 匹配0个或多个英文字母或者数字

[-_]? 匹配0个或1“-”,因为“-”不能连续出现

[a-z0-9]+ 匹配1个或多个英文字母或者数字,因为“-”不能做为结尾

@ 必需有个有@

([a-z0-9]*[-_]?[a-z0-9]+)+ 见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。

[\.] 将特殊字符(.)当成普通字符

[a-z]{2,3} 匹配2个至3个英文字母,一般为com或者net等.

([\.][a-z]{2})? 匹配0个或者1个[\.][a-z]{2}(比如.cn等) 我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}

完美E-Mail正则表达式,附详细讲解,请大家帮忙测试一下! 2.抽取字符串中的email:
<?php
function getEmail($str) {
$pattern = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
preg_match_all($pattern,$str,$emailArr);
return $emailArr[0];
}
$emailstr = "9999@qq.com.cn俺不是米vi地方就开iid邮件列表:fuyongjie@163.com和hh@qq.com;.;;,fuyongjie.100@yahoo.com,fu-1999@sina.com";
$emailArr = getEmail($emailstr);
echo "<pre>";
print_r($emailArr);
echo "</pre>";
?>
打印如下:
Array
(
[
0=>9999@qq.com.cn
[
1=>fuyongjie@163.com
[
2=>hh@qq.com
[
3=>fuyongjie.100@yahoo.com
[
4=>fu-1999@sina.com
)
3.比较:第2里的正则里没有了第1的^和$;

posted @ 2008-10-15 11:48 小博 阅读(3409) | 评论 (0)编辑 收藏

PHP获取地址栏信息的代码

<?php
//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>";
//获取网页地址
echo $_SERVER['PHP_SELF']."<br>";
//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>";
//来源网页的详细地址
echo $_SERVER['HTTP_REFERER']."<br>";
?>

posted @ 2008-10-15 11:42 小博 阅读(141) | 评论 (0)编辑 收藏

【转】php socket 模拟 post 学习函数

今天测试了一个http短信接口,主要用于系统给用户发送信息。看过说明文档之后,明明说明是可以从浏览器访问并测试的,但在我这边从浏览器上访问不了,于是同事给了一个方法,用file函数访问此url,一试,果然正常。
但url一般是类似于http://xxx.com/test.php的形式,参数咋弄咧?可以用get方式直接传过去,但一旦出现了中文,用urlencode编码请求失败,咱们同事又给了一个方法:模拟post。测试后正常,下面是模拟post的代码,一看就知道如何使用了:
/*-----------------------------------------------------------
*功能:使用PHP socke 向指定页面提交数据
*
*作者:Honghe.c
*
*说明:post($url, $data)
*
* $url = 'http://www.xxx.com:8080/login.php';
* $data[user] = 'hong';
* $data[pass] = 'xowldo';
* echo post($url, $data);
*-----------------------------------------------------------
*/

function post($url, $data) {

$url = parse_url($url);
if (!$urlreturn "couldn't parse url";
if (!isset($url['port'])) { $url['port'= ""; }
if (!isset($url['query'])) { $url['query'= ""; }

$encoded = "";

while (list($k,$v= each($data)) {
$encoded .= ($encoded ? "&" : "");
$encoded .= rawurlencode($k)."=".rawurlencode($v);
}

$fp = fsockopen($url['host'], $url['port'? $url['port': 80);
if (!$fpreturn "Failed to open socket to $url[host]";

fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'? "?" : "", $url['query']));
fputs($fp, "Host: $url[host]\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
fputs($fp, "Content-length: " . strlen($encoded. "\n");
fputs($fp, "Connection: close\n\n");

fputs($fp, "$encoded\n");

$line = fgets($fp,1024);
if (!eregi("^HTTP/1\.. 200", $line)) return;

$results = ""$inheader = 1;
while(!feof($fp)) {
$line = fgets($fp,1024);
if ($inheader && ($line == "\n" || $line == "\r\n")) {
$inheader = 0;
}
elseif (!$inheader) {
$results .= $line;
}
}
fclose($fp);

return $results;
}

$url = 'http://127.0.0.1:80/pp.php';
$data['user'= 'hong';
$data['pass'= 'xowldo';
echo post($url, $data);

?>

posted @ 2008-10-15 11:38 小博 阅读(380) | 评论 (0)编辑 收藏

网站与搜索引擎收用的几个技巧

1. DIV CSS网页布局中常用的列表元素ul ol li dl dt dd,对搜索引擎非常友好,在seo中站有很重要的位址,推荐大家使用。而块级元素div尽量少用,和table一样,嵌套越少越好

很多人为忽略 dl dt dd的用法,用dl dt dd来做文章列表对搜索引擎抓取非常友好。

www~phperz~com

dl 内容块
dt 内容块的标题
dd 内容


posted @ 2008-10-14 22:08 小博 阅读(102) | 评论 (0)编辑 收藏

用ADO连接MYSQL的连接字符串

From Zarko Gajic,

If your database choice is mySQL and you are using dbGO (ADO) components, over mySQL ODBC 3.51 driver or MySQL Connector/ODBC 5.0, this is how your TADOConnection's ConnectionString property should look:

  • When using "ODBC 3.51 LOCAL database":

    'DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=myDatabase; USER=myUsername; PASSWORD=myPassword;OPTION=3;'

  • When using "ODBC 3.51 REMOTE database":

    'DRIVER={MySQL ODBC 3.51 Driver}; SERVER=data.domain.com; PORT=3306; DATABASE=myDatabase; USER=myUsername; PASSWORD=myPassword; OPTION=3;'

  • When using "ODBC 5.0 LOCAL database":

    'DRIVER={MySQL Connector/ODBC v5}; SERVER=localhost; DATABASE=myDatabase; UID=myUsername; PASSWORD=myPassword;OPTION=3;'

  • When using "ODBC 5.0 REMOTE database":

    'DRIVER={MySQL Connector/ODBC v5}; SERVER=data.domain.com; PORT=3306; DATABASE=myDatabase; UID=myUsername; PASSWORD=myPassword;OPTION=3;'

posted @ 2008-10-14 11:14 小博 阅读(1811) | 评论 (0)编辑 收藏

[转载]PHP中的cookie

  用PHP来设置并读取cookie是一件极其——我们敢说吗?——简单的事情。我们并不希望大力鼓吹cookie,不过它们的确既重要又实用。它们是解决某些问题时唯一适用的工具。

  要创建并修改一个 cookie,可使用PHP函数setcookie()。取决于想对cookie进行控制的程度,及谁可以读取cookie的值,setcookie()最多可有六个参数。

  设置cookie最简单的方式如下:

<?php
setcookie
('name', 'bret'
);
?>

  然后,在用户退出前,接下来使用此浏览器查看的站点中每一个页面,都会有一个值为“bret”的变量$name,并且很容易通过PHP 对其进行访问。由于其生存期是一次用户连结,此类cookie被称为session cookie。

  如果希望用户关闭其浏览器后,仍保留此cookie,则必须传递第三个参数给setcookie()函数,即设定此cookie的有效日期。由于PHP的背景完全源于Unix的思想,这个有效期限需要以从1970年1月1日起算的总秒数来代表。如果作为Unix程序员,这种算法对你而言可能是合情合理的。但如果来自Windows或Macintosh阵营,你可能只能摇头叹息,无法理解那些古怪的Unix家伙们。

  不过无需害怕。PHP提供一个很好用的函数mktime()。你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,mktime()就会返回该日期自1970年1月1日的总秒数。因此,如果需要模拟 Y2K 问题:

<?php
$y2k
= mktime(0,0,0,1,1,2000
);
setcookie('name', 'bret', $y2k
);
?>

  现在,你的cookie将会在2000年失效。

  如果需要更新cookie以让其储存新值,只需要将其原值覆盖即可。因此,即使你已经在之前的页面中刚刚发送cookie,仍可以将你的名字改为“jeff”。

<?php
$y2k
= mktime(0,0,0,1,1,2000
);
setcookie('name', 'jeff', $y2k
);
?>

  注意这样做并不会改变变量$name的值。在页面载入的时候,其值就已经确定。如果希望总是同时确定二者,可以编写如下代码:

<?php
$name
= 'jeff'
;
$y2k = mktime(0,0,0,1,1,2000
);
setcookie('name', $name, $y2k
);
?>

  setcookie()的下两个参数可以控制读取cookie的程序的域及目录路径。默认设定为仅在与送出cookie的服务器相同且在同级或以下的目录结构内的页面才可以读取其值。这是出于网络安全方面的考虑。然而,如果你有一个帐号“www.domain.com”但同时也是“other.domain.com”,且帐户允许从~/myhome目录处理页面,则应更改setcookie()如下:

<?php
setcookie
('name', 'jeff', $y2k, '~/myhome', '.domain.com'
);
?>

  我们还未使用过的setcookie()最后一个参数是设定cookie只传送给实行诸如SSL的安全连接的Web服务器。要使用此功能,将第六个值设置为1。

  删除cookie非常简单,仅需简单地将cookie的名传送给setcookie(),PHP就会将其删除掉。

<?php
setcookie
('name'
);
?>

  最后还有一个关于使用cookie的重要事项。由于cookie与HTTP的特定工作方式,你必须在你输出任何文本前,传送出所有的cookie。否则PHP会给出警告,并且cookie也不会被传送。因此,这样做是正确的方法:

<?php
setcookie
('name', 'jeff'
);
echo
"Hello Everyone!"
;
?>

  以下是错误地:

<?php
$today
= mktime(12,0,0,6,25,1999
);
echo
'Here it is '.date('g:i:s a, F d, Y',$today
);
echo
''
;
echo
'In GMT it is '.gmdate('g:i:s a, F d, Y',$today
);
?>

posted @ 2008-10-08 23:42 小博 阅读(161) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4