这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK(’1998-02-03’);
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK(’1998-02-03’);
<?
class php_upload_class{
var $FormName = 'file'; //文件域名称
var $Directroy = './'; //上传至目录
var $MaxSize = 2097152; //最大上传大小
var $CanUpload = true; //是否可以上传
var $doUpFile = ''; //上传的文件名
var $Error = 0; //错误参数
var $user_post_file = array(); //用户上传的文件
var $allow_type = array('gif', 'jpg', 'png', 'bmp','txt','rar','zip','doc', 'pdf');
var $save_info = array(); //返回一组有用信息,用于提示用户。
var $last_error = '';
var $mutiple_up_res = '';
var $img_prefix = 'p_';//重命名图片前缀
var $is_same_name = false; //是否将上传的文件重新名称,默认重名称
var $custom_dir = ''; //自定义图片名称
var $to_remote = false; //是否将上传的图片传到远程服务器
var $host; //远程主机
var $user; //用户名
var $pw; //密码
var $root_dir; //远程路径
var $is_zoom = false; //是否将上传的图片文件生成缩略图,默认不缩放
var $sm_File = ''; //缩略图名称
var $dscChar = 'sm_';//缩略图名称前缀
var $width = 150;//缩略图宽度
var $height = 113;//缩略图高度
var $is_watermark = false; //是否将上传的图片文件打水印,默认不打水印
var $quality = 90; //0-100 生成图片质量
var $errorMsg = false; //水印处理错误
var $waterPos = 0; //水印起始位置
var $waterImage = ""; //水印图片路径
var $waterText = ""; //水印文字
var $textFont = 5; //水印文字大小
var $textColor = "#FF0000"; //水印文字颜色
function php_upload_class($ini_array=array()){
$this->user_post_file = $ini_array['user_post_file'];
$this->allow_type = $ini_array['allow_type'];
$this->is_same_name = $ini_array['is_same_name'];
$this->to_remote = $ini_array['to_remote'];
$this->host = $ini_array['host'];
$this->user = $ini_array['user'];
$this->pw = $ini_array['pw'];
$this->root_dir = $ini_array['root_dir'];
$this->is_zoom = $ini_array['is_zoom'];
$this->is_watermark = $ini_array['is_watermark'];
$this->waterPos = $ini_array['waterPos'];
$this->waterImage = $ini_array['waterImage'];
$this->waterText = $ini_array['waterText'];
$this->textFont = $ini_array['textFont'];
$this->textColor = $ini_array['textColor'];
}
/*上传单个文件*/
function upload_single_file($fileName = ''){
if ($this->CanUpload){
if ($_FILES[$this->FormName]['size'] == 0){
$this->Error = 3;
$this->CanUpload = false;
return $this->Error;
break;
}
}
if($this->CanUpload){
if ($fileName == ''){
$fileName = $_FILES[$this->FormName]['name'];
}
$this->doUpload=@copy($_FILES[$this->FormName]['tmp_name'], $this->Directroy.$fileName);
if($this->doUpload){
$this->doUpFile = $fileName;
chmod($this->Directroy.$fileName, 0777);
return true;
}else{
$this->Error = 4;
return $this->Error;
}
}
//是否创建图片缩略图
if($this->is_zoom){
$imgInfo = @getimagesize($final_file_path);
$srcWidth = $imgInfo[0];
$srcHeight = $imgInfo[1];
if($srcWidth>$srcHeight){
$this->height = $srcHeight*$this->width/$srcWidth;
}elseif($srcWidth<$srcHeight){
$this->width = $srcWidth*$this->height/$srcHeight;
}
$this->thumb($this->dscChar,$this->width,$this->height);
}
//是否给图片加水印
if($this->is_watermark){
$this->imageWaterMark($fileName,$this->waterPos,$this->waterImage,$this->waterText,$this->textFont,$this->textColor);
}
}
/*上传发生错误*/
function parse_upload_error($last_error=0){
switch($last_error){
case "1":$last_error = "<li>上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。</li>";break;
case "2":$last_error = "<li>上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。</li>";break;
case "3":$last_error = "<li>文件只有部分被上传。</li>";break;
case "4":$last_error = "<li>没有文件被上传。</li>";break;
default: $last_error = "";break;
}
return $last_error;
}
/* 上传多个文件 */
function upload_mutiple_file() {
if($this->to_remote){
require("php_ftp_class.php");
$ini_array = array();
$ini_array['host'] = $this->host;
$ini_array['user'] = $this->user;
$ini_array['pw'] = $this->pw;
$ini_array['root_dir'] = $this->root_dir;
$ftp = new php_ftp_class($ini_array);
$ftp->connect();
}
for ($i = 0; $i < count($this->user_post_file['name']); $i++) {
if ($this->user_post_file['error'][$i] == 0) {
$name = $this->user_post_file['name'][$i];
$tmpname = $this->user_post_file['tmp_name'][$i];
$size = $this->user_post_file['size'][$i];
$mime_type = $this->user_post_file['type'][$i];
$type = $this->getExt($this->user_post_file['name'][$i]);
if (!$this->checkSize($size)) {
$this->last_error .= "<li>允许上传的文件最大值为:<b>".$this->get_real_size($this->MaxSize)."</b>,文件 <b>".$name."</b> 的大小为 <b>".$this->get_real_size($size)."</b> ,上传失败。<br>\n";
continue;
}
if (!$this->checkType($type)) {
$this->last_error .= "<li><b>".$type."</b> 类型的文件不允许上传,<b>".$name."</b> 属于该类型,上传失败</li>";
continue;
}
if(!@is_uploaded_file($tmpname)) {
$this->last_error .= "<li>警告:文件 <b>".$name."</b>通过非正常渠道上传,上传失败。</li>";
continue;
}
$basename = $this->getBaseName($name, ".".$type);
$saveas = $this->img_prefix.date("YmdHis").".".$type;
//是否重命名上传文件
$saveas = $this->is_same_name ? $saveas : $name;
//自定义图片名称
$custom_dir = $this->custom_dir."/".date("YmdHis")."-".$this->get6random();
$pathinfo = pathinfo($custom_dir);
if($pathinfo['dirname']!="."){//自定义名称带有目录
$pathinfo['dirname'] = (strpos($pathinfo['dirname'],"/")==0) ? substr($pathinfo['dirname'],1,strlen($pathinfo['dirname'])) : $pathinfo['dirname'];
$pathinfo['dirname'] = str_replace("//","/",$pathinfo['dirname']);
$dirs = explode("/",$pathinfo['dirname']);
$dirname = false;
if($i==0){
foreach($dirs as $dir){
$dirname .= $dir."/";
$ftp->mk_dir($dirname,true);
}
}
$ftp->root_dir = $ini_array['root_dir']."/".$pathinfo['dirname'];
}
$saveas = $this->custom_dir ? $custom_dir.".".$type : $saveas;
$final_file_path = $this->Directroy."/".$saveas; //本地目录
//是否创建图片缩略图
if($this->is_zoom){
$this->CanUpload = true;
$this->doUpFile = $tmpname;
$this->thumb($tmpname,basename($saveas),$this->dscChar,$this->width,$this->height);
//上传缩略图到远程服务器
if($this->to_remote){
$ftp->ftp_put($this->dscChar.$this->sm_File,$this->sm_File);
}else{
if(!@move_uploaded_file($tmpname, $final_file_path)) {
$this->last_error .= $this->parse_upload_error($this->user_post_file['error'][$i]);
continue;
}
}
@unlink($this->sm_File);
}
//是否给图片加水印
if($this->is_watermark){
$this->imageWaterMark($tmpname,$this->waterPos,$this->waterImage,$this->waterText,$this->textFont,$this->textColor);
}
//上传图片到服务器
if($this->to_remote){
$ftp->ftp_put(basename($saveas),$tmpname);
if($ftp->error()){
$this->last_error .= $ftp->error();
continue;
}
}else{
if(!@move_uploaded_file($tmpname, $final_file_path)) {
$this->last_error .= $this->parse_upload_error($this->user_post_file['error'][$i]);
continue;
}
}
//存储当前文件的有关信息,以便其它程序调用。
$this->save_info[] = array("name" => $name,
"type" => $type,
"mime_type" => $mime_type,
"size" => $size,
"saveas" => $saveas,
"path" => $final_file_path
);
}
}
if($this->to_remote){
$ftp->close();
}
$this->mutiple_up_res = '<ul>上传结果:<br>';
$this->mutiple_up_res .= '有 <font color=green><b>'.count($this->save_info).'</b></font> 个文件被成功上传。<br>';
if($this->last_error){
// $this->mutiple_up_res .= '有 <font color=red><b>'.(count($this->user_post_file)-count($this->save_info)).'</b></font> 个文件上传失败。<br>';
$this->mutiple_up_res .= '上传失败,详细如下:';
$this->mutiple_up_res .= $this->last_error;
}
$this->mutiple_up_res .= '</ul>';
return $this->mutiple_up_res; //返回上传结果信息
}
/*创建图片缩略图 */
function thumb($srcFile,$dscFile,$dscChar='',$width=150,$height=113){
if ($this->CanUpload && $this->doUpFile != ''){
$srcFile = $srcFile ? $srcFile : $this->doUpFile;
if ($dscChar == ''){
$dscChar = 'sm_';
}
$dscFile = $dscFile ? $dscFile : $this->Directroy."/".$dscChar.$srcFile;
$data = getimagesize($srcFile);
switch ($data[2]) {
case 1:
$im = @imagecreatefromgif($srcFile);
break;
case 2:
$im = @imagecreatefromjpeg($srcFile);
break;
case 3:
$im = @imagecreatefrompng($srcFile);
break;
}
$srcWidth = $data[0];
$srcHeight = $data[1];
if($srcWidth>$srcHeight){
$width = $this->width;
$height = $srcHeight*$this->width/$srcWidth;
}elseif($srcWidth<$srcHeight){
$width = $srcWidth*$this->height/$srcHeight;
$height = $this->height;
}else{
$width = $this->height;
$height = $this->height;
}
$srcW=imagesx($im);
$srcH=imagesy($im);
$ni=imagecreatetruecolor($width,$height);
imagecopyresized($ni,$im,0,0,0,0,$width,$height,$srcW,$srcH);
$cr = imagejpeg($ni,$dscFile,$this->quality);
@chmod($dscFile, 0777);
if($cr){
$this->sm_File = $dscFile;
return true;
}else{
$this->last_error .= "<li>不能生成<b>"".$dscFile.""</b>的缩略图</li>";
continue;
}
}
}
/* 功能:PHP图片水印 (水印支持图片或文字)
* 参数:
* $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;
* $waterPos 水印位置,有10种状态,0为随机位置;
* 1为顶端居左,2为顶端居中,3为顶端居右;
* 4为中部居左,5为中部居中,6为中部居右;
* 7为底端居左,8为底端居中,9为底端居右;
* $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;
* $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文;
* $textFont 文字大小,值为1、2、3、4或5,默认为5;
* $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色);
*
* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG
* $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。
* 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。
* 加水印后的图片的文件名和 $groundImage 一样。
* 作者:longware @ 2004-11-3 14:15:13 我修改的
*/
function imageWaterMark($groundImage,$waterPos=0,$waterImage,$waterText,$textFont=5,$textColor="#FF0000"){
$isWaterImage = FALSE;
$formatMsg = "警告:暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";
//读取水印文件
if(!empty($waterImage)) {
$isWaterImage = TRUE;
$water_info = @getimagesize($waterImage);
$water_w = $water_info[0];//取得水印图片的宽
$water_h = $water_info[1];//取得水印图片的高
switch($water_info[2]){ //取得水印图片的格式
case 1:$water_im = @imagecreatefromgif($waterImage);break;
case 2:$water_im = @imagecreatefromjpeg($waterImage);break;
case 3:$water_im = @imagecreatefrompng($waterImage);break;
default:
$this->errormsg = $formatMsg;
die("");
break;
}
}
//读取背景图片
if($groundImage) {
$ground_info = getimagesize($groundImage);
$ground_w = $ground_info[0];//取得背景图片的宽
$ground_h = $ground_info[1];//取得背景图片的高
switch($ground_info[2]){//取得背景图片的格式
case 1:$ground_im = imagecreatefromgif($groundImage);break;
case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
case 3:$ground_im = imagecreatefrompng($groundImage);break;
default:
$this->errorMsg = $formatMsg;
die("");
break;
}
}else{
$this->errorMsg = "需要加水印的图片不存在!";
die("");
}
//水印位置
if($isWaterImage){//图片水印
$w = $water_w;
$h = $water_h;
$label = "图片的";
}else{ //文字水印
$temp = imagettfbbox(ceil($textFont*2.5),0,"./ARIAL.TTF",$waterText);//取得使用 TrueType 字体的文本的范围
$w = $temp[2] - $temp[6];
$h = $temp[3] - $temp[7];
unset($temp);
$label = "文字区域";
}
if( ($ground_w<$w) || ($ground_h<$h) ){
$this->errorMsg = "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!";
return;
}
switch($waterPos) {
case 0://随机
$posX = rand(0,($ground_w - $w));
$posY = rand(0,($ground_h - $h));
break;
case 1://1为顶端居左
$posX = 0;
$posY = 0;
break;
case 2://2为顶端居中
$posX = ($ground_w - $w) / 2;
$posY = 0;
break;
case 3://3为顶端居右
$posX = $ground_w - $w;
$posY = 0;
break;
case 4://4为中部居左
$posX = 0;
$posY = ($ground_h - $h) / 2;
break;
case 5://5为中部居中
$posX = ($ground_w - $w) / 2;
$posY = ($ground_h - $h) / 2;
break;
case 6://6为中部居右
$posX = $ground_w - $w;
$posY = ($ground_h - $h) / 2;
break;
case 7://7为底端居左
$posX = 0;
$posY = $ground_h - $h;
break;
case 8://8为底端居中
$posX = ($ground_w - $w) / 2;
$posY = $ground_h - $h;
break;
case 9://9为底端居右
$posX = $ground_w - $w;
$posY = $ground_h - $h;
break;
case 10://自定义
$posX = 160;
$posY = 265;
break;
default://随机
$posX = rand(0,($ground_w - $w));
$posY = rand(0,($ground_h - $h));
break;
}
//设定图像的混色模式
imagealphablending($ground_im, true);
if($isWaterImage){ //图片水印
imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件
}else{//文字水印
if( !empty($textColor) && (strlen($textColor)==7) ){
$R = hexdec(substr($textColor,1,2));
$G = hexdec(substr($textColor,3,2));
$B = hexdec(substr($textColor,5));
}else{
$this->errorMsg = "水印文字颜色格式不正确!";
die("");
}
imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
}
//生成水印后的图片
@unlink($groundImage);
switch($ground_info[2]){ //取得背景图片的格式
case 1:imagegif($ground_im,$groundImage);break;
case 2:imagejpeg($ground_im,$groundImage,$this->quality);break;
case 3:imagepng($ground_im,$groundImage);break;
default:
$this->errorMsg = '不支持该类型背景图片';
die("");
break;
}
//释放内存
if(isset($water_info)) unset($water_info);
if(isset($water_im)) imagedestroy($water_im);
unset($ground_info);
imagedestroy($ground_im);
}
//检查文件是否存在
function scanFile()
{
if ($this->CanUpload){
$scan = is_readable($_FILES[$this->FormName]['name']);
if ($scan){
$this->Error = 2;
}
return $scan;
}
}
//获取文件大小
function getSize($format = 'B')
{
if ($this->CanUpload)
{
if ($_FILES[$this->FormName]['size'] == 0){
$this->Error = 3;
$this->CanUpload = false;
}
switch ($format){
case 'B':
return $_FILES[$this->FormName]['size'];
break;
case 'M':
return ($_FILES[$this->FormName]['size'])/(1024*1024);
break;
}
}
}
//转换大小
function get_real_size($size) {
$kb = 1024; // Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte
if($size < $kb) {
return $size." B";
}else if($size < $mb) {
return round($size/$kb,2)." KB";
}else if($size < $gb) {
return round($size/$mb,2)." MB";
}else if($size < $tb) {
return round($size/$gb,2)." GB";
}else {
return round($size/$tb,2)." TB";
}
}
//获取文件类型
function getExt($filename=false)
{
if($filename){
$stuff = pathinfo($filename);
return $stuff['extension'];
}else{
if ($this->CanUpload){
$ext=$_FILES[$this->FormName]['name'];
$extStr=explode('.',$ext);
$count=count($extStr)-1;
}
return $extStr[$count];
}
}
//获取文件名称
function getName()
{
if ($this->CanUpload){
return $_FILES[$this->FormName]['name'];
}
}
//新建文件名
function newName()
{
if ($this->CanUpload){
$FullName=$_FILES[$this->FormName]['name'];
$extStr=explode('.',$FullName);
$count=count($extStr)-1;
$ext = $extStr[$count];
return date('YmdHis').rand(0,9).'.'.$ext;
}
}
//显示错误参数
function Err(){
return $this->Error;
}
//上传后的文件名
function UpFile(){
if ($this->doUpFile != ''){
return $this->doUpFile;
}else{
$this->Error = 6;
}
}
//上传文件的路径
function filePath(){
if ($this->doUpFile != ''){
return $this->Directroy.$this->doUpFile;
}else{
$this->Error = 6;
}
}
//缩略图文件名称
function thumbMap(){
if ($this->sm_File != ''){
return $this->sm_File;
}else{
$this->Error = 6;
}
}
//////////////////extention
/**//**
* 检测用户提交文件类型是否合法
* @access private
* @return boolean 如果为true说明类型合法,反之不合法
*/
function checkType($extension) {
foreach ($this->allow_type as $type) {
if (strcasecmp($extension , $type) == 0)
return true;
}
return false;
}
/**//**
* 取给定文件文件名,不包括扩展名。
* eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong
*
* @param String $filename 给定要取文件名的文件
* @access private
* @return String 返回文件名
*/
function getBaseName($filename, $type) {
$basename = basename($filename, $type);
return $basename;
}
function halt($msg) {
return $msg;
}
/**//**
* 检测用户提交文件大小是否合法
* @param Integer $size 用户上传文件的大小
* @access private
* @return boolean 如果为true说明大小合法,反之不合法
*/
function checkSize($size) {
if ($size > $this->MaxSize ) {
return false;
}
else {
return true;
}
}
function get6random(){
$return = false;
$str = "1 2 3 4 5 6 7 8 9";
$arr = explode(" ",$str);
srand((double)microtime()*1000000);
for($i=0;$i<=6;$i++){
$salt = rand(0, 9);
$return .= $arr[$salt];
}
return $return;
}
}
////////////////////////////测试
/*
echo '
<form action="" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="submit" name="Submit" value="提交">
<input name="scan" type="hidden" id="up" value="true">
</form>
';
if(!empty($_POST['scan'])){
require("config.php");
require("php_ftp_class.php");
$ini_array = array();
*//*
$settings['FTP_HOST']='192.168.1.8';
$settings['FTP_USER']='program';
$settings['FTP_PW']='k8c3321d';
$settings['FTP_ROOT_DIR']='E:/web/program/product';
*//*
$ini_array['host'] = $settings['FTP_HOST'];
$ini_array['user'] = $settings['FTP_USER'];
$ini_array['pw'] = $settings['FTP_PW'];
$ini_array['root_dir'] = $settings['FTP_ROOT_DIR'];
$ini_array['remote_host_path'] = "http://192.168.1.8/";
$ini_array['user_post_file'] = $_FILES['file'];
$ini_array['allow_type'] = array('gif', 'jpg', 'png', 'bmp');
$ini_array['is_zoom'] = true;//需要生成缩略图
$ini_array['is_watermark'] = true;//需要加水印
$ini_array['waterPos'] = 5 ; //缺省为随机//0为随机 //1为顶端居左 //2为顶端居中 //3为顶端居右 //4为中部居左 //5为中部居中 //6为中部居右 //7为底端居左 //8为底端居中 //9为底端居右
$ini_array['waterImage'] = "./tmpfolder/angel.gif"; //水印图片
$ini_array['waterText'] = "";
$ini_array['textFont'] = 6;
$ini_array['textColor'] = "#ff0000";
$ini_array['is_same_name'] = 1;//不需要重命名上传文件
$upfos = new php_upload_class($ini_array);
$tmpfolder = "./tmpfolder";
if(!file_exists($tmpfolder)) mkdir($tmpfolder, 0777);
$upfos->Directroy = $tmpfolder;
$upfos->upload_mutiple_file();
echo $upfos->mutiple_up_res;
foreach($upfos->save_info as $fileInfo){
echo '<iframe src="ftp_put.php?to='.$fileInfo['saveas'].'&from='.$fileInfo['path'].'" frameborder="0" height="0" width="0" scrolling="no" ></iframe>';
if($upfos->is_zoom) {
echo '<iframe src="ftp_put.php?to=p_small/'.$upfos->dscChar.$fileInfo['saveas'].'&from='.dirname($fileInfo['path'])."/".$upfos->dscChar.$fileInfo['saveas'].'" frameborder="0" height="0" width="0" scrolling="no" ></iframe>';
}
}
// if($upfos->is_zoom) echo "<img src='{$tmpfolder}/sm_".$upfos->save_info[0]['name']."'><br>";
// echo "<img src='{$tmpfolder}/".$upfos->save_info[0]['name']."'>";
}
*/
?>
以上程序运行必要文件。
php_ftp_class.php
<?
class php_ftp_class{
var $user ;
var $pw ;
var $host ;
var $root_dir = "";//root ftp dir of server
var $con_id = 0;//descriptor on ftp connection
var $cwd;//current working dir
var $FTP_MODE = 'FTP_BINARY';// FTP_ASCII | FTP_BINARY
var $ERR = false;//must object display ftp errors
//constr.
function php_ftp_class($ini_array=array('host'=>"localhost",'user'=>"guest",'pw'=>"guest",'root_dir'=>"",'remote_path'=>'http://localhost')){
$this->host = $ini_array['host'];
$this->user = $ini_array['user'];
$this->pw = $ini_array['pw'];
$this->root_dir = $ini_array['root_dir'];
if($this->connect()){
$this->cwd = @ftp_pwd($this->con_id); //返回当前目录名
}
}
//connect to ftp server
function connect(){
$this->con_id = @ftp_connect($this->host);
if(!$this->con_id){
$this->ERR .= "<li>尝试连接到远程主机".$this->host."时发生错误,连接失败</li>";
return false;
}
if(@ftp_login($this->con_id,$this->user,$this->pw)){
return true;
}else{
$this->ERR .= "<li>用户名 <b>"".$this->user.""</b> 错误,不能登录到远端主机 <b>"".$this->host.""</b>,登录失败</li>";
}
return false;
}
//close ftp connection
function close(){
ftp_quit($this->con_id);
}
//print error messages
function error(){
return $this->ERR ? "<ul>FTP错误:".$this->ERR."</ul>\n" : false;
}
//change current working dir
function cd($dir){
if(!@ftp_chdir($this->con_id,$dir)){
$this->ERR .= "<li>Cannot view directory <b>"".$this->root_dir."/".$dir.""</b>!</li>";
return false;
}
$this->cwd=@ftp_pwd($this->con_id);
return true;
}
//create new empty file
function mk_file($name){
if(!$tmpfile=tempnam("/tmp","phpftptmp")){
$this->ERR .= "<li>Can't create temp file?</li>";
return false;
}elseif(!ftp_put($this->con_id,$name,$tmpfile,$this->FTP_MODE)){
$this->ERR .= "<li>Can't create file <b>"".$this->root_dir."/".$this->cwd."/".$name.""</b></li>";
unlink($tmpfile);
return false;
}
unlink($tmpfile);
return true;
}
//create new dir
function mk_dir($dir_name,$ret=false){
$mkdir = @ftp_mkdir($this->con_id,$this->root_dir."/".$this->cwd."/".$dir_name);
if (!$mkdir && !$ret){
$this->ERR .= "<li>不能创建文件夹 <b>"".$this->root_dir.$this->cwd.$dir_name.""</b></li>";
return false;
}
return true;
}
//change access right to object
function set_perm($obj,$num){
//CHMOD 444 ftp.php3
if(!$this->site("CHMOD ".$num." ".$obj)){
$this->ERR .= "<li>Cannot change permitions of object <b>"".$this->root_dir."/".$this->cwd."/".$obj.""</b></li>";
return false;
}
return true;
}
//send SITE command
function site($cmd){
if(!ftp_site($this->con_id, $cmd)){
$this->ERR .= "<li>Cannot send site command <b>"".$cmd.""</b></li>";
return false;
}
return true;
}
//copy file D:/web/images.imp3.net/upload/product $ftp->copy("./images/upload_success.gif","upload_success.gif",true);
function copy($from,$to){
/*
if(file_exists($this->root_dir."/".$to)){
$this->error("Object <b>"".$this->root_dir."/".$to.""</b> already exists!");
return false;
}
srand((double)microtime()*1000000);
$tmpfile= dirname(tempnam('',''))."/phpftptmp.".rand() ;
*/
if(!copy($from,$to)){
$this->ERR .= "<li>上传<b>"$from"</b>到<b>"$this->root_dir/$to"</b>失败!</li>";
return false;
}
return true;
}
function ftp_put($remote_file,$local_file,$ftp_mode=false){
/*
if(file_exists($this->root_dir."/".$to)){
$this->error("Object <b>"".$this->root_dir."/".$to.""</b> already exists!");
return false;
}
*/
//FTP_BINARY为什么不能用变量代替???
if(!$ftp_mode){
if(!ftp_put($this->con_id,$this->root_dir."/".$remote_file,$local_file,FTP_BINARY)){
$this->ERR .= "<li>上传<b>"$local_file"</b>到<b>"$this->root_dir/$remote_file"</b>失败!</li>";
return false;
}
}else{
if(!ftp_put($this->con_id,$this->root_dir."/".$remote_file,$local_file,FTP_ASCII)){
$this->ERR .= "<li>上传<b>"$local_file"</b>到<b>"$this->root_dir/$remote_file"</b>失败!</li>";
return false;
}
}
return true;
}
//move object
function move($from,$to){
if(!@ftp_rename($this->con_id,$this->root_dir."/".$from,$this->root_dir."/".$to)){
$this->ERR .= "<li>移动 <b>"".$this->root_dir."/".$from.""</b> 到 <b>"".$this->root_dir."/".$to.""失败!</b></li>";
return false;
}
return true;
}
//rename object
function rename($from,$to){
if(!@ftp_rename($this->con_id,$this->root_dir."/".$this->cwd."/".$from,$this->root_dir."/".$this->cwd."/".$to)){
$this->ERR .= "<li>Cannot rename object <b>"".$this->root_dir."/".$this->cwd."/".$to.""</b></li>";
return false;
}
return true;
}
//delete directory
function delete_dir($dir){
if(!@ftp_rmdir($this->con_id, $this->root_dir."/".$this->cwd."/".$dir)){
$this->ERR .= "<li>不能删除远端文件夹 <b>"".$this->root_dir."/".$dir.""</b></li>";
return false;
}
return true;
}
//delte file
function delete_file($file){
if(!@ftp_delete($this->con_id, $this->root_dir."/".$this->cwd."/".$file)){
$this->ERR .= "<li>不能删除远端文件 <b>"".$this->root_dir."/".$file.""</b></li>";
return false;
}
return true;
}
//write into file
function write($dest,$FILEDATA){
if(!WIN){
$old_perm=$this->get_perm($dest,'i');
$this->set_perm($dest,"666");
}
$fd=fopen($this->root_dir."/".$this->cwd."/".$dest,"w");
if(!fwrite($fd,$FILEDATA)){
$this->ERR .= "<li>Cannot write file <b>"".$this->root_dir."/".$this->cwd."/".$dest.""</b></li>";
fclose($fd);
if(!WIN)$this->set_perm($dest,"644");
return false;
}
fclose($fd);
if(!WIN)$this->set_perm($dest,"644");
return true;
}
//move uploaded file from TMP into CWD
function move_uploaded_file($file_to_move,$file_name){
srand((double)microtime()*1000000);
if(!$tmp_dir=get_cfg_var('upload_tmp_dir'))$tmp_dir=dirname(tempnam('',''));
$tmpfile=$tmp_dir."/phpftptmp.".rand();
if(!copy($file_to_move,$tmpfile)){
$this->ERR .= "<li>Can't create temp file?</li>";
unlink($file_to_move);
return false;
}elseif(!ftp_put($this->con_id,$this->cwd."/".$file_name,$tmpfile,$this->FTP_MODE)){
$this->ERR .= "<li>Can't write file <b>"".$this->root_dir."/".$this->cwd."/".$file_name.""</b></li>";
unlink($file_to_move);
unlink($tmpfile);
return false;
}
unlink($file_to_move);
unlink($tmpfile);
return true;
}
//return access right of an object, at various formats
function get_perm($obj,$type='i'){
$num=fileperms($obj);
$s=array(07=>'rwx',06=>'rw-',05=>'r-x',04=>'r--',03=>'-wx',02=>'-w-',01=>'--x',00=>'---');
$i=array(07=>'7',06=>'6',05=>'5',04=>'4',03=>'3',02=>'2',01=>'1',00=>'0');
$b=array(
07=>array(1,1,1),
06=>array(1,1,0),
05=>array(1,0,1),
04=>array(1,0,0),
03=>array(0,1,1),
02=>array(0,1,0),
01=>array(0,0,1),
00=>array(0,0,0)
);
switch($type){
case 'b':
$ret['o']=$b[($num & 0700)>>6];
$ret['g']=$b[($num & 070)>>3];
$ret['a']=$b[($num & 07) ];
break;
case 's':
if($num & 0x1000) $ret ='p';//FIFO pipe
elseif($num & 0x2000) $ret.='c';//Character special
elseif($num & 0x4000) $ret.='d';//Directory
elseif($num & 0x6000) $ret.='b';//Block special
elseif($num & 0x8000) $ret.='-';//Regular
elseif($num & 0xA000) $ret.='l';//Symbolic Link
elseif($num & 0xC000) $ret.='s';//Socket
else $str.='?'; //UNKNOWN
$ret.=$s[($num & 0700)>>6];
$ret.=$s[($num & 070)>>3];
$ret.=$s[($num & 07) ];
break;
case 'i':
$ret =$i[($num & 0700)>>6];
$ret.=$i[($num & 070)>>3];
$ret.=$i[($num & 07) ];
break;
}
return $ret;
}
//这里显示方式可以按自己的方法修改
//print dir file list
function dir_list(){
//ftp_nlist ?Returns a list of files in the given directory.
//ftp_rawlist ?Returns a detailed list of files in the given directory.
$dir_list = '
<table border=1 cellpadding=3 cellspacing=0><tr><td>Directories</td><td>Files</td></tr>';
$contents=ftp_nlist($this->con_id, $this->cwd);
$d_i=0;
$f_i=0;
sort($contents);
for($i=0;$i<count($contents);$i++){
$file_size=ftp_size($this->con_id,$contents[$i]);
if(is_dir($this->root_dir.$contents[$i])){
$nlist_dirs[$d_i]=$contents[$i];
$d_i++;
}else{
$nlist_files[$f_i]=$contents[$i];
$nlist_filesize[$f_i]=$file_size;
$f_i++;
}
}
$dir_list .='<tr><td><pre>';
for($i=0;$i<count($nlist_dirs);$i++)
$dir_list .=$nlist_dirs[$i]."<br>";
$dir_list .='</td><td><pre>';
for($i=0;$i<count($nlist_files);$i++)
$dir_list .=$nlist_files[$i]." ".(int)$nlist_filesize[$f_i]."<br>";
$dir_list .='</td></tr></table>';
return $dir_list;
}
}
/*测试
require("config.php");
$FTP_HOST=$settings['FTP_HOST'];
$FTP_USER=$settings['FTP_USER'];
$FTP_PW=$settings['FTP_PW'];
$FTP_ROOT_DIR=$settings['FTP_ROOT_DIR'];
$ftp = new php_ftp_class($FTP_USER,$FTP_PW,$FTP_HOST,$FTP_ROOT_DIR);
$ftp->connect();
$ftp->ftp_put("upload_success.gif","./images/upload_success.gif");
$ftp->close();
$ftp->error();*/
?>
<?
session_start();
//生成验证码图片
Header("Content-type: image/PNG");
$authnum=$_SESSION["authnum"];
srand((double)microtime()*1000000);
$len = strlen($authnum)*12+10;
$im = imagecreate($len,25);
$color[]= array ();
$color[1] = ImageColorAllocate($im, 0x00,0x00,0x00);
$color[2] = ImageColorAllocate($im, 0x00,0x00,0xff);
$color[3] = ImageColorAllocate($im, 0xff,0x33,0x00);
$color[4] = ImageColorAllocate($im, 0x00,0x00,0x99);
$color[5] = ImageColorAllocate($im, 0xff,0x00,0xff);
$color[6] = ImageColorAllocate($im, 0x99,0x66,0xff);
$color[7] = ImageColorAllocate($im, 0x00,0x99,0x99);
$color[8] = ImageColorAllocate($im, 0xff,0xff,0x00);
if($background)
{
$r = substr($background, 0, 2);
$g = substr($background, 2, 2);
$b = substr($background, 4, 2);
$bg = ImageColorAllocate($im, hexdec("0x".$r),hexdec("0x".$g),hexdec("0x".$b));
}
else
{
$bg = ImageColorAllocate($im, 0xcc,0xcc,0xff);
}
imagefill($im, 0, 0, $bg);
for($i=0,$x=5;$i<strlen($authnum);$i++)
{
imagestring($im, 5, $x, rand(2,8), $authnum[$i], $color[rand(1,8)]);
$x+=12;
}
for($i=0;$i<100;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(100,255),rand(100,255),rand(100,255));
imagesetpixel($im, rand()%$len , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?>
hexdec
(PHP 3, PHP 4, PHP 5)
hexdec -- 十六进制转换为十进制
说明
number hexdec ( string hex_string )
返回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。所能转换的最大数值为 7fffffff,即十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
(PHP 3, PHP 4, PHP 5)
hexdec -- 十六进制转换为十进制
说明
number hexdec ( string hex_string )
返回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。所能转换的最大数值为 7fffffff,即十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
事件处理
事件处理概述
事件处理是对象化编程的一个很重要的环节,没有了事件处理,程序就会变得很死,缺乏灵活性。事件处理的过程可以这样表示:发生事件 - 启动事件处理程序 - 事件处理程序作出反应。其中,要使事件处理程序能够启动,必须先告诉对象,如果发生了什么事情,要启动什么处理程序,否则这个流程就不能进行下去。事件的处理程序可以是任意 JavaScript 语句,但是我们一般用特定的自定义函数(function)来处理事情。
指定事件处理程序
指定事件处理程序有三种方法:
方法一 直接在 HTML 标记中指定。这种方法是用得最普遍的。方法是:
<标记 ... ... 事件="事件处理程序" [事件="事件处理程序" ...]>
让我们来看看例子:
<body ... onload="alert('网页读取完成,请慢慢欣赏!')" onunload="alert('再见!')">
这样的定义<body>标记,能使文档读取完毕的时候弹出一个对话框,写着“网页读取完成,请慢慢欣赏”;在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候弹出“再见”。
方法二 编写特定对象特定事件的 JavaScript。这种方法用得比较少,但是在某些场合还是很好用的。方法是:
<script language="JavaScript" for="对象" event="事件">
...
(事件处理程序代码)
...
</script>
例:
<script language="JavaScript" for="window" event="onload">
alert('网页读取完成,请慢慢欣赏!');
</script>
方法三 在 JavaScript 中说明。方法:
<事件主角 - 对象>.<事件> = <事件处理程序>;
用这种方法要注意的是,“事件处理程序”是真正的代码,而不是字符串形式的代码。如果事件处理程序是一个自定义函数,如无使用参数的需要,就不要加“()”。例:
...
function ignoreError() {
return true;
}
...
window.onerror = ignoreError; // 没有使用“()”
这个例子将 ignoreError() 函数定义为 window 对象的 onerror 事件的处理程序。它的效果是忽略该 window 对象下任何错误(由引用不允许访问的 location 对象产生的“没有权限”错误是不能忽略的)。
事件详解
onblur 事件 发生在窗口失去焦点的时候。
应用于:window 对象
onchange 事件 发生在文本输入区的内容被更改,然后焦点从文本输入区移走之后。捕捉此事件主要用于实时检测输入的有效性,或者立刻改变文档内容。
应用于:Password 对象;Select 对象;Text 对象;Textarea 对象
onclick 事件 发生在对象被单击的时候。单击是指鼠标停留在对象上,按下鼠标键,没有移动鼠标而放开鼠标键这一个完整的过程。
一个普通按钮对象(Button)通常会有 onclick 事件处理程序,因为这种对象根本不能从用户那里得到任何信息,没有 onclick 事件处理程序就等于废柴。按钮上添加 onclick 事件处理程序,可以模拟“另一个提交按钮”,方法是:在事件处理程序中更改表单的 action, target, encoding, method 等一个或几个属性,然后调用表单的 submit() 方法。
在 Link 对象的 onclick 事件处理程序中返回 false 值(return false),能阻止浏览器打开此连接。即,如果有一个这样的连接:<a href="http://www.a.com" onclick="return false">Go!</a>,那么无论用户怎样点击,都不会去到 www.a.com 网站,除非用户禁止浏览器运行 JavaScript。
应用于:Button 对象;Checkbox 对象;Image 对象;Link 对象;Radio 对象;Reset 对象;Submit 对象
onerror 事件 发生在错误发生的时候。它的事件处理程序通常就叫做“错误处理程序”(Error Handler),用来处理错误。上边已经介绍过,要忽略一切错误,就使用:
function ignoreError() {
return true;
}
window.onerror = ignoreError;
应用于:window 对象
onfocus 事件 发生在窗口得到焦点的时候。
应用于:window 对象
onload 事件 发生在文档全部下载完毕的时候。全部下载完毕意味着不但 HTML 文件,而且包含的图片,插件,控件,小程序等全部内容都下载完毕。本事件是 window 的事件,但是在 HTML 中指定事件处理程序的时候,我们是把它写在<body>标记中的。
应用于:window 对象
onmousedown 事件 发生在用户把鼠标放在对象上按下鼠标键的时候。参考 onmouseup 事件。
应用于:Button 对象;Link 对象
onmouseout 事件 发生在鼠标离开对象的时候。参考 onmouseover 事件。
应用于:Link 对象
onmouseover 事件 发生在鼠标进入对象范围的时候。这个事件和 onmouseout 事件,再加上图片的预读,就可以做到当鼠标移到图像连接上,图像更改的效果了。有时我们看到,在指向一个连接时,状态栏上不显示地址,而显示其它的资料,看起来这些资料是可以随时更改的。它们是这样做出来的:
<a href="..."
onmouseover="window.status='Click Me Please!'; return true;"
onmouseout="window.status=''; return true;">
应用于:Link 对象
onmouseup 事件 发生在用户把鼠标放在对象上鼠标键被按下的情况下,放开鼠标键的时候。如果按下鼠标键的时候,鼠标并不在放开鼠标的对象上,则本事件不会发生。
应用于:Button 对象;Link 对象
onreset 事件 发生在表单的“重置”按钮被单击(按下并放开)的时候。通过在事件处理程序中返回 false 值(return false)可以阻止表单重置。
应用于:Form 对象
onresize 事件 发生在窗口被调整大小的时候。
应用于:window 对象
onsubmit 事件 发生在表单的“提交”按钮被单击(按下并放开)的时候。可以使用该事件来验证表单的有效性。通过在事件处理程序中返回 false 值(return false)可以阻止表单提交。
应用于:Form 对象
onunload 事件 发生在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候。与 onload 一样,要写在 HTML 中就写到<body>标记里。
有的 Web Masters 用这个方法来弹出“调查表单”,以“强迫”来者填写;有的就弹出广告窗口,唆使来者点击连接。我觉得这种“onunload="open..."”的方法很不好,有时甚至会因为弹出太多窗口而导致资源缺乏。有什么对来者说就应该在网页上说完,不对吗?
应用于:window 对象
关于对象化编程的语句
现在我们有实力学习以下关于对象化编程,但其实属于上一章的内容了。
with 语句 为一个或一组语句指定默认对象。
用法:with (<对象>) <语句>;
with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:
with (Math) {
x = cos(3 * PI) + sin(LN10);
y = tan(14 * E);
}
this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
一个常用的 this 用法:
<script>
...
function check(formObj) {
...
}
...
</script>
<body ...>
...
<form ...>
...
<input type="text" ... onchange="check(this.form)">
...
</form>
...
</body>
这个用法常用于立刻检测表单输入的有效性。
自定义构造函数 我们已经知道,Array(),Image()等构造函数能让我们构造一个变量。其实我们自己也可以写自己的构造函数。自定义构造函数也是用 function。在 function 里边用 this 来定义属性。
function <构造函数名> [(<参数>)] {
...
this.<属性名> = <初始值>;
...
}
然后,用 new 构造函数关键字来构造变量:
var <变量名> = new <构造函数名>[(<参数>)];
构造变量以后,<变量名>成为一个对象,它有它自己的属性——用 this 在 function 里设定的属性。
以下是一个从网上找到的搜集浏览器详细资料的自定义构造函数的例子:
function Is() {
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion); //主版本号
this.minor = parseFloat(navigator.appVersion);//全版本号
this.ns = ((agent.indexOf('mozilla')!=-1) &&
((agent.indexOf('spoofer')==-1) && //是否 Netscape
(agent.indexOf('compatible') == -1)));
this.ns2 = (this.ns && (this.major == 3)); //是否 Netscape 2
this.ns3 = (this.ns && (this.major == 3)); //是否 Netscape 3
this.ns4b = (this.ns && (this.minor < 4.04)); //是否 Netscape 4 低版本
this.ns4 = (this.ns && (this.major >= 4)); //是否 Netscape 4 高版本
this.ie = (agent.indexOf("msie") != -1); //是否 IE
this.ie3 = (this.ie && (this.major == 2)); //是否 IE 3
this.ie4 = (this.ie && (this.major >= 4)); //是否 IE 4
this.op3 = (agent.indexOf("opera") != -1); //是否 Opera 3
this.win = (agent.indexOf("win")!=-1); //是否 Windows 版本
this.mac = (agent.indexOf("mac")!=-1); //是否 Macintosh 版本
this.unix = (agent.indexOf("x11")!=-1); //是否 Unix 版本
}
var is = new Is();
这个构造函数非常完整的搜集了浏览器的信息。我们看到它为对象定义了很多个属性:major, minor, ns, ie, win, mac 等等。它们的意思见上面的注释。把 is 变量定义为 Is() 对象后,用 if (is.ns) 这种格式就可以很方便的知道浏览器的信息了。我们也可以从这个构造函数中看到,它也可以使用一般的 JavaScript 语句(上例中为 var 语句)。
让我们再来看一个使用参数的构造函数:
function myFriend(theName, gender, theAge, birthOn, theJob) {
this.name = theName;
this.isMale = (gender.toLowerCase == 'male');
this.age = theAge;
this.birthday = new Date(birthOn);
this.job = theJob
}
var Stephen = new myFriend('Stephen', 'Male', 18, 'Dec 22, 1982', 'Student');
从这个构造函数我们不但看到了参数的用法,还看到了不同的属性用不同的数据型是可以的(上例五个属性分别为:字符串,布尔值,数字,日期,字符串),还看到了构造函数里也可以用构造函数来“构造”属性。如果用了足够的“保护措施”来避免无限循环,更可以用构造函数自身来构造自己的属性。
使用框架和Cookies
使用框架
在讲述 window 对象的时候,我们提到过,一个框架内的网页也是 window 对象,也就是说,Frame 对象也是 window 对象。用最容易理解的话说,每一个 HTML 文件占用一个 window 对象,包括定义框架的网页(“框架网页”)。在 IE 里用“<iframe>”标记在文档中插入的框架也是 window 对象,但是用“包含网页”的方法(在 HTML 中显示为“<!--webbot bot="include" ...-->”)读取的 HTML 就不占用独自的 window 对象。每一个框架都是包含它的页的 window 对象的一个子对象(不知道应该叫“属性”不该),要引用它,可以用以下几种方法之一:
window.frames[x]
window.frames['frameName']
window.frameName
其中,x 指的是该 window 对象中指定的第几个框架,与其它数组一样,x 也是从零开始的。frameName 指的是该框架的名字,跟<frame>里的“name”属性一样。
如果使用 window.frameName 指定的 window 对象又是一个框架网页,那么引用它的框架的方法:window.frameName.subFrameName。以此类推。
要注意的时,无论在何处,引用“window”对象所返回的,都是“当前”window 对象。如果要访问其它 window 对象,就要用到 parent 和 top 属性。parent 指的是“父级”window 对象,也就是包含当前 window 对象的框架网页;top 指的是窗口最顶端的 window 对象。
使用框架还要密切留意你的 JavaScript 中定义的全局变量和自定义函数。它们都有它们的所属——所在的 window 对象。要引用其它框架中的全局变量或自定义函数,都要用“窗口对象.框架对象[.框架对象…].全局变量或自定义函数”这种很烦的方法。
以上这个问题在建立连接时经常会被忽略:如果在<head>中定义了一个默认目标窗口(<base target="...">),在<a href="javascript:...">中,要知道输入的 JavaScript 语句是在默认目标窗口中运行的,必要时加一些“parent”“top”属性。
使用 Cookies
我们已经知道,在 document 对象中有一个 cookie 属性。但是 Cookie 又是什么?“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。”—— MSIE 帮助。一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件、程序等创建的,但是 JavaScript 也提供了对 Cookies 的很全面的访问权利。
在继续之前,我们先要学一学 Cookie 的基本知识。
每个 Cookie 都是这样的:<cookie名>=<值>
<cookie名>的限制与 JavaScript 的命名限制大同小异,少了“不能用 JavaScript 关键字”,多了“只能用可以用在 URL 编码中的字符”。后者比较难懂,但是只要你只用字母和数字命名,就完全没有问题了。<值>的要求也是“只能用可以用在 URL 编码中的字符”。
每个 Cookie 都有失效日期,一旦电脑的时钟过了失效日期,这个 Cookie 就会被删掉。我们不能直接删掉一个 Cookie,但是可以用设定失效日期早于现在时刻的方法来间接删掉它。
每个网页,或者说每个站点,都有它自己的 Cookies,这些 Cookies 只能由这个站点下的网页来访问,来自其他站点或同一站点下未经授权的区域的网页,是不能访问的。每一“组”Cookies 有规定的总大小(大约 2KB 每“组”),一超过最大总大小,则最早失效的 Cookie 先被删除,来让新的 Cookie“安家”。
现在我们来学习使用 document.cookie 属性。
如果直接使用 document.cookie 属性,或者说,用某种方法,例如给变量赋值,来获得 document.cookie 的值,我们就可以知道在现在的文档中有多少个 Cookies,每个 Cookies 的名字,和它的值。例如,在某文档中添加“document.write(document.cookie)”,结果显示:
name=kevin; email=kevin@kevin.com; lastvisited=index.html
这意味着,文档包含 3 个 Cookies:name, email 和 lastvisited,它们的值分别是 kevin, kevin@kevin.com 和 index.html。可以看到,两个 Cookies 之间是用分号和空格隔开的,于是我们可以用 cookieString.split('; ') 方法得到每个 Cookie 分开的一个数组(先用 var cookieString = document.cookie)。
设定一个 Cookie 的方法是对 document.cookie 赋值。与其它情况下的赋值不同,向 document.cookie 赋值不会删除掉原有的 Cookies,而只会增添 Cookies 或更改原有 Cookie。赋值的格式:
document.cookie = 'cookieName=' + escape('cookieValue')
+ ';expires=' + expirationDateObj.toGMTString();
是不是看到头晕了呢?以上不是粗体字的地方是要照抄不误的,粗体字是要按实际情况做出改动的。cookieName 表示 Cookie 的名称,cookieValue 表示 Cookie 的值,expirationDateObj 表示储存着失效日期的日期对象名,如果不需要指定失效日期,则不需要第二行。不指定失效日期,则浏览器默认是在关闭浏览器(也就是关闭所有窗口)之后过期。
看到了上面的一些下划线了么?这些是应该注意的地方。
首先 escape() 方法:为什么一定要用?因为 Cookie 的值的要求是“只能用可以用在 URL 编码中的字符”。我们知道“escape()”方法是把字符串按 URL 编码方法来编码的,那我们只需要用一个“escape()”方法来处理输出到 Cookie 的值,用“unescape()”来处理从 Cookie 接收过来的值就万无一失了。而且这两个方法的最常用途就是处理 Cookies。其实设定一个 Cookie 只是“document.cookie = 'cookieName=cookieValue'”这么简单,但是为了避免在 cookieValue 中出现 URL 里不准出现的字符,还是用一个 escape() 好。
然后“expires”前面的分号:注意到就行了。是分号而不是其他。
最后 toGMTString() 方法:设定 Cookie 的时效日期都是用 GMT 格式的时间的,其它格式的时间是没有作用的。
现在我们来实战一下。设定一个“name=rose”的 Cookie,在 3 个月后过期。
var expires = new Date();
expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三个月 x 一个月当作 30 天 x 一天 24 小时
x 一小时 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */
document.cookie = 'name=rose;expires=' + expires.toGMTString();
为什么没有用 escape() 方法?这是因为我们知道 rose 是一个合法的 URL 编码字符串,也就是说,'rose' == escape('rose')。一般来说,如果设定 Cookie 时不用 escape(),那获取 Cookie 时也不用 unescape()。
再来一次:编写一个函数,作用是查找指定 Cookie 的值。
function getCookie(cookieName) {
var cookieString = document.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上等号的原因是避免在某些 Cookie 的值里有
// 与 cookieName 一样的字符串。
if (start == -1) // 找不到
return null;
start += cookieName.length + 1;
var end = cookieString.indexOf(';', start);
if (end == -1) return unescape(cookieString.substring(start));
return unescape(cookieString.substring(start, end));
}
这个函数用到了字符串对象的一些方法,如果你不记得了(你是不是这般没记性啊),请快去查查。这个函数所有的 if 语句都没有带上 else,这是因为如果条件成立,程序运行的都是 return 语句,在函数里碰上 return,就会终止运行,所以不加 else 也没问题。该函数在找到 Cookie 时,就会返回 Cookie 的值,否则返回“null”。
现在我们要删除刚才设定的 name=rose Cookie。
var expires = new Date();
expires.setTime(expires.getTime() - 1);
document.cookie = 'name=rose;expires=' + expires.toGMTString();
可以看到,只需要把失效日期改成比现在日期早一点(这里是早 1 毫秒),再用同样的方法设定 Cookie,就可以删掉 Cookie 了。
事件处理概述
事件处理是对象化编程的一个很重要的环节,没有了事件处理,程序就会变得很死,缺乏灵活性。事件处理的过程可以这样表示:发生事件 - 启动事件处理程序 - 事件处理程序作出反应。其中,要使事件处理程序能够启动,必须先告诉对象,如果发生了什么事情,要启动什么处理程序,否则这个流程就不能进行下去。事件的处理程序可以是任意 JavaScript 语句,但是我们一般用特定的自定义函数(function)来处理事情。
指定事件处理程序
指定事件处理程序有三种方法:
方法一 直接在 HTML 标记中指定。这种方法是用得最普遍的。方法是:
<标记 ... ... 事件="事件处理程序" [事件="事件处理程序" ...]>
让我们来看看例子:
<body ... onload="alert('网页读取完成,请慢慢欣赏!')" onunload="alert('再见!')">
这样的定义<body>标记,能使文档读取完毕的时候弹出一个对话框,写着“网页读取完成,请慢慢欣赏”;在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候弹出“再见”。
方法二 编写特定对象特定事件的 JavaScript。这种方法用得比较少,但是在某些场合还是很好用的。方法是:
<script language="JavaScript" for="对象" event="事件">
...
(事件处理程序代码)
...
</script>
例:
<script language="JavaScript" for="window" event="onload">
alert('网页读取完成,请慢慢欣赏!');
</script>
方法三 在 JavaScript 中说明。方法:
<事件主角 - 对象>.<事件> = <事件处理程序>;
用这种方法要注意的是,“事件处理程序”是真正的代码,而不是字符串形式的代码。如果事件处理程序是一个自定义函数,如无使用参数的需要,就不要加“()”。例:
...
function ignoreError() {
return true;
}
...
window.onerror = ignoreError; // 没有使用“()”
这个例子将 ignoreError() 函数定义为 window 对象的 onerror 事件的处理程序。它的效果是忽略该 window 对象下任何错误(由引用不允许访问的 location 对象产生的“没有权限”错误是不能忽略的)。
事件详解
onblur 事件 发生在窗口失去焦点的时候。
应用于:window 对象
onchange 事件 发生在文本输入区的内容被更改,然后焦点从文本输入区移走之后。捕捉此事件主要用于实时检测输入的有效性,或者立刻改变文档内容。
应用于:Password 对象;Select 对象;Text 对象;Textarea 对象
onclick 事件 发生在对象被单击的时候。单击是指鼠标停留在对象上,按下鼠标键,没有移动鼠标而放开鼠标键这一个完整的过程。
一个普通按钮对象(Button)通常会有 onclick 事件处理程序,因为这种对象根本不能从用户那里得到任何信息,没有 onclick 事件处理程序就等于废柴。按钮上添加 onclick 事件处理程序,可以模拟“另一个提交按钮”,方法是:在事件处理程序中更改表单的 action, target, encoding, method 等一个或几个属性,然后调用表单的 submit() 方法。
在 Link 对象的 onclick 事件处理程序中返回 false 值(return false),能阻止浏览器打开此连接。即,如果有一个这样的连接:<a href="http://www.a.com" onclick="return false">Go!</a>,那么无论用户怎样点击,都不会去到 www.a.com 网站,除非用户禁止浏览器运行 JavaScript。
应用于:Button 对象;Checkbox 对象;Image 对象;Link 对象;Radio 对象;Reset 对象;Submit 对象
onerror 事件 发生在错误发生的时候。它的事件处理程序通常就叫做“错误处理程序”(Error Handler),用来处理错误。上边已经介绍过,要忽略一切错误,就使用:
function ignoreError() {
return true;
}
window.onerror = ignoreError;
应用于:window 对象
onfocus 事件 发生在窗口得到焦点的时候。
应用于:window 对象
onload 事件 发生在文档全部下载完毕的时候。全部下载完毕意味着不但 HTML 文件,而且包含的图片,插件,控件,小程序等全部内容都下载完毕。本事件是 window 的事件,但是在 HTML 中指定事件处理程序的时候,我们是把它写在<body>标记中的。
应用于:window 对象
onmousedown 事件 发生在用户把鼠标放在对象上按下鼠标键的时候。参考 onmouseup 事件。
应用于:Button 对象;Link 对象
onmouseout 事件 发生在鼠标离开对象的时候。参考 onmouseover 事件。
应用于:Link 对象
onmouseover 事件 发生在鼠标进入对象范围的时候。这个事件和 onmouseout 事件,再加上图片的预读,就可以做到当鼠标移到图像连接上,图像更改的效果了。有时我们看到,在指向一个连接时,状态栏上不显示地址,而显示其它的资料,看起来这些资料是可以随时更改的。它们是这样做出来的:
<a href="..."
onmouseover="window.status='Click Me Please!'; return true;"
onmouseout="window.status=''; return true;">
应用于:Link 对象
onmouseup 事件 发生在用户把鼠标放在对象上鼠标键被按下的情况下,放开鼠标键的时候。如果按下鼠标键的时候,鼠标并不在放开鼠标的对象上,则本事件不会发生。
应用于:Button 对象;Link 对象
onreset 事件 发生在表单的“重置”按钮被单击(按下并放开)的时候。通过在事件处理程序中返回 false 值(return false)可以阻止表单重置。
应用于:Form 对象
onresize 事件 发生在窗口被调整大小的时候。
应用于:window 对象
onsubmit 事件 发生在表单的“提交”按钮被单击(按下并放开)的时候。可以使用该事件来验证表单的有效性。通过在事件处理程序中返回 false 值(return false)可以阻止表单提交。
应用于:Form 对象
onunload 事件 发生在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候。与 onload 一样,要写在 HTML 中就写到<body>标记里。
有的 Web Masters 用这个方法来弹出“调查表单”,以“强迫”来者填写;有的就弹出广告窗口,唆使来者点击连接。我觉得这种“onunload="open..."”的方法很不好,有时甚至会因为弹出太多窗口而导致资源缺乏。有什么对来者说就应该在网页上说完,不对吗?
应用于:window 对象
关于对象化编程的语句
现在我们有实力学习以下关于对象化编程,但其实属于上一章的内容了。
with 语句 为一个或一组语句指定默认对象。
用法:with (<对象>) <语句>;
with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:
with (Math) {
x = cos(3 * PI) + sin(LN10);
y = tan(14 * E);
}
this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
一个常用的 this 用法:
<script>
...
function check(formObj) {
...
}
...
</script>
<body ...>
...
<form ...>
...
<input type="text" ... onchange="check(this.form)">
...
</form>
...
</body>
这个用法常用于立刻检测表单输入的有效性。
自定义构造函数 我们已经知道,Array(),Image()等构造函数能让我们构造一个变量。其实我们自己也可以写自己的构造函数。自定义构造函数也是用 function。在 function 里边用 this 来定义属性。
function <构造函数名> [(<参数>)] {
...
this.<属性名> = <初始值>;
...
}
然后,用 new 构造函数关键字来构造变量:
var <变量名> = new <构造函数名>[(<参数>)];
构造变量以后,<变量名>成为一个对象,它有它自己的属性——用 this 在 function 里设定的属性。
以下是一个从网上找到的搜集浏览器详细资料的自定义构造函数的例子:
function Is() {
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion); //主版本号
this.minor = parseFloat(navigator.appVersion);//全版本号
this.ns = ((agent.indexOf('mozilla')!=-1) &&
((agent.indexOf('spoofer')==-1) && //是否 Netscape
(agent.indexOf('compatible') == -1)));
this.ns2 = (this.ns && (this.major == 3)); //是否 Netscape 2
this.ns3 = (this.ns && (this.major == 3)); //是否 Netscape 3
this.ns4b = (this.ns && (this.minor < 4.04)); //是否 Netscape 4 低版本
this.ns4 = (this.ns && (this.major >= 4)); //是否 Netscape 4 高版本
this.ie = (agent.indexOf("msie") != -1); //是否 IE
this.ie3 = (this.ie && (this.major == 2)); //是否 IE 3
this.ie4 = (this.ie && (this.major >= 4)); //是否 IE 4
this.op3 = (agent.indexOf("opera") != -1); //是否 Opera 3
this.win = (agent.indexOf("win")!=-1); //是否 Windows 版本
this.mac = (agent.indexOf("mac")!=-1); //是否 Macintosh 版本
this.unix = (agent.indexOf("x11")!=-1); //是否 Unix 版本
}
var is = new Is();
这个构造函数非常完整的搜集了浏览器的信息。我们看到它为对象定义了很多个属性:major, minor, ns, ie, win, mac 等等。它们的意思见上面的注释。把 is 变量定义为 Is() 对象后,用 if (is.ns) 这种格式就可以很方便的知道浏览器的信息了。我们也可以从这个构造函数中看到,它也可以使用一般的 JavaScript 语句(上例中为 var 语句)。
让我们再来看一个使用参数的构造函数:
function myFriend(theName, gender, theAge, birthOn, theJob) {
this.name = theName;
this.isMale = (gender.toLowerCase == 'male');
this.age = theAge;
this.birthday = new Date(birthOn);
this.job = theJob
}
var Stephen = new myFriend('Stephen', 'Male', 18, 'Dec 22, 1982', 'Student');
从这个构造函数我们不但看到了参数的用法,还看到了不同的属性用不同的数据型是可以的(上例五个属性分别为:字符串,布尔值,数字,日期,字符串),还看到了构造函数里也可以用构造函数来“构造”属性。如果用了足够的“保护措施”来避免无限循环,更可以用构造函数自身来构造自己的属性。
使用框架和Cookies
使用框架
在讲述 window 对象的时候,我们提到过,一个框架内的网页也是 window 对象,也就是说,Frame 对象也是 window 对象。用最容易理解的话说,每一个 HTML 文件占用一个 window 对象,包括定义框架的网页(“框架网页”)。在 IE 里用“<iframe>”标记在文档中插入的框架也是 window 对象,但是用“包含网页”的方法(在 HTML 中显示为“<!--webbot bot="include" ...-->”)读取的 HTML 就不占用独自的 window 对象。每一个框架都是包含它的页的 window 对象的一个子对象(不知道应该叫“属性”不该),要引用它,可以用以下几种方法之一:
window.frames[x]
window.frames['frameName']
window.frameName
其中,x 指的是该 window 对象中指定的第几个框架,与其它数组一样,x 也是从零开始的。frameName 指的是该框架的名字,跟<frame>里的“name”属性一样。
如果使用 window.frameName 指定的 window 对象又是一个框架网页,那么引用它的框架的方法:window.frameName.subFrameName。以此类推。
要注意的时,无论在何处,引用“window”对象所返回的,都是“当前”window 对象。如果要访问其它 window 对象,就要用到 parent 和 top 属性。parent 指的是“父级”window 对象,也就是包含当前 window 对象的框架网页;top 指的是窗口最顶端的 window 对象。
使用框架还要密切留意你的 JavaScript 中定义的全局变量和自定义函数。它们都有它们的所属——所在的 window 对象。要引用其它框架中的全局变量或自定义函数,都要用“窗口对象.框架对象[.框架对象…].全局变量或自定义函数”这种很烦的方法。
以上这个问题在建立连接时经常会被忽略:如果在<head>中定义了一个默认目标窗口(<base target="...">),在<a href="javascript:...">中,要知道输入的 JavaScript 语句是在默认目标窗口中运行的,必要时加一些“parent”“top”属性。
使用 Cookies
我们已经知道,在 document 对象中有一个 cookie 属性。但是 Cookie 又是什么?“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。”—— MSIE 帮助。一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件、程序等创建的,但是 JavaScript 也提供了对 Cookies 的很全面的访问权利。
在继续之前,我们先要学一学 Cookie 的基本知识。
每个 Cookie 都是这样的:<cookie名>=<值>
<cookie名>的限制与 JavaScript 的命名限制大同小异,少了“不能用 JavaScript 关键字”,多了“只能用可以用在 URL 编码中的字符”。后者比较难懂,但是只要你只用字母和数字命名,就完全没有问题了。<值>的要求也是“只能用可以用在 URL 编码中的字符”。
每个 Cookie 都有失效日期,一旦电脑的时钟过了失效日期,这个 Cookie 就会被删掉。我们不能直接删掉一个 Cookie,但是可以用设定失效日期早于现在时刻的方法来间接删掉它。
每个网页,或者说每个站点,都有它自己的 Cookies,这些 Cookies 只能由这个站点下的网页来访问,来自其他站点或同一站点下未经授权的区域的网页,是不能访问的。每一“组”Cookies 有规定的总大小(大约 2KB 每“组”),一超过最大总大小,则最早失效的 Cookie 先被删除,来让新的 Cookie“安家”。
现在我们来学习使用 document.cookie 属性。
如果直接使用 document.cookie 属性,或者说,用某种方法,例如给变量赋值,来获得 document.cookie 的值,我们就可以知道在现在的文档中有多少个 Cookies,每个 Cookies 的名字,和它的值。例如,在某文档中添加“document.write(document.cookie)”,结果显示:
name=kevin; email=kevin@kevin.com; lastvisited=index.html
这意味着,文档包含 3 个 Cookies:name, email 和 lastvisited,它们的值分别是 kevin, kevin@kevin.com 和 index.html。可以看到,两个 Cookies 之间是用分号和空格隔开的,于是我们可以用 cookieString.split('; ') 方法得到每个 Cookie 分开的一个数组(先用 var cookieString = document.cookie)。
设定一个 Cookie 的方法是对 document.cookie 赋值。与其它情况下的赋值不同,向 document.cookie 赋值不会删除掉原有的 Cookies,而只会增添 Cookies 或更改原有 Cookie。赋值的格式:
document.cookie = 'cookieName=' + escape('cookieValue')
+ ';expires=' + expirationDateObj.toGMTString();
是不是看到头晕了呢?以上不是粗体字的地方是要照抄不误的,粗体字是要按实际情况做出改动的。cookieName 表示 Cookie 的名称,cookieValue 表示 Cookie 的值,expirationDateObj 表示储存着失效日期的日期对象名,如果不需要指定失效日期,则不需要第二行。不指定失效日期,则浏览器默认是在关闭浏览器(也就是关闭所有窗口)之后过期。
看到了上面的一些下划线了么?这些是应该注意的地方。
首先 escape() 方法:为什么一定要用?因为 Cookie 的值的要求是“只能用可以用在 URL 编码中的字符”。我们知道“escape()”方法是把字符串按 URL 编码方法来编码的,那我们只需要用一个“escape()”方法来处理输出到 Cookie 的值,用“unescape()”来处理从 Cookie 接收过来的值就万无一失了。而且这两个方法的最常用途就是处理 Cookies。其实设定一个 Cookie 只是“document.cookie = 'cookieName=cookieValue'”这么简单,但是为了避免在 cookieValue 中出现 URL 里不准出现的字符,还是用一个 escape() 好。
然后“expires”前面的分号:注意到就行了。是分号而不是其他。
最后 toGMTString() 方法:设定 Cookie 的时效日期都是用 GMT 格式的时间的,其它格式的时间是没有作用的。
现在我们来实战一下。设定一个“name=rose”的 Cookie,在 3 个月后过期。
var expires = new Date();
expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三个月 x 一个月当作 30 天 x 一天 24 小时
x 一小时 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */
document.cookie = 'name=rose;expires=' + expires.toGMTString();
为什么没有用 escape() 方法?这是因为我们知道 rose 是一个合法的 URL 编码字符串,也就是说,'rose' == escape('rose')。一般来说,如果设定 Cookie 时不用 escape(),那获取 Cookie 时也不用 unescape()。
再来一次:编写一个函数,作用是查找指定 Cookie 的值。
function getCookie(cookieName) {
var cookieString = document.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上等号的原因是避免在某些 Cookie 的值里有
// 与 cookieName 一样的字符串。
if (start == -1) // 找不到
return null;
start += cookieName.length + 1;
var end = cookieString.indexOf(';', start);
if (end == -1) return unescape(cookieString.substring(start));
return unescape(cookieString.substring(start, end));
}
这个函数用到了字符串对象的一些方法,如果你不记得了(你是不是这般没记性啊),请快去查查。这个函数所有的 if 语句都没有带上 else,这是因为如果条件成立,程序运行的都是 return 语句,在函数里碰上 return,就会终止运行,所以不加 else 也没问题。该函数在找到 Cookie 时,就会返回 Cookie 的值,否则返回“null”。
现在我们要删除刚才设定的 name=rose Cookie。
var expires = new Date();
expires.setTime(expires.getTime() - 1);
document.cookie = 'name=rose;expires=' + expires.toGMTString();
可以看到,只需要把失效日期改成比现在日期早一点(这里是早 1 毫秒),再用同样的方法设定 Cookie,就可以删掉 Cookie 了。
ajax.js
/**
* ajax无刷新二级联动下拉菜单(省市联动)
*
* @author arcow <arcow@126.com>
* @version 1.0
* @lastupdate 2005-12-29
*
*/
/**
* ajax无刷新二级联动下拉菜单(省市联动)
*
* @author arcow <arcow@126.com>
* @version 1.0
* @lastupdate 2005-12-29
*
*/
<html>
<head>
<title>省市县关联菜单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
body,select
{
font-size:9pt;
font-family:Verdana;
}
a
{
color:red;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Dsy()
{
this.Items = {};
}
Dsy.prototype.add = function(id,iArray)
{
this.Items[id] = iArray;
}
Dsy.prototype.Exists = function(id)
{
if(typeof(this.Items[id]) == "undefined") return false;
return true;
}
function change(v){
var str="0";
for(i=0;i<v;i++){ str+=("_"+(document.getElementById(s[i]).selectedIndex-1));};
var ss=document.getElementById(s[v]);
with(ss){
length = 0;
options[0]=new Option(opt0[v],opt0[v]);
if(v && document.getElementById(s[v-1]).selectedIndex>0 &#124;&#124; !v)
{
if(dsy.Exists(str)){
ar = dsy.Items[str];
for(i=0;i<ar.length;i++)options[length]=new Option(ar[i],ar[i]);
if(v)options[1].selected = true;
}
}
if(++v<s.length){change(v);}
}
}
var dsy = new Dsy();
dsy.add("0",["北京","安徽","福建","甘肃","广东","广西","贵州","海南","河北","河南","黑龙江","湖北","湖南","吉林","江苏","江西","辽宁","内蒙古","宁夏","青海","山东","山西","陕西","上海","四川","天津","西藏","新疆","云南","浙江","重庆"]);
dsy.add("0_0",["北京"]);
dsy.add("0_0_0",["北京市","东城","西城","崇文","宣武","朝阳","丰台","石景山","海淀","门头沟","房山","通州","顺义","昌平","大兴","平谷","怀柔","密云","延庆"]);
dsy.add("0_1",["安庆","蚌埠","巢湖","池州","滁州","阜阳","合肥","淮北","淮南","黄山","六安","马鞍山","宿州","铜陵","芜湖","宣城","亳州"]);
dsy.add("0_1_0",["安庆市","怀宁县","潜山县","宿松县","太湖县","桐城市","望江县","岳西县","枞阳县"]);
dsy.add("0_1_1",["蚌埠市","固镇县","怀远县","五河县"]);
dsy.add("0_1_2",["巢湖市","含山县","和县","庐江县","无为县"]);
dsy.add("0_1_3",["池州市","东至县","青阳县","石台县"]);
dsy.add("0_1_4",["滁州市","定远县","凤阳县","来安县","明光市","全椒县","天长市"]);
dsy.add("0_1_5",["阜南县","阜阳市","界首市","临泉县","太和县","颖上县"]);
dsy.add("0_1_6",["长丰县","肥东县","肥西县"]);
dsy.add("0_1_7",["淮北市","濉溪县"]);
dsy.add("0_1_8",["凤台县","淮南市"]);
dsy.add("0_1_9",["黄山市","祁门县","休宁县","歙县","黟县"]);
dsy.add("0_1_10",["霍邱县","霍山县","金寨县","六安市","寿县","舒城县"]);
dsy.add("0_1_11",["当涂县","马鞍山市"]);
dsy.add("0_1_12",["灵璧县","宿州市","萧县","泗县","砀山县"]);
dsy.add("0_1_13",["铜陵市","铜陵县"]);
dsy.add("0_1_14",["繁昌县","南陵县","芜湖市","芜湖县"]);
dsy.add("0_1_15",["广德县","绩溪县","郎溪县","宁国市","宣城市","泾县","旌德县"]);
dsy.add("0_1_16",["利辛县","蒙城县","涡阳县","亳州市"]);
dsy.add("0_2",["福州","龙岩","南平","宁德","莆田","泉州","三明","厦门","漳州"]);
dsy.add("0_2_0",["长乐市","福清市","福州市","连江县","罗源县","闽侯县","闽清县","平潭县","永泰县"]);
dsy.add("0_2_1",["长汀县","连城县","龙岩市","上杭县","武平县","永定县","漳平市"]);
dsy.add("0_2_2",["光泽县","建阳市","建瓯市","南平市","浦城县","邵武市","顺昌县","松溪县","武夷山市","政和县"]);
dsy.add("0_2_3",["福安市","福鼎市","古田县","宁德市","屏南县","寿宁县","霞浦县","周宁县","柘荣县"]);
dsy.add("0_2_4",["莆田市","仙游县"]);
dsy.add("0_2_5",["安溪县","德化县","惠安县","金门县","晋江市","南安市","泉州市","石狮市","永春县"]);
dsy.add("0_2_6",["大田县","建宁县","将乐县","明溪县","宁化县","清流县","三明市","沙县","泰宁县","永安市","尤溪县"]);
dsy.add("0_2_7",["厦门市"]);
dsy.add("0_2_8",["长泰县","东山县","华安县","龙海市","南靖县","平和县","云霄县","漳浦县","漳州市","诏安县"]);
dsy.add("0_3",["白银","定西","甘南藏族自治州","嘉峪关","金昌","酒泉","兰州","临夏回族自治州","陇南","平凉","庆阳","天水","武威","张掖"]);
dsy.add("0_3_0",["白银市","会宁县","景泰县","靖远县"]);
dsy.add("0_3_1",["定西县","临洮县","陇西县","通渭县","渭源县","漳县","岷县"]);
dsy.add("0_3_2",["迭部县","合作市","临潭县","碌曲县","玛曲县","夏河县","舟曲县","卓尼县"]);
dsy.add("0_3_3",["嘉峪关市"]);
dsy.add("0_3_4",["金昌市","永昌县"]);
dsy.add("0_3_5",["阿克塞哈萨克族自治县","安西县","敦煌市","金塔县","酒泉市","肃北蒙古族自治县","玉门市"]);
dsy.add("0_3_6",["皋兰县","兰州市","永登县","榆中县"]);
dsy.add("0_3_7",["东乡族自治县","广河县","和政县","积石山保安族东乡族撒拉族自治县","康乐县","临夏市","临夏县","永靖县"]);
dsy.add("0_3_8",["成县","徽县","康县","礼县","两当县","文县","武都县","西和县","宕昌县"]);
dsy.add("0_3_9",["崇信县","华亭县","静宁县","灵台县","平凉市","庄浪县","泾川县"]);
dsy.add("0_3_10",["合水县","华池县","环县","宁县","庆城县","庆阳市","镇原县","正宁县"]);
dsy.add("0_3_11",["甘谷县","秦安县","清水县","天水市","武山县","张家川回族自治县"]);
dsy.add("0_3_12",["古浪县","民勤县","天祝藏族自治县","武威市"]);
dsy.add("0_3_13",["高台县","临泽县","民乐县","山丹县","肃南裕固族自治县","张掖市"]);
dsy.add("0_4",["潮州","东莞","佛山","广州","河源","惠州","江门","揭阳","茂名","梅州","清远","汕头","汕尾","韶关","深圳","阳江","云浮","湛江","肇庆","中山","珠海"]);
dsy.add("0_4_0",["潮安县","潮州市","饶平县"]);
dsy.add("0_4_1",["东莞市"]);
dsy.add("0_4_2",["佛山市"]);
dsy.add("0_4_3",["从化市","广州市","增城市"]);
dsy.add("0_4_4",["东源县","和平县","河源市","连平县","龙川县","紫金县"]);
dsy.add("0_4_5",["博罗县","惠东县","惠阳市","惠州市","龙门县"]);
dsy.add("0_4_6",["恩平市","鹤山市","江门市","开平市","台山市"]);
dsy.add("0_4_7",["惠来县","揭东县","揭西县","揭阳市","普宁市"]);
dsy.add("0_4_8",["电白县","高州市","化州市","茂名市","信宜市"]);
dsy.add("0_4_9",["大埔县","丰顺县","蕉岭县","梅县","梅州市","平远县","五华县","兴宁市"]);
dsy.add("0_4_10",["佛冈县","连南瑶族自治县","连山壮族瑶族自治县","连州市","清新县","清远市","阳山县","英德市"]);
dsy.add("0_4_11",["潮阳市","澄海市","南澳县","汕头市"]);
dsy.add("0_4_12",["海丰县","陆丰市","陆河县","汕尾市"]);
dsy.add("0_4_13",["乐昌市","南雄市","曲江县","仁化县","乳源瑶族自治县","韶关市","始兴县","翁源县","新丰县"]);
dsy.add("0_4_14",["深圳市"]);
dsy.add("0_4_15",["阳春市","阳东县","阳江市","阳西县"]);
dsy.add("0_4_16",["罗定市","新兴县","郁南县","云安县","云浮市"]);
dsy.add("0_4_17",["雷州市","廉江市","遂溪县","吴川市","徐闻县","湛江市"]);
dsy.add("0_4_18",["德庆县","封开县","高要市","广宁县","怀集县","四会市","肇庆市"]);
dsy.add("0_4_19",["中山市"]);
dsy.add("0_4_20",["珠海市"]);
dsy.add("0_5",["百色","北海","崇左","防城港","桂林","贵港","河池","贺州","来宾","柳州","南宁","钦州","梧州","玉林"]);
dsy.add("0_5_0",["百色市","德保县","靖西县","乐业县","凌云县","隆林各族自治县","那坡县","平果县","田东县","田林县","田阳县","西林县"]);
dsy.add("0_5_1",["北海市","合浦县"]);
dsy.add("0_5_2",["崇左市","大新县","扶绥县","龙州县","宁明县","凭祥市","天等县"]);
dsy.add("0_5_3",["东兴市","防城港市","上思县"]);
dsy.add("0_5_4",["恭城瑶族自治县","灌阳县","桂林市","荔浦县","临桂县","灵川县","龙胜各族自治县","平乐县","全州县","兴安县","阳朔县","永福县","资源县"]);
dsy.add("0_5_5",["桂平市","贵港市","平南县"]);
dsy.add("0_5_6",["巴马瑶族自治县","大化瑶族自治县","东兰县","都安瑶族自治县","凤山县","河池市","环江毛南族自治县","罗城仡佬族自治县","南丹县","天峨县","宜州市"]);
dsy.add("0_5_7",["富川瑶族自治县","贺州市","昭平县","钟山县"]);
dsy.add("0_5_8",["合山市","金秀瑶族自治县","来宾市","武宣县","象州县","忻城县"]);
dsy.add("0_5_9",["柳城县","柳江县","柳州市","鹿寨县","融安县","融水苗族自治县","三江侗族自治县"]);
dsy.add("0_5_10",["宾阳县","横县","隆安县","马山县","南宁市","上林县","武鸣县","邕宁县"]);
dsy.add("0_5_11",["灵山县","浦北县","钦州市"]);
dsy.add("0_5_12",["苍梧县","蒙山县","藤县","梧州市","岑溪市"]);
dsy.add("0_5_13",["北流市","博白县","陆川县","容县","兴业县","玉林市"]);
dsy.add("0_6",["安顺","毕节","贵阳","六盘水","黔东南苗族侗族自治州","黔南布依族苗族自治州","黔西南布依族苗族自治州","铜仁","遵义"]);
dsy.add("0_6_0",["安顺市","关岭布依族苗族自治县","平坝县","普定县","镇宁布依族苗族自治县","紫云苗族布依族自治县"]);
dsy.add("0_6_1",["毕节市","大方县","赫章县","金沙县","纳雍县","黔西县","威宁彝族回族苗族自治县","织金县"]);
dsy.add("0_6_2",["贵阳市","开阳县","清镇市","息烽县","修文县"]);
dsy.add("0_6_3",["六盘水市","六枝特区","盘县","水城县"]);
dsy.add("0_6_4",["从江县","丹寨县","黄平县","剑河县","锦屏县","凯里市","雷山县","黎平县","麻江县","三穗县","施秉县","台江县","天柱县","镇远县","岑巩县","榕江县"]);
dsy.add("0_6_5",["长顺县","都匀市","独山县","福泉市","贵定县","惠水县","荔波县","龙里县","罗甸县","平塘县","三都水族自治县","瓮安县"]);
dsy.add("0_6_6",["安龙县","册亨县","普安县","晴隆县","望谟县","兴仁县","兴义市","贞丰县"]);
dsy.add("0_6_7",["德江县","江口县","石阡县","思南县","松桃苗族自治县","铜仁市","万山特区","沿河土家族自治县","印江土家族苗族自治县","玉屏侗族自治县"]);
dsy.add("0_6_8",["赤水市","道真仡佬族苗族自治县","凤冈县","仁怀市","绥阳县","桐梓县","务川仡佬族苗族自治县","习水县","余庆县","正安县","遵义市","遵义县","湄潭县"]);
dsy.add("0_7",["白沙黎族自治县","保亭黎族苗族自治县","昌江黎族自治县","澄迈县","定安县","东方","海口","乐东黎族自治县","临高县","陵水黎族自治县","琼海","琼中黎族苗族自治县","三亚","屯昌县","万宁","文昌","五指山","儋州"]);
dsy.add("0_7_0",["白沙黎族自治县"]);
dsy.add("0_7_1",["保亭黎族苗族自治县"]);
dsy.add("0_7_2",["昌江黎族自治县"]);
dsy.add("0_7_3",["澄迈县"]);
dsy.add("0_7_4",["定安县"]);
dsy.add("0_7_5",["东方市"]);
dsy.add("0_7_6",["海口市"]);
dsy.add("0_7_7",["乐东黎族自治县"]);
dsy.add("0_7_8",["临高县"]);
dsy.add("0_7_9",["陵水黎族自治县"]);
dsy.add("0_7_10",["琼海市"]);
dsy.add("0_7_11",["琼中黎族苗族自治县"]);
dsy.add("0_7_12",["三亚市"]);
dsy.add("0_7_13",["屯昌县"]);
dsy.add("0_7_14",["万宁市"]);
dsy.add("0_7_15",["文昌市"]);
dsy.add("0_7_16",["五指山市"]);
dsy.add("0_7_17",["儋州市"]);
dsy.add("0_8",["保定","沧州","承德","邯郸","衡水","廊坊","秦皇岛","石家庄","唐山","邢台","张家口"]);
dsy.add("0_8_0",["安国市","安新县","保定市","博野县","定兴县","定州市","阜平县","高碑店市","高阳县","满城县","清苑县","曲阳县","容城县","顺平县","唐县","望都县","雄县","徐水县","易县","涞水县","涞源县","涿州市","蠡县"]);
dsy.add("0_8_1",["泊头市","沧县","沧州市","东光县","海兴县","河间市","黄骅市","孟村回族自治县","南皮县","青县","任丘市","肃宁县","吴桥县","献县","盐山县"]);
dsy.add("0_8_2",["承德市","承德县","丰宁满族自治县","宽城满族自治县","隆化县","滦平县","平泉县","围场满族蒙古族自治县","兴隆县"]);
dsy.add("0_8_3",["成安县","磁县","大名县","肥乡县","馆陶县","广平县","邯郸市","邯郸县","鸡泽县","临漳县","邱县","曲周县","涉县","魏县","武安市","永年县"]);
dsy.add("0_8_4",["安平县","阜城县","故城县","衡水市","冀州市","景县","饶阳县","深州市","武强县","武邑县","枣强县"]);
dsy.add("0_8_5",["霸州市","大厂回族自治县","大城县","固安县","廊坊市","三河市","文安县","香河县","永清县"]);
dsy.add("0_8_6",["昌黎县","抚宁县","卢龙县","秦皇岛市","青龙满族自治县"]);
dsy.add("0_8_7",["高邑县","晋州市","井陉县","灵寿县","鹿泉市","平山县","深泽县","石家庄市","无极县","辛集市","新乐市","行唐县","元氏县","赞皇县","赵县","正定县","藁城市","栾城县"]);
dsy.add("0_8_8",["乐亭县","滦南县","滦县","迁安市","迁西县","唐海县","唐山市","玉田县","遵化市"]);
dsy.add("0_8_9",["柏乡县","广宗县","巨鹿县","临城县","临西县","隆尧县","南宫市","南和县","内丘县","宁晋县","平乡县","清河县","任县","沙河市","威县","新河县","邢台市","邢台县"]);
dsy.add("0_8_10",["赤城县","崇礼县","沽源县","怀安县","怀来县","康保县","尚义县","万全县","蔚县","宣化县","阳原县","张北县","张家口市","涿鹿县"]);
dsy.add("0_9",["安阳","鹤壁","济源","焦作","开封","洛阳","南阳","平顶山","三门峡","商丘","新乡","信阳","许昌","郑州","周口","驻马店","漯河","濮阳"]);
dsy.add("0_9_0",["安阳市","安阳县","滑县","林州市","内黄县","汤阴县"]);
dsy.add("0_9_1",["","鹤壁市","浚县","淇县"]);
dsy.add("0_9_2",["济源市"]);
dsy.add("0_9_3",["博爱县","焦作市","孟州市","沁阳市","温县","武陟县","修武县"]);
dsy.add("0_9_4",["开封市","开封县","兰考县","通许县","尉氏县","杞县"]);
dsy.add("0_9_5",["洛宁县","洛阳市","孟津县","汝阳县","新安县","伊川县","宜阳县","偃师市","嵩县","栾川县"]);
dsy.add("0_9_6",["邓州市","方城县","南阳市","南召县","内乡县","社旗县","唐河县","桐柏县","西峡县","新野县","镇平县","淅川县"]);
dsy.add("0_9_7",["宝丰县","鲁山县","平顶山市","汝州市","舞钢市","叶县","郏县"]);
dsy.add("0_9_8",["灵宝市","卢氏县","三门峡市","陕县","义马市","渑池县"]);
dsy.add("0_9_9",["民权县","宁陵县","商丘市","夏邑县","永城市","虞城县","柘城县","睢县"]);
dsy.add("0_9_10",["长垣县","封丘县","辉县市","获嘉县","卫辉市","新乡市","新乡县","延津县","原阳县"]);
dsy.add("0_9_11",["固始县","光山县","淮滨县","罗山县","商城县","息县","新县","信阳市","潢川县"]);
dsy.add("0_9_12",["长葛市","襄城县","许昌市","许昌县","禹州市","鄢陵县"]);
dsy.add("0_9_13",["登封市","巩义市","新密市","新郑市","郑州市","中牟县","荥阳市"]);
dsy.add("0_9_14",["郸城县","扶沟县","淮阳县","鹿邑县","商水县","沈丘县","太康县","西华县","项城市","周口市"]);
dsy.add("0_9_15",["泌阳县","平舆县","确山县","汝南县","上蔡县","遂平县","西平县","新蔡县","正阳县","驻马店市"]);
dsy.add("0_9_16",["临颍县","舞阳县","郾城县","漯河市"]);
dsy.add("0_9_17",["范县","南乐县","清丰县","台前县","濮阳市","濮阳县"]);
dsy.add("0_10",["大庆","大兴安岭","哈尔滨","鹤岗","黑河","鸡西","佳木斯","牡丹江","七台河","齐齐哈尔","双鸭山","绥化","伊春"]);
dsy.add("0_10_0",["大庆市","杜尔伯特蒙古族自治县","林甸县","肇源县","肇州县"]);
dsy.add("0_10_1",["呼玛县","漠河县","塔河县"]);
dsy.add("0_10_2",["阿城市","巴彦县","宾县","方正县","哈尔滨市","呼兰县","木兰县","尚志市","双城市","通河县","五常市","延寿县","依兰县"]);
dsy.add("0_10_3",["鹤岗市","萝北县","绥滨县"]);
dsy.add("0_10_4",["北安市","黑河市","嫩江县","孙吴县","五大连池市","逊克县"]);
dsy.add("0_10_5",["虎林市","鸡东县","鸡西市","密山市"]);
dsy.add("0_10_6",["抚远县","富锦市","佳木斯市","汤原县","同江市","桦川县","桦南县"]);
dsy.add("0_10_7",["东宁县","海林市","林口县","牡丹江市","穆棱市","宁安市","绥芬河市"]);
dsy.add("0_10_8",["勃利县","七台河市"]);
dsy.add("0_10_9",["拜泉县","富裕县","甘南县","克东县","克山县","龙江县","齐齐哈尔市","泰来县","依安县","讷河市"]);
dsy.add("0_10_10",["宝清县","集贤县","饶河县","双鸭山市","友谊县"]);
dsy.add("0_10_11",["安达市","海伦市","兰西县","明水县","青冈县","庆安县","绥化市","绥棱县","望奎县","肇东市"]);
dsy.add("0_10_12",["嘉荫县","铁力市","伊春市"]);
dsy.add("0_11",["鄂州","恩施土家族苗族自治州","黄冈","黄石","荆门","荆州","潜江","神农架林区","十堰","随州","天门","武汉","仙桃","咸宁","襄樊","孝感","宜昌"]);
dsy.add("0_11_0",["鄂州市"]);
dsy.add("0_11_1",["巴东县","恩施市","鹤峰县","建始县","来凤县","利川市","咸丰县","宣恩县"]);
dsy.add("0_11_2",["红安县","黄冈市","黄梅县","罗田县","麻城市","团风县","武穴市","英山县","蕲春县","浠水县"]);
dsy.add("0_11_3",["大冶市","黄石市","阳新县"]);
dsy.add("0_11_4",["荆门市","京山县","沙洋县","钟祥市"]);
dsy.add("0_11_5",["公安县","洪湖市","监利县","江陵县","荆州市","石首市","松滋市"]);
dsy.add("0_11_6",["潜江市"]);
dsy.add("0_11_7",["神农架林区"]);
dsy.add("0_11_8",["丹江口市","房县","十堰市","郧西县","郧县","竹山县","竹溪县"]);
dsy.add("0_11_9",["广水市","随州市"]);
dsy.add("0_11_10",["天门市"]);
dsy.add("0_11_11",["武汉市"]);
dsy.add("0_11_12",["仙桃市"]);
dsy.add("0_11_13",["赤壁市","崇阳县","嘉鱼县","通城县","通山县","咸宁市"]);
dsy.add("0_11_14",["保康县","谷城县","老河口市","南漳县","襄樊市","宜城市","枣阳市"]);
dsy.add("0_11_15",["安陆市","大悟县","汉川市","孝昌县","孝感市","应城市","云梦县"]);
dsy.add("0_11_16",["长阳土家族自治县","当阳市","五峰土家族自治县","兴山县","宜昌市","宜都市","远安县","枝江市","秭归县"]);
dsy.add("0_12",["常德","长沙","郴州","衡阳","怀化","娄底","邵阳","湘潭","湘西土家族苗族自治州","益阳","永州","岳阳","张家界","株洲"]);
dsy.add("0_12_0",["安乡县","常德市","汉寿县","津市市","临澧县","石门县","桃源县","澧县"]);
dsy.add("0_12_1",["长沙市","长沙县","宁乡县","望城县","浏阳市"]);
dsy.add("0_12_2",["安仁县","郴州市","桂东县","桂阳县","嘉禾县","临武县","汝城县","宜章县","永兴县","资兴市"]);
dsy.add("0_12_3",["常宁市","衡东县","衡南县","衡山县","衡阳市","衡阳县","祁东县","耒阳市"]);
dsy.add("0_12_4",["辰溪县","洪江市","怀化市","会同县","靖州苗族侗族自治县","麻阳苗族自治县","通道侗族自治县","新晃侗族自治县","中方县","芷江侗族自治县","沅陵县","溆浦县"]);
dsy.add("0_12_5",["冷水江市","涟源市","娄底市","双峰县","新化县"]);
dsy.add("0_12_6",["城步苗族自治县","洞口县","隆回县","邵东县","邵阳市","邵阳县","绥宁县","武冈市","新宁县","新邵县"]);
dsy.add("0_12_7",["韶山市","湘潭市","湘潭县","湘乡市"]);
dsy.add("0_12_8",["保靖县","凤凰县","古丈县","花垣县","吉首市","龙山县","永顺县","泸溪县"]);
dsy.add("0_12_9",["安化县","南县","桃江县","益阳市","沅江市"]);
dsy.add("0_12_10",["道县","东安县","江华瑶族自治县","江永县","蓝山县","宁远县","祁阳县","双牌县","新田县","永州市"]);
dsy.add("0_12_11",["华容县","临湘市","平江县","湘阴县","岳阳市","岳阳县","汨罗市"]);
dsy.add("0_12_12",["慈利县","桑植县","张家界市"]);
dsy.add("0_12_13",["茶陵县","炎陵县","株洲市","株洲县","攸县","醴陵市"]);
dsy.add("0_13",["白城","白山","长春","吉林","辽源","四平","松原","通化","延边朝鲜族自治州"]);
dsy.add("0_13_0",["白城市","大安市","通榆县","镇赉县","洮南市"]);
dsy.add("0_13_1",["白山市","长白朝鲜族自治县","抚松县","江源县","靖宇县","临江市"]);
dsy.add("0_13_2",["长春市","德惠市","九台市","农安县","榆树市"]);
dsy.add("0_13_3",["吉林市","磐石市","舒兰市","永吉县","桦甸市","蛟河市"]);
dsy.add("0_13_4",["东丰县","东辽县","辽源市"]);
dsy.add("0_13_5",["公主岭市","梨树县","双辽市","四平市","伊通满族自治县"]);
dsy.add("0_13_6",["长岭县","扶余县","乾安县","前郭尔罗斯蒙古族自治县","松原市"]);
dsy.add("0_13_7",["辉南县","集安市","柳河县","梅河口市","通化市","通化县"]);
dsy.add("0_13_8",["安图县","敦化市","和龙市","龙井市","图们市","汪清县","延吉市","珲春市"]);
dsy.add("0_14",["常州","淮安","连云港","南京","南通","苏州","宿迁","泰州","无锡","徐州","盐城","扬州","镇江"]);
dsy.add("0_14_0",["常州市","金坛市","溧阳市"]);
dsy.add("0_14_1",["洪泽县","淮安市","金湖县","涟水县","盱眙县"]);
dsy.add("0_14_2",["东海县","赣榆县","灌南县","灌云县","连云港市"]);
dsy.add("0_14_3",["高淳县","南京市","溧水县"]);
dsy.add("0_14_4",["海安县","海门市","南通市","启东市","如东县","如皋市","通州市"]);
dsy.add("0_14_5",["常熟市","昆山市","苏州市","太仓市","吴江市","张家港市"]);
dsy.add("0_14_6",["宿迁市","宿豫县","沭阳县","泗洪县","泗阳县"]);
dsy.add("0_14_7",["姜堰市","靖江市","泰兴市","泰州市","兴化市"]);
dsy.add("0_14_8",["江阴市","无锡市","宜兴市"]);
dsy.add("0_14_9",["丰县","沛县","铜山县","新沂市","徐州市","邳州市","睢宁县"]);
dsy.add("0_14_10",["滨海县","大丰市","东台市","阜宁县","建湖县","射阳县","响水县","盐城市","盐都县"]);
dsy.add("0_14_11",["宝应县","高邮市","江都市","扬州市","仪征市"]);
dsy.add("0_14_12",["丹阳市","句容市","扬中市","镇江市"]);
dsy.add("0_15",["抚州","赣州","吉安","景德镇","九江","南昌","萍乡","上饶","新余","宜春","鹰潭"]);
dsy.add("0_15_0",["崇仁县","东乡县","抚州市","广昌县","金溪县","乐安县","黎川县","南城县","南丰县","宜黄县","资溪县"]);
dsy.add("0_15_1",["安远县","崇义县","大余县","定南县","赣县","赣州市","会昌县","龙南县","南康市","宁都县","全南县","瑞金市","上犹县","石城县","信丰县","兴国县","寻乌县","于都县"]);
dsy.add("0_15_2",["安福县","吉安市","吉安县","吉水县","井冈山市","遂川县","泰和县","万安县","峡江县","新干县","永丰县","永新县"]);
dsy.add("0_15_3",["浮梁县","景德镇市","乐平市"]);
dsy.add("0_15_4",["德安县","都昌县","湖口县","九江市","九江县","彭泽县","瑞昌市","武宁县","星子县","修水县","永修县"]);
dsy.add("0_15_5",["安义县","进贤县","南昌市","南昌县","新建县"]);
dsy.add("0_15_6",["莲花县","芦溪县","萍乡市","上栗县"]);
dsy.add("0_15_7",["波阳县","德兴市","广丰县","横峰县","铅山县","上饶市","上饶县","万年县","余干县","玉山县","弋阳县","婺源县"]);
dsy.add("0_15_8",["分宜县","新余市"]);
dsy.add("0_15_9",["丰城市","奉新县","高安市","靖安县","上高县","铜鼓县","万载县","宜春市","宜丰县","樟树市"]);
dsy.add("0_15_10",["贵溪市","鹰潭市","余江县"]);
dsy.add("0_16",["鞍山","本溪","朝阳","大连","丹东","抚顺","阜新","葫芦岛","锦州","辽阳","盘锦","沈阳","铁岭","营口"]);
dsy.add("0_16_0",["鞍山市","海城市","台安县","岫岩满族自治县"]);
dsy.add("0_16_1",["本溪满族自治县","本溪市","桓仁满族自治县"]);
dsy.add("0_16_2",["北票市","朝阳市","朝阳县","建平县","喀喇沁左翼蒙古族自治县","凌源市"]);
dsy.add("0_16_3",["长海县","大连市","普兰店市","瓦房店市","庄河市"]);
dsy.add("0_16_4",["丹东市","东港市","凤城市","宽甸满族自治县"]);
dsy.add("0_16_5",["抚顺市","抚顺县","清原满族自治县","新宾满族自治县"]);
dsy.add("0_16_6",["阜新蒙古族自治县","阜新市","彰武县"]);
dsy.add("0_16_7",["葫芦岛市","建昌县","绥中县","兴城市"]);
dsy.add("0_16_8",["北宁市","黑山县","锦州市","凌海市","义县"]);
dsy.add("0_16_9",["灯塔市","辽阳市","辽阳县"]);
dsy.add("0_16_10",["大洼县","盘锦市","盘山县"]);
dsy.add("0_16_11",["法库县","康平县","辽中县","沈阳市","新民市"]);
dsy.add("0_16_12",["昌图县","调兵山市","开原市","铁岭市","铁岭县","西丰县"]);
dsy.add("0_16_13",["大石桥市","盖州市","营口市"]);
dsy.add("0_17",["阿拉善盟","巴彦淖尔盟","包头","赤峰","鄂尔多斯","呼和浩特","呼伦贝尔","通辽","乌海","乌兰察布盟","锡林郭勒盟","兴安盟"]);
dsy.add("0_17_0",["阿拉善右旗","阿拉善左旗","额济纳旗"]);
dsy.add("0_17_1",["杭锦后旗","临河市","乌拉特后旗","乌拉特前旗","乌拉特中旗","五原县","磴口县"]);
dsy.add("0_17_2",["包头市","达尔罕茂明安联合旗","固阳县","土默特右旗"]);
dsy.add("0_17_3",["阿鲁科尔沁旗","敖汉旗","巴林右旗","巴林左旗","赤峰市","喀喇沁旗","克什克腾旗","林西县","宁城县","翁牛特旗"]);
dsy.add("0_17_4",["达拉特旗","鄂尔多斯市","鄂托克旗","鄂托克前旗","杭锦旗","乌审旗","伊金霍洛旗","准格尔旗"]);
dsy.add("0_17_5",["和林格尔县","呼和浩特市","清水河县","土默特左旗","托克托县","武川县"]);
dsy.add("0_17_6",["阿荣旗","陈巴尔虎旗","额尔古纳市","鄂伦春自治旗","鄂温克族自治旗","根河市","呼伦贝尔市","满洲里市","莫力达瓦达斡尔族自治旗","新巴尔虎右旗","新巴尔虎左旗","牙克石市","扎兰屯市"]);
dsy.add("0_17_7",["霍林郭勒市","开鲁县","科尔沁左翼后旗","科尔沁左翼中旗","库伦旗","奈曼旗","通辽市","扎鲁特旗"]);
dsy.add("0_17_8",["乌海市"]);
dsy.add("0_17_9",["察哈尔右翼后旗","察哈尔右翼前旗","察哈尔右翼中旗","丰镇市","化德县","集宁市","凉城县","商都县","四子王旗","兴和县","卓资县"]);
dsy.add("0_17_10",["阿巴嘎旗","东乌珠穆沁旗","多伦县","二连浩特市","苏尼特右旗","苏尼特左旗","太仆寺旗","西乌珠穆沁旗","锡林浩特市","镶黄旗","正蓝旗","正镶白旗"]);
dsy.add("0_17_11",["阿尔山市","科尔沁右翼前旗","科尔沁右翼中旗","突泉县","乌兰浩特市","扎赉特旗"]);
dsy.add("0_18",["固原","石嘴山","吴忠","银川"]);
dsy.add("0_18_0",["固原市","海原县","隆德县","彭阳县","西吉县","泾源县"]);
dsy.add("0_18_1",["惠农县","平罗县","石嘴山市","陶乐县"]);
dsy.add("0_18_2",["青铜峡市","同心县","吴忠市","盐池县","中宁县","中卫县"]);
dsy.add("0_18_3",["贺兰县","灵武市","银川市","永宁县"]);
dsy.add("0_19",["果洛藏族自治州","海北藏族自治州","海东","海南藏族自治州","海西蒙古族藏族自治州","黄南藏族自治州","西宁","玉树藏族自治州"]);
dsy.add("0_19_0",["班玛县","达日县","甘德县","久治县","玛多县","玛沁县"]);
dsy.add("0_19_1",["刚察县","海晏县","门源回族自治县","祁连县"]);
dsy.add("0_19_2",["互助土族自治县","化隆回族自治县","乐都县","民和回族土族自治县","平安县","循化撒拉族自治县"]);
dsy.add("0_19_3",["共和县","贵德县","贵南县","同德县","兴海县"]);
dsy.add("0_19_4",["德令哈市","都兰县","格尔木市","天峻县","乌兰县"]);
dsy.add("0_19_5",["河南蒙古族自治县","尖扎县","同仁县","泽库县"]);
dsy.add("0_19_6",["大通回族土族自治县","西宁市","湟源县","湟中县"]);
dsy.add("0_19_7",["称多县","囊谦县","曲麻莱县","玉树县","杂多县","治多县"]);
dsy.add("0_20",["滨州","德州","东营","菏泽","济南","济宁","莱芜","聊城","临沂","青岛","日照","泰安","威海","潍坊","烟台","枣庄","淄博"]);
dsy.add("0_20_0",["滨州市","博兴县","惠民县","无棣县","阳信县","沾化县","邹平县"]);
dsy.add("0_20_1",["德州市","乐陵市","临邑县","陵县","宁津县","平原县","齐河县","庆云县","武城县","夏津县","禹城市"]);
dsy.add("0_20_2",["东营市","广饶县","垦利县","利津县"]);
dsy.add("0_20_3",["曹县","成武县","单县","定陶县","东明县","菏泽市","巨野县","郓城县","鄄城县"]);
dsy.add("0_20_4",["济南市","济阳县","平阴县","商河县","章丘市"]);
dsy.add("0_20_5",["济宁市","嘉祥县","金乡县","梁山县","曲阜市","微山县","鱼台县","邹城市","兖州市","汶上县","泗水县"]);
dsy.add("0_20_6",["莱芜市"]);
dsy.add("0_20_7",["东阿县","高唐县","冠县","聊城市","临清市","阳谷县","茌平县","莘县"]);
dsy.add("0_20_8",["苍山县","费县","临沂市","临沭县","蒙阴县","平邑县","沂南县","沂水县","郯城县","莒南县"]);
dsy.add("0_20_9",["即墨市","胶南市","胶州市","莱西市","平度市","青岛市"]);
dsy.add("0_20_10",["日照市","五莲县","莒县"]);
dsy.add("0_20_11",["东平县","肥城市","宁阳县","泰安市","新泰市"]);
dsy.add("0_20_12",["荣成市","乳山市","威海市","文登市"]);
dsy.add("0_20_13",["安丘市","昌乐县","昌邑市","高密市","临朐县","青州市","寿光市","潍坊市","诸城市"]);
dsy.add("0_20_14",["长岛县","海阳市","莱阳市","莱州市","龙口市","蓬莱市","栖霞市","烟台市","招远市"]);
dsy.add("0_20_15",["枣庄市","滕州市"]);
dsy.add("0_20_16",["高青县","桓台县","沂源县","淄博市"]);
dsy.add("0_21",["长治","大同","晋城","晋中","临汾","吕梁","朔州","太原","忻州","阳泉","运城"]);
dsy.add("0_21_0",["长治市","长治县","长子县","壶关县","黎城县","潞城市","平顺县","沁县","沁源县","屯留县","武乡县","襄垣县"]);
dsy.add("0_21_1",["大同市","大同县","广灵县","浑源县","灵丘县","天镇县","阳高县","左云县"]);
dsy.add("0_21_2",["高平市","晋城市","陵川县","沁水县","阳城县","泽州县"]);
dsy.add("0_21_3",["和顺县","介休市","晋中市","灵石县","平遥县","祁县","寿阳县","太谷县","昔阳县","榆社县","左权县"]);
dsy.add("0_21_4",["安泽县","大宁县","汾西县","浮山县","古县","洪洞县","侯马市","霍州市","吉县","临汾市","蒲县","曲沃县","襄汾县","乡宁县","翼城县","永和县","隰县"]);
dsy.add("0_21_5",["方山县","汾阳市","交城县","交口县","离石市","临县","柳林县","石楼县","文水县","孝义市","兴县","中阳县","岚县"]);
dsy.add("0_21_6",["怀仁县","山阴县","朔州市","应县","右玉县"]);
dsy.add("0_21_7",["古交市","娄烦县","清徐县","太原市","阳曲县"]);
dsy.add("0_21_8",["保德县","代县","定襄县","繁峙县","河曲县","静乐县","宁武县","偏关县","神池县","五台县","五寨县","忻州市","原平市","岢岚县"]);
dsy.add("0_21_9",["平定县","阳泉市","盂县"]);
dsy.add("0_21_10",["河津市","临猗县","平陆县","万荣县","闻喜县","夏县","新绛县","永济市","垣曲县","运城市","芮城县","绛县","稷山县"]);
dsy.add("0_22",["安康","宝鸡","汉中","商洛","铜川","渭南","西安","咸阳","延安","榆林"]);
dsy.add("0_22_0",["安康市","白河县","汉阴县","宁陕县","平利县","石泉县","旬阳县","镇坪县","紫阳县","岚皋县"]);
dsy.add("0_22_1",["宝鸡市","宝鸡县","凤县","凤翔县","扶风县","陇县","眉县","千阳县","太白县","岐山县","麟游县"]);
dsy.add("0_22_2",["城固县","佛坪县","汉中市","留坝县","略阳县","勉县","南郑县","宁强县","西乡县","洋县","镇巴县"]);
dsy.add("0_22_3",["丹凤县","洛南县","山阳县","商洛市","商南县","镇安县","柞水县"]);
dsy.add("0_22_4",["铜川市","宜君县"]);
dsy.add("0_22_5",["白水县","澄城县","大荔县","富平县","韩城市","合阳县","华县","华阴市","蒲城县","渭南市","潼关县"]);
dsy.add("0_22_6",["高陵县","户县","蓝田县","西安市","周至县"]);
dsy.add("0_22_7",["彬县","长武县","淳化县","礼泉县","乾县","三原县","武功县","咸阳市","兴平市","旬邑县","永寿县","泾阳县"]);
dsy.add("0_22_8",["安塞县","富县","甘泉县","黄陵县","黄龙县","洛川县","吴旗县","延安市","延长县","延川县","宜川县","志丹县","子长县"]);
dsy.add("0_22_9",["定边县","府谷县","横山县","佳县","靖边县","米脂县","清涧县","神木县","绥德县","吴堡县","榆林市","子洲县"]);
dsy.add("0_23",["上海"]);
dsy.add("0_23_0",["上海市","黄浦","卢湾","徐汇","长宁","静安","普陀","闸北","虹口","杨浦","闵行","宝山","嘉定","浦东","金山","松江","青浦","南汇","奉贤","崇明"]);
dsy.add("0_24",["阿坝藏族羌族自治州","巴中","成都","达州","德阳","甘孜藏族自治州","广安","广元","乐山","凉山彝族自治州","眉山","绵阳","南充","内江","攀枝花","遂宁","雅安","宜宾","资阳","自贡","泸州"]);
dsy.add("0_24_0",["阿坝县","黑水县","红原县","金川县","九寨沟县","理县","马尔康县","茂县","壤塘县","若尔盖县","松潘县","小金县","汶川县"]);
dsy.add("0_24_1",["巴中市","南江县","平昌县","通江县"]);
dsy.add("0_24_2",["成都市","崇州市","大邑县","都江堰市","金堂县","彭州市","蒲江县","双流县","新津县","邛崃市","郫县"]);
dsy.add("0_24_3",["达县","达州市","大竹县","开江县","渠县","万源市","宣汉县"]);
dsy.add("0_24_4",["德阳市","广汉市","罗江县","绵竹市","什邡市","中江县"]);
dsy.add("0_24_5",["巴塘县","白玉县","丹巴县","稻城县","道孚县","德格县","得荣县","甘孜县","九龙县","康定县","理塘县","炉霍县","色达县","石渠县","乡城县","新龙县","雅江县","泸定县"]);
dsy.add("0_24_6",["广安市","华蓥市","邻水县","武胜县","岳池县"]);
dsy.add("0_24_7",["苍溪县","广元市","剑阁县","青川县","旺苍县"]);
dsy.add("0_24_8",["峨边彝族自治县","峨眉山市","夹江县","井研县","乐山市","马边彝族自治县","沐川县","犍为县"]);
dsy.add("0_24_9",["布拖县","德昌县","甘洛县","会东县","会理县","金阳县","雷波县","美姑县","冕宁县","木里藏族自治县","宁南县","普格县","西昌市","喜德县","盐源县","越西县","昭觉县"]);
dsy.add("0_24_10",["丹棱县","洪雅县","眉山市","彭山县","青神县","仁寿县"]);
dsy.add("0_24_11",["安县","北川县","江油市","绵阳市","平武县","三台县","盐亭县","梓潼县"]);
dsy.add("0_24_12",["南部县","南充市","蓬安县","西充县","仪陇县","营山县","阆中市"]);
dsy.add("0_24_13",["隆昌县","内江市","威远县","资中县"]);
dsy.add("0_24_14",["米易县","攀枝花市","盐边县"]);
dsy.add("0_24_15",["大英县","蓬溪县","射洪县","遂宁市"]);
dsy.add("0_24_16",["宝兴县","汉源县","芦山县","名山县","石棉县","天全县","雅安市","荥经县"]);
dsy.add("0_24_17",["长宁县","高县","江安县","南溪县","屏山县","兴文县","宜宾市","宜宾县","珙县","筠连县"]);
dsy.add("0_24_18",["安岳县","简阳市","乐至县","资阳市"]);
dsy.add("0_24_19",["富顺县","荣县","自贡市"]);
dsy.add("0_24_20",["古蔺县","合江县","叙永县","泸县","泸州市"]);
dsy.add("0_25",["天津"]);
dsy.add("0_25_0",["天津市","和平","东丽","河东","西青","河西","津南","南开","北辰","河北","武清","红挢","塘沽","汉沽","大港","宁河","静海","宝坻","蓟县"]);
dsy.add("0_26",["阿里","昌都","拉萨","林芝","那曲","日喀则","山南"]);
dsy.add("0_26_0",["措勤县","噶尔县","改则县","革吉县","普兰县","日土县","札达县"]);
dsy.add("0_26_1",["八宿县","边坝县","察雅县","昌都县","丁青县","贡觉县","江达县","类乌齐县","洛隆县","芒康县","左贡县"]);
dsy.add("0_26_2",["达孜县","当雄县","堆龙德庆县","拉萨市","林周县","墨竹工卡县","尼木县","曲水县"]);
dsy.add("0_26_3",["波密县","察隅县","工布江达县","朗县","林芝县","米林县","墨脱县"]);
dsy.add("0_26_4",["安多县","巴青县","班戈县","比如县","嘉黎县","那曲县","尼玛县","聂荣县","申扎县","索县"]);
dsy.add("0_26_5",["昂仁县","白朗县","定结县","定日县","岗巴县","吉隆县","江孜县","康马县","拉孜县","南木林县","聂拉木县","仁布县","日喀则市","萨嘎县","萨迦县","谢通门县","亚东县","仲巴县"]);
dsy.add("0_26_6",["措美县","错那县","贡嘎县","加查县","浪卡子县","隆子县","洛扎县","乃东县","琼结县","曲松县","桑日县","扎囊县"]);
dsy.add("0_27",["阿克苏","阿拉尔","巴音郭楞蒙古自治州","博尔塔拉蒙古自治州","昌吉回族自治州","哈密","和田","喀什","克拉玛依","克孜勒苏柯尔克孜自治州","石河子","图木舒克","吐鲁番","乌鲁木齐","五家渠","伊犁哈萨克自治州"]);
dsy.add("0_27_0",["阿克苏市","阿瓦提县","拜城县","柯坪县","库车县","沙雅县","温宿县","乌什县","新和县"]);
dsy.add("0_27_1",["阿拉尔市"]);
dsy.add("0_27_2",["博湖县","和静县","和硕县","库尔勒市","轮台县","且末县","若羌县","尉犁县","焉耆回族自治县"]);
dsy.add("0_27_3",["博乐市","精河县","温泉县"]);
dsy.add("0_27_4",["昌吉市","阜康市","呼图壁县","吉木萨尔县","玛纳斯县","米泉市","木垒哈萨克自治县","奇台县"]);
dsy.add("0_27_5",["巴里坤哈萨克自治县","哈密市","伊吾县"]);
dsy.add("0_27_6",["策勒县","和田市","和田县","洛浦县","民丰县","墨玉县","皮山县","于田县"]);
dsy.add("0_27_7",["巴楚县","喀什市","麦盖提县","莎车县","疏附县","疏勒县","塔什库尔干塔吉克自治县","叶城县","英吉沙县","岳普湖县","泽普县","伽师县"]);
dsy.add("0_27_8",["克拉玛依市"]);
dsy.add("0_27_9",["阿合奇县","阿克陶县","阿图什市","乌恰县"]);
dsy.add("0_27_10",["石河子市"]);
dsy.add("0_27_11",["图木舒克市"]);
dsy.add("0_27_12",["吐鲁番市","托克逊县","鄯善县"]);
dsy.add("0_27_13",["乌鲁木齐市","乌鲁木齐县"]);
dsy.add("0_27_14",["五家渠市"]);
dsy.add("0_27_15",["阿勒泰市","布尔津县","察布查尔锡伯自治县","额敏县","福海县","富蕴县","巩留县","哈巴河县","和布克赛尔蒙古自治县","霍城县","吉木乃县","奎屯市","尼勒克县","青河县","沙湾县","塔城市","特克斯县","托里县","乌苏市","新源县","伊宁市","伊宁县","裕民县","昭苏县"]);
dsy.add("0_28",["保山","楚雄彝族自治州","大理白族自治州","德宏傣族景颇族自治州","迪庆藏族自治州","红河哈尼族彝族自治州","昆明","丽江","临沧","怒江傈傈族自治州","曲靖","思茅","文山壮族苗族自治州","西双版纳傣族自治州","玉溪","昭通"]);
dsy.add("0_28_0",["保山市","昌宁县","龙陵县","施甸县","腾冲县"]);
dsy.add("0_28_1",["楚雄市","大姚县","禄丰县","牟定县","南华县","双柏县","武定县","姚安县","永仁县","元谋县"]);
dsy.add("0_28_2",["宾川县","大理市","洱源县","鹤庆县","剑川县","弥渡县","南涧彝族自治县","巍山彝族回族自治县","祥云县","漾濞彝族自治县","永平县","云龙县"]);
dsy.add("0_28_3",["梁河县","陇川县","潞西市","瑞丽市","盈江县"]);
dsy.add("0_28_4",["德钦县","维西傈僳族自治县","香格里拉县"]);
dsy.add("0_28_5",["个旧市","河口瑶族自治县","红河县","建水县","金平苗族瑶族傣族自治县","开远市","绿春县","蒙自县","弥勒县","屏边苗族自治县","石屏县","元阳县","泸西县"]);
dsy.add("0_28_6",["安宁市","呈贡县","富民县","晋宁县","昆明市","禄劝彝族苗族自治县","石林彝族自治县","寻甸回族自治县","宜良县","嵩明县"]);
dsy.add("0_28_7",["华坪县","丽江市","宁蒗彝族自治县","永胜县","玉龙纳西族自治县"]);
dsy.add("0_28_8",["沧源佤族自治县","凤庆县","耿马傣族佤族治县","临沧县","双江拉祜族佤族布朗族傣族自治县","永德县","云县","镇康县"]);
dsy.add("0_28_9",["福贡县","贡山独龙族怒族自治县","兰坪白族普米族自治县","泸水县"]);
dsy.add("0_28_10",["富源县","会泽县","陆良县","罗平县","马龙县","曲靖市","师宗县","宣威市","沾益县"]);
dsy.add("0_28_11",["江城哈尼族彝族自治县","景东彝族自治县","景谷彝族傣族自治县","澜沧拉祜族自治县","孟连傣族拉祜族佤族自治县","墨江哈尼族自治县","普洱哈尼族彝族自治县","思茅市","西盟佤族自治县","镇沅彝族哈尼族拉祜族自治县"]);
dsy.add("0_28_12",["富宁县","广南县","麻栗坡县","马关县","丘北县","文山县","西畴县","砚山县"]);
dsy.add("0_28_13",["景洪市","勐海县","勐腊县"]);
dsy.add("0_28_14",["澄江县","峨山彝族自治县","华宁县","江川县","通海县","新平彝族傣族自治县","易门县","玉溪市","元江哈尼族彝族傣族自治县"]);
dsy.add("0_28_15",["大关县","鲁甸县","巧家县","水富县","绥江县","威信县","盐津县","彝良县","永善县","昭通市","镇雄县"]);
dsy.add("0_29",["杭州","湖州","嘉兴","金华","丽水","宁波","绍兴","台州","温州","舟山","衢州"]);
dsy.add("0_29_0",["淳安县","富阳市","杭州市","建德市","临安市","桐庐县"]);
dsy.add("0_29_1",["安吉县","长兴县","德清县","湖州市"]);
dsy.add("0_29_2",["海宁市","海盐县","嘉善县","嘉兴市","平湖市","桐乡市"]);
dsy.add("0_29_3",["东阳市","金华市","兰溪市","磐安县","浦江县","武义县","义乌市","永康市"]);
dsy.add("0_29_4",["景宁畲族自治县","丽水市","龙泉市","青田县","庆元县","松阳县","遂昌县","云和县","缙云县"]);
dsy.add("0_29_5",["慈溪市","奉化市","宁波市","宁海县","象山县","余姚市"]);
dsy.add("0_29_6",["上虞市","绍兴市","绍兴县","新昌县","诸暨市","嵊州市"]);
dsy.add("0_29_7",["临海市","三门县","台州市","天台县","温岭市","仙居县","玉环县"]);
dsy.add("0_29_8",["苍南县","洞头县","乐清市","平阳县","瑞安市","泰顺县","温州市","文成县","永嘉县"]);
dsy.add("0_29_9",["舟山市","岱山县","嵊泗县"]);
dsy.add("0_29_10",["常山县","江山市","开化县","龙游县","衢州市"]);
dsy.add("0_30",["重庆"]);
dsy.add("0_30_0",["城口县","大足县","垫江县","丰都县","奉节县","合川市","江津市","开县","梁平县","南川市","彭水苗族土家族自治县","荣昌县","石柱土家族自治县","铜梁县","巫山县","巫溪县","武隆县","秀山土家族苗族自治县","永川市","酉阳土家族苗族自治县","云阳县","忠县","重庆市","潼南县","璧山县","綦江县"]);
//-->
</SCRIPT>
<SCRIPT LANGUAGE = JavaScript>
<!--
//** Power by Fason(2004-3-11)
//** Email:fason_pfx@hotmail.com
var s=["s1","s2","s3"];
var opt0 = ["省份","地级市","市、县级市、县"];
function setup()
{
for(i=0;i<s.length-1;i++)
document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")");
change(0);
}
//-->
</SCRIPT>
</head>
<body bgcolor="#E0E0E0" onload="setup()">
多级关联菜单:
<form name="frm">
<select id="s1"><option>省份</option></select>
<select id="s2"><option>地级市</option></select>
<select id="s3"><option>市、县级市、县</option></select>
</form>
</body>
</html>
1. 将以下代码存档为pr.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>网站PR值查询 - <? echo $_GET["url"]; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
table, tr, td { font-family: Verdana,Arial,宋体; font-size: 12px; color: #333333 }
body { font: 12px Verdana,宋体; background-color: #fcfcfc; padding: 0; margin: 0 }
a:link, a:visited, a:active { color: #000099; text-decoration: none}
a:hover { color: #0000ff; text-decoration: none}
FORM { padding: 0; margin: 0 }
.textbox { border: 1px solid #000000; padding: 1px; width: 100% }
.headertable { background-color: #FFFFFF; border: 1px solid black; padding: 2px }
.title { border: 1px solid #000000; font-size: 12px; font-weight: bold; line-height: 150%; color: #FFFFFF; height: 25px; background-color: #5A7594}
.table1 { background-color: #FFFFFF; width: 100%; align: center; border: 1px solid black}
.tablewrap { border: 1px dashed #777777; background-color: #EFEFEF; vertical-align: middle}
.tdrow1 { background-color: #E4E4E4; padding: 3px; vertical-align: middle}
.tdrow2 { background-color: #EFEFEF; padding: 3px; vertical-align: middle}
.tdtop { font-weight: bold; height: 24px; line-height: 150%; color: #FFFFFF}
.note { margin: 10px; padding: 5px; border: 1px dashed #555555; background-color: #FFFFFF }
</style>
</head>
<body>
<table align="center" class="tablewrap" cellpadding="0" cellspacing="3" width="350">
<tr>
<td align="center" class="title">网站PR值查询</td>
</tr>
<tr>
<td>
<table class="table1" align="center" width="100%">
<tr>
<td>
<form method="GET">
<input name="url">
<input type="submit" value="Get PageRank">
</form>
</td>
</tr>
</table>
<p align="center">
<?
if(!empty($_GET["url"]))
{
include "google_pagerank.php";
print "您查询的网站 <a href='http://".$_GET["url"]."'>".$_GET["url"]."</a> 的PR值是 ".(int)getrank($_GET["url"])." ";
}
?>
</p>
</td>
</tr>
</table>
</body>
</html>
2. 将以下代码存档为google_pagerank.php
<?
/*
Google PR v2.0
author zhil (zhil@ukr.net)
GoogleToolbar 2.0.111-big
*/
function fadd($v1,$v2)
{
$v3 = $v1 + $v2;
if($v3 > 4294967295)$v3 = $v3 - 4294967296;
// print $v3."<BR>";
return $v3;
}
function fsub($v1,$v2)
{
$v3 = $v1 - $v2;
if($v3 < 0 )$v3 = $v3 + 4294967296;
if($v3 > 4294967295)$v3 = $v3 - 4294967296;
// print $v3."<BR>";
return $v3;
}
function fdl($v1,$v2)
{
// if($v1 > 2147483647){$v1 = 2147483647;$v2++;}
$v3 = $v1 << $v2;
while($v3 > 4294967295)$v3 = $v3 - 4294967296;
return $v3;
}
function fdr($v1,$v2)
{
if($v1 > 2147483647){$v1 = floor($v1/2);$v2--;}
$v3 = $v1 >> $v2;
// while($v3 > 4294967295)$v3 = $v3 - 4294967296;
return $v3;
}
function fxr($v1,$v2)
{
$v3 = $v1 ^ $v2;
while($v3 > 4294967295)$v3 = $v3 - 4294967296;
while($v3 < 0)$v3 = $v3 + 4294967296;
return $v3;
}
function z($var)
{
GLOBAL $$var;
print $var." = ".$$var."<HR>";
}
function get_ch($url)
{
$c1 = 0xE6359A60;
$c2 = 0x9E3779B9;
$url = "info:".$url;
//z('url');
// uint $_eax, $_edi, $_ecx, $_edx, _esi, $_edi;
// uint _var8, _var4;
$_var4 = strlen($url);
GLOBAL $_eax,$_ebx,$_ecx,$_edx,$_edi,$_esi;
$_esi = $c1;
$_edi = $_ebx = $c2;
if ($_var4 > 11)
// goto loc_1002FCD6;
{
$_var8 = floor($_var4 / 12);
$_ecx = 0;
//loc_1002FBFB:
while($_var8 > 0)
{
$_eax = ord($url[(int)($_ecx+0x7)]);
$_edx = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x4)]);
$_edx = fadd($_edx,$_edi);
$_eax = fdl($_eax,8);
$_edi = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0xB)]);
$_edx = ord($url[(int)($_ecx+0xA)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x9)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x8)]);
$_edx = fadd($_edx,$_esi);
$_eax = fdl($_eax,8);
$_esi = fadd($_edx,$_eax);
$_edx = ord($url[(int)($_ecx+0x3)]);
$_eax = ord($url[(int)($_ecx+0x2)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0x1)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0x0)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_edx = fsub($_edx,$_edi);
$_edx = fsub($_edx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,13);
$_edx = fadd($_edx,$_ebx);
$_edx = fxr($_edx,$_eax);
$_edi = fsub($_edi,$_edx);
$_edi = fsub($_edi,$_esi);
$_eax = $_edx;
$_eax = fdl($_eax,8);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_esi = fsub($_esi,$_edx);
$_eax = $_edi;
$_eax = fdr($_eax,13);
$_esi = fxr($_esi,$_eax);
$_edx = fsub($_edx,$_edi);
$_edx = fsub($_edx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,12);
$_edx = fxr($_edx,$_eax);
$_edi = fsub($_edi,$_edx);
$_edi = fsub($_edi,$_esi);
$_eax = $_edx;
$_eax = fdl($_eax,16);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_var4 -= 12;
$_esi = fsub($_esi,$_edx);
$_eax = $_edi;
$_eax = fdr($_eax,5);
$_esi = fxr($_esi,$_eax);
$_edx = fsub($_edx,$_edi);
$_eax = $_esi;
$_eax = fdr($_eax,3);
$_edx = fsub($_edx,$_esi);
$_edx = fxr($_edx,$_eax);
$_ebx = $_edx;
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,10);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_eax = $_edi;
$_esi = fsub($_esi,$_ebx);
$_eax = fdr($_eax,15);
$_esi = fxr($_esi,$_eax);
$_ecx += 12;
// z('_eax');z('_ebx');z('_ecx');z('_edx');z('_edi');z('_esi');die();
$_var8 --;
}
}else
{
$_ecx = 0;
}
//loc_1002FCD9:
$_esi += strlen($url);
$_eax = $_var4;
$_eax --;
if ($_eax < 11)// goto loc_1002FD81;
{
/* switch ($_eax) {
case 0x0:
break;
case 0x1:
break;
case 0x2:
break;
case 0x3:
break;
case 0x4:
break;
case 0x5:
break;
case 0x6:
break;
case 0x7:
break;
case 0x8:
break;
case 0x9:
break;
case 0xA:
break;
}*/
//loc_1002FCF0: // case 0xa
if($_eax == 0xa)
{
$_eax = ord($url[(int)($_ecx+0xA)]);
$_eax = fdl($_eax,24);
$_esi = fadd($_esi,$_eax);
$s1 = true;
}
//loc_1002FCF9: // case 0x9
if(($_eax == 0x9)||$s1)
{
$_eax = ord($url[(int)($_ecx+0x9)]);
$_eax = fdl($_eax,16);
$_esi = fadd($_esi,$_eax);
$s2 = true;
}
//loc_1002FD02: // case 0x8
if(($_eax == 0x8)||$s2)
{
$_eax = ord($url[(int)($_ecx+0x8)]);
$_eax = fdl($_eax,8);
$_esi = fadd($_esi,$_eax);
$s3 = true;
}
//loc_1002FD0B: // case 0x7
if(($_eax == 0x7)||$s3)
{
$_eax = ord($url[(int)($_ecx+0x7)]);
$_edx = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x4)]);
$_eax = fdl($_eax,8);
$_edx = fadd($_edx,$_edi);
$_edi = fadd($_edx,$_eax);
$g1 = true;
//goto loc_1002FD47;
}
//loc_1002FD2F: // case 0x6
if(($_eax == 0x6))
{
$_eax = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,16);
$_edi = fadd($_edi,$_eax);
$s5 = true;
}
//loc_1002FD38: // case 0x5
if(($_eax == 0x5)||$s5)
{
$_eax = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_edi = fadd($_edi,$_eax);
$s6 = true;
}
//loc_1002FD41: // case 0x4
if(($_eax == 0x4)||$s6)
{
$_eax = ord($url[(int)($_ecx+0x4)]);
$_edi = fadd($_edi,$_eax);
$s7 = true;
}
//loc_1002FD47: // case 0x3
if(($_eax == 0x3)||$g1||$s7)
{
$_eax = ord($url[(int)($_ecx+0x3)]);
$_edx = ord($url[(int)($_ecx+0x2)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x1)]);
$_ecx = ord($url[(int)($_ecx+0x0)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_eax = fdl($_eax,8);
$_ecx = fadd($_ecx,$_ebx);
$_ebx = fadd($_ecx,$_eax);
$g2 = true;
}
//loc_1002FD6A: // case 0x2
if($_eax == 0x2)
{
$_eax = ord($url[(int)($_ecx+0x2)]);
$_eax = fdl($_eax,16);
$_ebx = fadd($_ebx,$_eax);
$s8 = true;
}
//loc_1002FD73: // case 0x1
if(($_eax == 0x1)||$s8)
{
$_eax = ord($url[(int)($_ecx+0x1)]);
$_eax = fdl($_eax,8);
$_ebx = fadd($_ebx,$_eax);
$s9 = true;
}
if(($_eax == 0x0)||$s9)
{
//loc_1002FD7C: // case 0x0
$_eax = ord($url[(int)($_ecx+0x0)]);
$_ebx = fadd($_ebx,$_eax);
}
}
//loc_1002FD81: // default
$_ebx = fsub($_ebx,$_edi);
$_ebx = fsub($_ebx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,13);
$_ebx = fxr($_ebx,$_eax);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,8);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_esi = fsub($_esi,$_ebx);
$_eax = $_edi;
$_eax = fdr($_eax,13);
$_esi = fxr($_esi,$_eax);
$_ebx-= $_edi;
$_ebx = fsub($_ebx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,12);
$_ebx = fxr($_ebx,$_eax);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,16);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_eax = $_edi;
$_esi = fsub($_esi,$_ebx);
$_eax = fdr($_eax,5);
$_esi = fxr($_esi,$_eax);
$_ebx = fsub($_ebx,$_edi);
$_eax = $_esi;
$_ecx = $_eax;
$_ebx = fsub($_ebx,$_eax);
$_ecx = fdr($_ecx,3);
$_ebx = fxr($_ebx,$_ecx);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_eax);
$_ecx = $_ebx;
$_ecx = fdl($_ecx,0xA);
$_edi = fxr($_edi,$_ecx);
$_eax = fsub($_eax,$_edi);
$_eax = fsub($_eax,$_ebx);
$_edi = fdr($_edi,0xF);
$_eax = fxr($_eax,$_edi);
return "6".$_eax;
}
function getrank($url)
{
ob_start();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://66.102.11.104/search?client=navclient-auto&ch=".get_ch($url)."&ie=UTF-8&oe=UTF-8&features=Rank&q=info:".$url);
// print get_ch($url);die();
// curl_setopt($ch, CURLOPT_URL, "http://66.102.11.104/search?client=navclient-auto&ch=6517667070&ie=UTF-8&oe=UTF-8&features=Rank&q=info:http://www.skinz.org");
// http:///search?client=navclient-auto&ch=6517667070&ie=UTF-8&oe=UTF-8&features=Rank&q=info:http%3A%2F%2Fwww%2Eskinz%2Eorg
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; GoogleToolbar 2.0.102-big; Windows XP 5.1)");
curl_exec($ch);
curl_close($ch);
$content = ob_get_contents();
ob_end_clean();
// print $content;
return substr($content,(strrpos($content,":")+1));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>网站PR值查询 - <? echo $_GET["url"]; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
table, tr, td { font-family: Verdana,Arial,宋体; font-size: 12px; color: #333333 }
body { font: 12px Verdana,宋体; background-color: #fcfcfc; padding: 0; margin: 0 }
a:link, a:visited, a:active { color: #000099; text-decoration: none}
a:hover { color: #0000ff; text-decoration: none}
FORM { padding: 0; margin: 0 }
.textbox { border: 1px solid #000000; padding: 1px; width: 100% }
.headertable { background-color: #FFFFFF; border: 1px solid black; padding: 2px }
.title { border: 1px solid #000000; font-size: 12px; font-weight: bold; line-height: 150%; color: #FFFFFF; height: 25px; background-color: #5A7594}
.table1 { background-color: #FFFFFF; width: 100%; align: center; border: 1px solid black}
.tablewrap { border: 1px dashed #777777; background-color: #EFEFEF; vertical-align: middle}
.tdrow1 { background-color: #E4E4E4; padding: 3px; vertical-align: middle}
.tdrow2 { background-color: #EFEFEF; padding: 3px; vertical-align: middle}
.tdtop { font-weight: bold; height: 24px; line-height: 150%; color: #FFFFFF}
.note { margin: 10px; padding: 5px; border: 1px dashed #555555; background-color: #FFFFFF }
</style>
</head>
<body>
<table align="center" class="tablewrap" cellpadding="0" cellspacing="3" width="350">
<tr>
<td align="center" class="title">网站PR值查询</td>
</tr>
<tr>
<td>
<table class="table1" align="center" width="100%">
<tr>
<td>
<form method="GET">
<input name="url">
<input type="submit" value="Get PageRank">
</form>
</td>
</tr>
</table>
<p align="center">
<?
if(!empty($_GET["url"]))
{
include "google_pagerank.php";
print "您查询的网站 <a href='http://".$_GET["url"]."'>".$_GET["url"]."</a> 的PR值是 ".(int)getrank($_GET["url"])." ";
}
?>
</p>
</td>
</tr>
</table>
</body>
</html>
2. 将以下代码存档为google_pagerank.php
<?
/*
Google PR v2.0
author zhil (zhil@ukr.net)
GoogleToolbar 2.0.111-big
*/
function fadd($v1,$v2)
{
$v3 = $v1 + $v2;
if($v3 > 4294967295)$v3 = $v3 - 4294967296;
// print $v3."<BR>";
return $v3;
}
function fsub($v1,$v2)
{
$v3 = $v1 - $v2;
if($v3 < 0 )$v3 = $v3 + 4294967296;
if($v3 > 4294967295)$v3 = $v3 - 4294967296;
// print $v3."<BR>";
return $v3;
}
function fdl($v1,$v2)
{
// if($v1 > 2147483647){$v1 = 2147483647;$v2++;}
$v3 = $v1 << $v2;
while($v3 > 4294967295)$v3 = $v3 - 4294967296;
return $v3;
}
function fdr($v1,$v2)
{
if($v1 > 2147483647){$v1 = floor($v1/2);$v2--;}
$v3 = $v1 >> $v2;
// while($v3 > 4294967295)$v3 = $v3 - 4294967296;
return $v3;
}
function fxr($v1,$v2)
{
$v3 = $v1 ^ $v2;
while($v3 > 4294967295)$v3 = $v3 - 4294967296;
while($v3 < 0)$v3 = $v3 + 4294967296;
return $v3;
}
function z($var)
{
GLOBAL $$var;
print $var." = ".$$var."<HR>";
}
function get_ch($url)
{
$c1 = 0xE6359A60;
$c2 = 0x9E3779B9;
$url = "info:".$url;
//z('url');
// uint $_eax, $_edi, $_ecx, $_edx, _esi, $_edi;
// uint _var8, _var4;
$_var4 = strlen($url);
GLOBAL $_eax,$_ebx,$_ecx,$_edx,$_edi,$_esi;
$_esi = $c1;
$_edi = $_ebx = $c2;
if ($_var4 > 11)
// goto loc_1002FCD6;
{
$_var8 = floor($_var4 / 12);
$_ecx = 0;
//loc_1002FBFB:
while($_var8 > 0)
{
$_eax = ord($url[(int)($_ecx+0x7)]);
$_edx = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x4)]);
$_edx = fadd($_edx,$_edi);
$_eax = fdl($_eax,8);
$_edi = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0xB)]);
$_edx = ord($url[(int)($_ecx+0xA)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x9)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x8)]);
$_edx = fadd($_edx,$_esi);
$_eax = fdl($_eax,8);
$_esi = fadd($_edx,$_eax);
$_edx = ord($url[(int)($_ecx+0x3)]);
$_eax = ord($url[(int)($_ecx+0x2)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0x1)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_eax = ord($url[(int)($_ecx+0x0)]);
$_edx = fdl($_edx,8);
$_edx = fadd($_edx,$_eax);
$_edx = fsub($_edx,$_edi);
$_edx = fsub($_edx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,13);
$_edx = fadd($_edx,$_ebx);
$_edx = fxr($_edx,$_eax);
$_edi = fsub($_edi,$_edx);
$_edi = fsub($_edi,$_esi);
$_eax = $_edx;
$_eax = fdl($_eax,8);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_esi = fsub($_esi,$_edx);
$_eax = $_edi;
$_eax = fdr($_eax,13);
$_esi = fxr($_esi,$_eax);
$_edx = fsub($_edx,$_edi);
$_edx = fsub($_edx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,12);
$_edx = fxr($_edx,$_eax);
$_edi = fsub($_edi,$_edx);
$_edi = fsub($_edi,$_esi);
$_eax = $_edx;
$_eax = fdl($_eax,16);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_var4 -= 12;
$_esi = fsub($_esi,$_edx);
$_eax = $_edi;
$_eax = fdr($_eax,5);
$_esi = fxr($_esi,$_eax);
$_edx = fsub($_edx,$_edi);
$_eax = $_esi;
$_eax = fdr($_eax,3);
$_edx = fsub($_edx,$_esi);
$_edx = fxr($_edx,$_eax);
$_ebx = $_edx;
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,10);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_eax = $_edi;
$_esi = fsub($_esi,$_ebx);
$_eax = fdr($_eax,15);
$_esi = fxr($_esi,$_eax);
$_ecx += 12;
// z('_eax');z('_ebx');z('_ecx');z('_edx');z('_edi');z('_esi');die();
$_var8 --;
}
}else
{
$_ecx = 0;
}
//loc_1002FCD9:
$_esi += strlen($url);
$_eax = $_var4;
$_eax --;
if ($_eax < 11)// goto loc_1002FD81;
{
/* switch ($_eax) {
case 0x0:
break;
case 0x1:
break;
case 0x2:
break;
case 0x3:
break;
case 0x4:
break;
case 0x5:
break;
case 0x6:
break;
case 0x7:
break;
case 0x8:
break;
case 0x9:
break;
case 0xA:
break;
}*/
//loc_1002FCF0: // case 0xa
if($_eax == 0xa)
{
$_eax = ord($url[(int)($_ecx+0xA)]);
$_eax = fdl($_eax,24);
$_esi = fadd($_esi,$_eax);
$s1 = true;
}
//loc_1002FCF9: // case 0x9
if(($_eax == 0x9)||$s1)
{
$_eax = ord($url[(int)($_ecx+0x9)]);
$_eax = fdl($_eax,16);
$_esi = fadd($_esi,$_eax);
$s2 = true;
}
//loc_1002FD02: // case 0x8
if(($_eax == 0x8)||$s2)
{
$_eax = ord($url[(int)($_ecx+0x8)]);
$_eax = fdl($_eax,8);
$_esi = fadd($_esi,$_eax);
$s3 = true;
}
//loc_1002FD0B: // case 0x7
if(($_eax == 0x7)||$s3)
{
$_eax = ord($url[(int)($_ecx+0x7)]);
$_edx = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x4)]);
$_eax = fdl($_eax,8);
$_edx = fadd($_edx,$_edi);
$_edi = fadd($_edx,$_eax);
$g1 = true;
//goto loc_1002FD47;
}
//loc_1002FD2F: // case 0x6
if(($_eax == 0x6))
{
$_eax = ord($url[(int)($_ecx+0x6)]);
$_eax = fdl($_eax,16);
$_edi = fadd($_edi,$_eax);
$s5 = true;
}
//loc_1002FD38: // case 0x5
if(($_eax == 0x5)||$s5)
{
$_eax = ord($url[(int)($_ecx+0x5)]);
$_eax = fdl($_eax,8);
$_edi = fadd($_edi,$_eax);
$s6 = true;
}
//loc_1002FD41: // case 0x4
if(($_eax == 0x4)||$s6)
{
$_eax = ord($url[(int)($_ecx+0x4)]);
$_edi = fadd($_edi,$_eax);
$s7 = true;
}
//loc_1002FD47: // case 0x3
if(($_eax == 0x3)||$g1||$s7)
{
$_eax = ord($url[(int)($_ecx+0x3)]);
$_edx = ord($url[(int)($_ecx+0x2)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_edx = ord($url[(int)($_ecx+0x1)]);
$_ecx = ord($url[(int)($_ecx+0x0)]);
$_eax = fdl($_eax,8);
$_eax = fadd($_eax,$_edx);
$_eax = fdl($_eax,8);
$_ecx = fadd($_ecx,$_ebx);
$_ebx = fadd($_ecx,$_eax);
$g2 = true;
}
//loc_1002FD6A: // case 0x2
if($_eax == 0x2)
{
$_eax = ord($url[(int)($_ecx+0x2)]);
$_eax = fdl($_eax,16);
$_ebx = fadd($_ebx,$_eax);
$s8 = true;
}
//loc_1002FD73: // case 0x1
if(($_eax == 0x1)||$s8)
{
$_eax = ord($url[(int)($_ecx+0x1)]);
$_eax = fdl($_eax,8);
$_ebx = fadd($_ebx,$_eax);
$s9 = true;
}
if(($_eax == 0x0)||$s9)
{
//loc_1002FD7C: // case 0x0
$_eax = ord($url[(int)($_ecx+0x0)]);
$_ebx = fadd($_ebx,$_eax);
}
}
//loc_1002FD81: // default
$_ebx = fsub($_ebx,$_edi);
$_ebx = fsub($_ebx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,13);
$_ebx = fxr($_ebx,$_eax);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,8);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_esi = fsub($_esi,$_ebx);
$_eax = $_edi;
$_eax = fdr($_eax,13);
$_esi = fxr($_esi,$_eax);
$_ebx-= $_edi;
$_ebx = fsub($_ebx,$_esi);
$_eax = $_esi;
$_eax = fdr($_eax,12);
$_ebx = fxr($_ebx,$_eax);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_esi);
$_eax = $_ebx;
$_eax = fdl($_eax,16);
$_edi = fxr($_edi,$_eax);
$_esi = fsub($_esi,$_edi);
$_eax = $_edi;
$_esi = fsub($_esi,$_ebx);
$_eax = fdr($_eax,5);
$_esi = fxr($_esi,$_eax);
$_ebx = fsub($_ebx,$_edi);
$_eax = $_esi;
$_ecx = $_eax;
$_ebx = fsub($_ebx,$_eax);
$_ecx = fdr($_ecx,3);
$_ebx = fxr($_ebx,$_ecx);
$_edi = fsub($_edi,$_ebx);
$_edi = fsub($_edi,$_eax);
$_ecx = $_ebx;
$_ecx = fdl($_ecx,0xA);
$_edi = fxr($_edi,$_ecx);
$_eax = fsub($_eax,$_edi);
$_eax = fsub($_eax,$_ebx);
$_edi = fdr($_edi,0xF);
$_eax = fxr($_eax,$_edi);
return "6".$_eax;
}
function getrank($url)
{
ob_start();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://66.102.11.104/search?client=navclient-auto&ch=".get_ch($url)."&ie=UTF-8&oe=UTF-8&features=Rank&q=info:".$url);
// print get_ch($url);die();
// curl_setopt($ch, CURLOPT_URL, "http://66.102.11.104/search?client=navclient-auto&ch=6517667070&ie=UTF-8&oe=UTF-8&features=Rank&q=info:http://www.skinz.org");
// http:///search?client=navclient-auto&ch=6517667070&ie=UTF-8&oe=UTF-8&features=Rank&q=info:http%3A%2F%2Fwww%2Eskinz%2Eorg
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; GoogleToolbar 2.0.102-big; Windows XP 5.1)");
curl_exec($ch);
curl_close($ch);
$content = ob_get_contents();
ob_end_clean();
// print $content;
return substr($content,(strrpos($content,":")+1));
}
?>
相关函数:open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表头文件:#include <sys/types.h>
#include <dirent.h>
定义函数: struct dirent *readdir(DIR *dir)
函数说明: readdir()返回参数dir目录流的下个目录进入点。结构dirent定义如下:
表头文件:#include <sys/types.h>
#include <dirent.h>
定义函数: struct dirent *readdir(DIR *dir)
函数说明: readdir()返回参数dir目录流的下个目录进入点。结构dirent定义如下:
<?php
/*
PHP Version: 28 April 2005
Author: move2rent
purpose:读取某个目录下的文件
*/
//要读取的目录
$folder="H:/temp";
//打开目录
$fp=opendir($folder);
//阅读目录
while(false!=$file=readdir($fp))
{
//列出所有文件并去掉'.'和'..'
if($file!='.' &&$file!='..')
{
//$file="$folder/$file";
$file="$file";
//赋值给数组
$arr_file[]=$file;
}
}
//输出结果
if(is_array($arr_file))
{
while(list($key,$value)=each($arr_file))
{
echo "$key=>$value<br>";
}
}
//关闭目录
closedir($fp);
?>
----------------------
读取某个目录下的文件2
<?php
/*PHP Version: 30 April 2005
Author: move2rent
purpose:读取某个目录下的文件二*/
/*----------------------------------*/
function listFiles($dir)
{
//打开目录
$handle=opendir($dir);
//阅读目录
while(false!=($file=readdir($handle)))
{
//列出所有文件并去掉'.'和'..'
if($file!='.'&&$file!='..')
{
//所得到的文件名是否是一个目录
if(is_dir("$dir/$file"))
{
//列出目录下的文件
listFiles("$dir/$file");
}
else
{
//如果是文件则打开该文件
$fp=fopen("$dir/$file","r");
//阅读文件内容
$data=fread($fp,filesize("$dir/$file"));
if($data)
//将读到的内容赋值给一个数组
$file_array[]="$dir/$file";
/*foreach($file_array as $key=>$value)
{
echo "$value<br>";
}
*/
//echo count($file_array);
//输出结果
while(list($key,$value)=each($file_array))
{
echo"$key=>$value<br>";
}
}
}
}
}
/*------------------------------------------*/
//调用
$dir="H:/temp";
listFiles($dir);
?>
-----------------------------------------------
如果该目录不存在则创建它
<?php
/*
PHP Version: 28 April 2005
Author: move2rent
purpose:读取某个目录下的文件,如果该目录不存在则创建它
*/
$folder="H:/temp1";
//打开目录
@$fp=opendir($folder);
//如果该目录不存在则创建它
if(!$fp)
{
//创建目录
mkdir($folder);
//修改该目录的权限
chmod($folder,'0755');
echo " the folder create success!";
}
else
{
echo " the folder have exists.";
}
?>