felayman——细学PHP

1.    文件复制

bool copy (string $source , string $dest ) PHP 4, PHP 5)


<?php

header("content-type:text/html;charset=utf-8");

$source_path = "index.php";

$dest_path = "copy_content.php";

//将$source_path路径下的文件拷贝到目的路径下

if(copy($source_path, $dest_path)){

echo "复制成功";

}else{

echo "复制失败";

}

?>

2.    判断文件是否存在

bool file_exists( string $filename )


<?php

header("content-type:text/html;charset=utf-8");

$source_path = "ndex.php";

$dest_path = "copy_content.php";

//将$source_path路径下的文件拷贝到目的路径下

if(file_exists($source_path)){

if(copy($source_path, $dest_path)){

echo "复制成功";

}else{

echo "复制失败";

}

}else{

echo "文件不存在";

}

?>

3.    文件移动或者重命名


<?php

header("content-type:text/html;charset=utf-8");

//如果两个文件在同一个目录下,则是重命名,如果不在统一目录下则是移动源文件

$old_name = "test.php";

$new_name = "dest/test.php";

if(file_exists($old_name)){

echo "文件存在";

if(rename($old_name, $new_name)){

echo "文件移动成功";

}else{

echo "文件移动失败";

}

}else{

echo "文件不存在";

}

?>

4.删除文件


<?php

header("content-type:text/html;charset=utf-8");

$path = "dest/index.php";

if(file_exists($path)){

if(unlink($path)){

echo "文件删除成功";

}else{

echo "文件删除失败";

}

}

?>

5.建立目录


<?php

header("content-type:text/html;charset=utf-8");

$path = "c:/filename";

if(file_exists($path)){

echo "该目录存在";

}else{

if(mkdir($path)){

echo "创建成功";

}else{

echo "创建失败";

}

}

?>

6.删除目录


<?php

header("content-type:text/html;charset=utf-8");

$path = "c:/filename";

if(!file_exists($path)){

if(mkdir($path)){

echo "创建成功";

}

}else{

if(rmdir($path)){

echo "删除成功";

}else{

echo "删除失败";

}

}

?>

7.遍历目录(文件夹)


<?php

header("content-type:text/html;charset=utf-8");

$path = "/";

if(file_exists($path)){

$file_asc = scandir($path);//升序排列文件

$file_desc = scandir($path,1);//降序排列文件

echo "<p>该目录下的文件:<br>";

foreach ($file_asc as $key=>$value) {

echo $key."===$value"."<hr>";

}

}

?>

8.递归遍历目录文件


<?php

function getDirTree($path){

$tree = array();

$tmp = array();

if(!is_dir($path))

return null;

$files =scandir($path);

foreach ($files as $value) {

if($value=="."||$value=="..")

continue;

$full_path = $path."/".$value;

if(is_dir($full_path)){

$tree[$value] = getDirTree($full_path);

}else{

$tmp[] = $value;

}

}

$tree = array_merge($tree,$tmp);

return $tree;

}

$path = ‘../Demos‘;

foreach (getDirTree($path) as $key=>$value) {

if(is_array($value)){

foreach ($value as $para) {

echo $para."<br>";

}

}

echo $key."====".$value."<hr>";

}

?>

GD函数库

1.    载入图片


<?php

//载入图片

//图路径

$path = "风景.jpg";

//避免中文图片名称导致乱码的问题

$path = iconv("utf-8", "gbk", $path);

//从图像文件创建图像句柄

$img  = imagecreatefromjpeg($path);

//发送header头部信息

header("content-type:text/html;charset=utf-8");

//输入图像

imagepng($img);

//释放与图像资源有关的内存

imagedestroy($img);

?>

2.    获取图片信息


<?php

function createImg($filepath){

if(!file_exists($filepath)){

return false;

}

$img_info = getimagesize($filepath);

//getimagesiez()函数获取很多参数  第三个参数为图片的类型

switch ($img_info[2]){

case 1:

$func_img = "imagecreatefromgif";  //函数名称

$img_type = "gif";

break;

case 2:

$func_img = "imagecreatefromjpeg"; //函数名称

$img_type = "jpeg";

break;

case 3:

$func_img = "imagecreatefrompng"; //函数名称

$img_type = "png";

break;

default:

return false;

}

$img = $func_img($filepath);

return array($img,$img_type);

}

$path = "风景.gif";

$path = iconv("utf-8", "gbk", $path);

$img_array = createImg($path);

$img = $img_array[0];

$img_type = $img_array[1];

header("content-type:image/$img_type;");

imagepng($img);

imagedestroy($img);

?>

3.添加水印


<?php

/**

* 英文文字水印

*/

$path = "风景.jpg";

$path = iconv("utf-8", "gbk", $path);

//获取图片信息

$img_array = getimagesize($path);

$img_width = $img_array[0];

$img_height =$img_array[1];

//创建图像句柄

$img = imagecreatefromjpeg($path);

//设置水印颜色

$red = imagecolorallocate($img, 255, 0, 0);

//设置字体大小

$font = 9;

//设置水印位置

$str_x = $img_width/4;

$str_y = $img_height/5;

//设水印内容

$str = " wo ai ni";

//$str = iconv("utf-8", "gbk", $str);

//将水印输出到图片上

imagestring($img, 100, $str_x, $str_y, $str, $red);

header("content-type:image/jpeg");

//输出图片

imagejpeg($img);

imagedestroy($img);

?>

3.    添加自定义水印


<?php

$path = "风景.jpg";

$path = iconv("utf-8", "gbk", $path);

//获取图片信息

$img_array = getimagesize($path);

$img_width = $img_array[0];

$img_height =$img_array[1];

//创建图像句柄

$img = imagecreatefromjpeg($path);

//设置水印颜色

$red = imagecolorallocate($img, 255, 0, 0);

//字体路径

$font_file = "mzd.ttf";

//字体倾斜角度

$font_angle = 20;

$font_size = 30;

$x = 100;

$y = 180;

$str = "尚图云相册";

imagettftext($img, $font_size, $font_angle, $x, $y, $red, $font_file, $str);

header("content-type:image/jpeg");

imagejpeg($img);

imagedestroy($img);

?>

4.    添加图片水印


<?php

$path = "风景.jpg";

$path = iconv("utf-8", "gbk", $path);

//获取图片信息

$img_array = getimagesize($path);

$img_width = $img_array[0];

$img_height =$img_array[1];

//创建图像句柄

$img = imagecreatefromjpeg($path);

//设置水印图片

$source_img_path = "Cd.gif";

$source_array = getimagesize($source_img_path);

$source_width = $source_array[0];

$source_height = $source_array[1];

//水印图片句柄

$source_img = imagecreatefromgif($source_img_path);

//设置原图片定位坐标

$dst_x = ($img_width-$source_width)/2;

$dst_y = ($img_height-$source_height)/2;

$src_x =0;

$src_y =0;

$src_w =$source_width;

$src_h =$source_height;

//从水印图片复制到一部分

imagecopy($img, $source_img, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);

header("content-type:image/jpeg");

imagejpeg($img);

imagedestroy($img);

?>

最简单的随机验证码:


<?php

//随机字符串0-1 a-Z

$str = "QWEPOIUYTRLAKSJDHFGZMXNBCqwertyuioplkjhgfdsazxcvbnm1234567890";

//字符创长度

$len = strlen($str);

$num_code = 5;

while($num_code-->0){

$rand_index = rand(0, $len-1);

echo $str[$rand_index];

}

?>

<?php

echo "<br>";

$rand_num =rand();

echo $rand_num."<br/>";

$str = md5($rand_num);

echo $str."<br/>";

$num_code=5;

echo substr($str, 0,$num_code);

?>

动态随即验证码1


<?php

$rand_num =rand();

$str = md5($rand_num);

$num_code=5;

//截取随机码

$str_code = substr($str, 0,$num_code);

//画布大小

$width = 50;

$height =20;

//创建图片句柄

$image = imagecreate($width, $height);

//背景颜色

$bg_color =imagecolorallocate($image, 255, 255, 255);

//边框色

$border_color =imagecolorallocate($image, 0, 0, 0);

//绘制边框

imagerectangle($image, 0, 0, $width-1, $height-1, $border_color);

//设置随机码颜色

$str_color = imagecolorallocate($image, 255, 0, 0);

//字体颜色

$str_size = 5 ;

//设置字体在画布中的位置

$str_x =2;

$str_y =2;

//将随机码添加到画布上

imagestring($image, $str_size, $str_x, $str_y, $str_code, $str_color);

//显示图片

imagepng($image);

//释放资源

imagedestroy($image);

?>

动态随即验证码2


<?php

$rand_num =rand();

$str = md5($rand_num);

$num_code=5;

//截取随机码

$str_code = substr($str, 0,$num_code);

//画布大小

$width = 60;

$height =25;

//创建图片句柄

$image = imagecreate($width, $height);

//背景颜色

$bg_color =imagecolorallocate($image, 255, 255, 255);

//边框色

$border_color =imagecolorallocate($image, 0, 0, 0);

//绘制边框

imagerectangle($image, 0, 0, $width-1, $height-1, $border_color);

for ($i = 0; $i < $num_code; $i++) {

//随机产生验证码颜色

$str_color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));

//字体颜色

$font_size = 10;

//设置验证码位置

$str_x=floor(($width/$num_code)*$i)+rand(0,5);

$str_y =rand(2, $height-15);

//将随机码添加到画布上,每个随即字符都不同颜色大小

imagechar($image, $font_size, $str_x, $str_y, $str_code[$i], $str_color);

}

header("content-type:image/png");

//显示图片

imagepng($image);

//释放资源

imagedestroy($image);

?>

验证码的背景干扰点


<?php

/*

* 绘制干扰点

*/

$width =60;

$height=25;

//图片句柄

$image = imagecreate($width, $height);

//背景颜色

$image_bgcolor = imagecolorallocate($image, 255, 255, 255);

//$边框颜色

$image_bolorcolor = imagecolorallocate($image, 0, 0, 0);

//绘制边框

imagerectangle($image, 0, 0, $width-1, $height-1, $image_bolorcolor);

//设置干扰点个数

$num_distrub_points =200;

for ($i = 0; $i < $num_distrub_points; $i++) {

//随机设置干扰点颜色

$point_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0,
255));

//干扰点的位置

$point_x = rand(2, $width-2);

$point_y = rand(2, $height-2);

//绘制干扰点

imagesetpixel($image, $point_x, $point_y, $point_color);

}

header("content-type:image/png");

imagepng($image);

imagedestroy($image);

?>

一个完整的验证码


<?php

/**

* 创建一个完整版的验证码

*/

function createCheckCode($width=60,$height=25,$num_code=5,$num_distrub_points=200){

//创建画布

$image = imagecreate($width, $height);

//绘制背景颜色

$image_bgcolor = imagecolorallocate($image, 255, 255, 255);

//会孩子边框颜色

$image_border_color = imagecolorallocate($image, 0, 0, 0);

//绘制边框

imagerectangle($image, 0, 0, $width-1, $height-1, $image_border_color);

/*

* 产生随机码

*/

$rand_num = rand();

$str = md5($rand_num);

//将随机码全部换成大写

$str_code = strtoupper(substr($str, 0,$num_code));

/*

* 绘制随机码(添加到画布上)

*/

for ($i = 0; $i < $num_code; $i++) {

//每个随机码的颜色

$str_color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));

//随机码的字体大小

$font_size =5;

//随机码在画布中出现的位置

$str_x = floor(($width/$num_code)*$i)+rand(0, 5);

$str_y = rand(2, $height-15);

//将随机码添加到画布中

imagechar($image, $font_size, $str_x, $str_y, $str_code[$i], $str_color);

/*

* 绘制干扰点

*/

}

for ($i = 0; $i < $num_distrub_points; $i++) {

//每个干扰点的颜色

$point_color =  imagecolorallocate($image, rand(0,100), rand(0,100), rand(0,100));

$point_x = rand(2, $width-2);

$point_y = rand(2, $height-2);

imagesetpixel($image, $point_x, $point_y, $point_color);

}

header("content-type:image/png");

//输出画布图片

imagepng($image);

imagedestroy($image);

}

createCheckCode();

?>

日期与时间操作

简单的unix时间戳


<?php

//UNIX时间戳

echo time();

?>

获取系统的时间


<?php

header("content-type:text/html;charset=utf-8");

//UNIX时间戳

echo time()."<br/>";

//指定某个时间点的时间戳

echo "指定某个时间点的时间戳:".mktime(0,0,0,12,22,2012)."<br/>";

echo date_default_timezone_get()."<br/>";

$week = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");

/**

* 获取当前的时间戳信息

*/

$t = getdate();

echo "系统当前时间为:<p>";

echo $t[‘year‘]."年".$t[‘mon‘]."月".$t[‘mday‘]."日".$t[‘hours‘]."时".$t[‘minutes‘]."分".$t[‘second‘]."秒";

echo "<br/>今天是一年中的第".$t[‘yday‘]."天";

?>

格式化日期输出


<?php

header("content-type:text/html;charset=utf-8");

$week = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");

/**

* 格式化当前的时间戳信息

*/

$format = ‘Y年m月d日H点i分s秒‘;

$time = date($format);

?>

计算两个时间之间的间隔


<?php

header("content-type:text/html;charset=utf-8");

//当前时间

$from_timestamp = mktime();

//指定时间点

$to_timestamp = mktime(0,0,0,12,22,2015);

//计算时间戳的差

$interval = $to_timestamp- $from_timestamp;

//将时间戳转换成天数

$interval_day  = floor($interval/(3600*24));

echo "时间间隔为:".$interval_day."天";

?>

设置cookie


<?php

header("content-type:text/html;charset=utf-8");

$name = ‘last_login_time‘;

//cookie的值

$value  = date(‘Y-m-d H-i-s‘);

//设置cookie,永久有效

setcookie($name,$value);

$name = ‘last_login_time‘;

if(isset($_COOKIE[$name])){

echo "你上一次访问该网站的时间为:".$_COOKIE[$name]."<br/>";

}else{

echo "欢迎您第一次来到本站";

}

?>

Session

开启session,获取session的名称以及修改session的名称


<?php

//开启session

session_start();

//返回session的名称

echo session_name()."<br/>";

//修改session的名称

session_name(‘haha‘);

//返回修改后的session名称

echo session_name();

?>

获取session的保存路径


<?php

header("content-type:text/html;charset=utf-8");

session_start();

echo "原session_id为:".session_id();

//修改session_id

session_id(‘1234567890‘);

echo "<hr>修改后的session_id为:".session_id()."<hr>";

echo "session文件的保存路径为:".session_save_path();

?>

Session的简单使用


<?php

header("content-type:text/html;charset=utf-8");

session_start();

if(isset($_SESSION[‘name‘])){

echo "已经注册了session<hr>";

}else{

echo "还没有注册session<hr>";

$_SESSION[‘name‘] = ‘SESSION名称‘;

}

if(isset($_SESSION[‘name‘])){

echo "已经注册了session<hr>";

echo $_SESSION[‘name‘];

}else{

echo "还没有注册session<hr>";

}

?>

数据库部分

Mysqli扩展库使用方法 -------------------查询


<?php

header("content-type:text/html;charset=utf-8");

//创建一个与服务器链接的实例

$mysqli = new mysqli(‘localhost‘,‘root‘,‘123456‘,‘test‘);

if($mysqli->connect_errno){

die("数据库链接失败".$mysqli->connect_error);

}else{

echo "数据库链接成功";

}

$mysqli->select_db("test");

$sql = "select user,pass  from  user";

$result = $mysqli->query($sql);

if($result){

while ($row = $result->fetch_assoc()){

echo <<<TR

<tr>

<td>{$row[‘user‘]}</td>

<td>{$row[‘pass‘]}</td>

</tr>

TR;

}

}else{

echo "该语句执行失败";

}

$mysqli->close();

?>

AJAX

1.    index


<!DOCTYPE html>

<html>

<head>

<script type="text/javascript" src="ajax.js"></script>

<meta charset="UTF-8">

<title>ajax</title>

</head>

<body>

<form name="myform">

用户:<input type="text" name="username"/>

时间:<input type="text" name="time"/>

</form>

</body>

</html>

2.    ajax.js


//获取ajax对象

var xmlHttp = new XMLHttpRequest();

/**

* 1.method      http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

* 2.url      请求的URL地址,可以为绝对地址也可以为相对地址。

* 3.async    布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

* 4.username 如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

* 5.password 验证信息中的密码部分,如果用户名为空,则此值将被忽略。

*/

var method = "post";

var url = "test.php";

var async = true;

xmlHttp.open(method, url, async);

//设置回调函数,接收服务器端的信息以进行处理

xmlHttp.onreadystatechange = getServerInfo;

//xmlHttp.abort();调用次方法后,会放弃与服务器端进行数据通信

//想服务器端发送内容,为什么不起作用呢?

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

alert(xmlHttp.status);

/*****************ajax的回调函数*******************/

function getServerInfo(){

/**

* xmlHttp.readyState是服务器端返回的状态

*/

//alert(xmlHttp.readyState);

/*

if(xmlHttp.readyState==0){

alert("这个是不会弹出的,因为还没有服务器进行连接");

}

if(xmlHttp.readyState==1){

alert("xmlHttp.readyState==1\n该xmlHttp对象已经在服务器端建立了,即open方法已经执行,但是还没有调用send方法");

}

if(xmlHttp.readyState==2){

alert("xmlHttp.readyState==2\nsend方法已调用,但是当前的状态及http头未知");

}

if(xmlHttp.readyState==3){

alert("xmlHttp.readyState==3\n已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误");

}

*/

if(xmlHttp.readyState==4){

alert(xmlHttp.status);

//alert("xmlHttp.readyState==4\n数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据");

var headers =  xmlHttp.getAllResponseHeaders();

//获取所有响应头信息

//alert(headers);

//获取指定的响应头里面的信息

//获取时间

//alert(xmlHttp.getResponseHeader("Date"));

//获取服务器

//alert(xmlHttp.getResponseHeader("Server"));

//获取服务器脚本版本

//alert(xmlHttp.getResponseHeader("X-Powered-By"));

//获取相应头长度

//alert(xmlHttp.getResponseHeader("Content-Length"));

//获取链接状态

//alert(xmlHttp.getResponseHeader("Connection"));

//获取文档类型

//alert(xmlHttp.getResponseHeader("Content-Type"));

//获取连接持续时间

//alert(xmlHttp.getResponseHeader("Keep-Alive"));

document.myform.time.value = xmlHttp.responseText;

}

}

3.test.php


<?php

$format = ‘Y-m-d‘;

$time = date($format);

echo $time;

?>

4.总结


所谓的ajax就是多一个XMLHttpRequest对象实例与服务器进行异步通信,取得从服务器端返回的信息给用户,已完成局部刷新数据和从后台取数据的功能.需要的技术,html---js---后台脚本(php/asp/jsp),当进行小型数据传输的时候可以不需要xml文件,当存在大量文本的时候就需要xml文件

felayman——细学PHP

时间: 2024-10-11 21:22:47

felayman——细学PHP的相关文章

细学设计模式一(组合与继承)

1 <?php 2 abstract class Lesson{ 3 protected $duration; 4 const FIXED = 1; 5 const TIMED = 2; 6 private $costtype; 7 8 function __construct($duration,$costtype){ 9 $this->duration = $duration; 10 $this->costtype = $costtype; 11 } 12 13 function c

从零开始学Go之基本语法(一):基本数据类型与变量

基本数据类型: Go中数据类型并不是特别多,但是有一部分用法却比较多,这一部分放到后面再细学. Go中的基本数据类型有: ①整型:int,uint ②浮点型:float32,float64 ③布尔型:bool ④字符型:byte,rune ⑤字符串型:string 整型可以按长度分为int8,int16,int32,int64和对应无符号版本的uint8,uint16,uint32,uint64 uint8就是byte型,int16对应C中的short,int64对应C中的long 浮点数需要改

学Linux到底学什么?

我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底要学什么? 为什么要学Linux 在回答学什么之前,我们先看看为什么要学.首先我们需要认识到的是,很多服务器使用的是Linux系统,而作为服务器应用程序的开发者或者维护者,如果不了解Linux的基本使用,该如何进行开发或者维护呢? 当然,也有可能你听说Linux更高大上,或者是说Linux对开发者更加友好(Windows用户把刀放下),这都是题外话了. 在我看来,学习Linux主要有以下两点原因 使用标准C

知乎转载

链接:https://www.zhihu.com/question/22590902/answer/55182189来源:知乎著作权归作者所有,转载请联系作者获得授权. 题主的问题是如何白手起家靠一个人赚到100万,我觉得这个是可以做到的,但是要分阶段,不太可能从一个从无经商经验的人突然转变成一个人折腾点东西就能赚百万(多个人一起有可能).我先把我个人的阶段拆解开来,给你一个直观的感受. 第一阶段:打黑工,饭店服务生,送PIZZA (读书时兼职工作)时间: 18岁-19岁 年收入:<10万人数:

如何通过反编译工具与插件 查看java *.class 文件源码

Java Decompiler[java 反编译]:开发了反编译工具,可以方便查看*.class 文件源码.下面介绍几种查看源码的方式:工具&插件 1.JD-GUI JD-GUI  是显示java 源代码 *.class文件的 图形界面工具.可以在这里下载:JD-GUI-DownLoad 下载下来后,打开该工具,直接将jar包 拖拽到 显示窗口即可查看源代码. 举例:通过 jd-gui.exe 工具 查看 xUtils-2.6.14.jar 包 源码: 但是,一般开发用的是IDE(Integra

深入体会__cdecl与__stdcall

在学习C++的过程中时常碰到WINAPI或者CALLBACK这样的调用约定,每每觉得十分迷惑.究竟这些东西有什么用?不用他们又会不会有问题?经过在网上的一番搜寻以及自己动手后,整理成以下的学习笔记.1.WINAPI与CALLBACK 其实这两者在Windows下是相同的,在windef.h中定义如下: #ifdef _MAC#define CALLBACK    PASCAL#define WINAPI      CDECL#define WINAPIV     CDECL#define API

JAVA学习博客----2015.4

这是开始写的第一篇学习博客,记录一下每个月的学习进度和掌握程度,因为这是第一次写学习博客而且已经看编程方面的书已经有几个月了,所以这一篇学习博客可能看似有些乱或者篇幅太长.从十二月的<程序员教程>到现在的<JAVA核心技术卷一基础知识>,关于编程的书在看的目前是四本(<程序员编程><C Primer Plus><C++ Primer Plus><JAVA核心技术>卷一),目前在办公室看的是JAVA核心技术,在家看的目前是C++,学习进

np次问装决白看明集事利拉话老以dpvr

多儿西布她次少便把选品空素置保四西设据保体劳需照位选铁红须色目质复行数说性条更产在你回也种无已道这安大月北布油存因音总解段因感切温第往半传那给技许目示所切志马集局构业受持点口场活话非县可消将高万八离山本很造圆片基要需容律报南法高极民阶民没中或习必团带复平特感百必美你县始备状者内民经机已联什红好面太或极做革系置习果越数低开联八国酸真们群界二象样律它定山花九边准满车单斗就华第直为使引变方说体派期里度族容层技定位数外常问眼选些于对即青时并文军起际火必事没的信口交况题标现织风就实性结起处族专极信县规七万

门据毛走她劳名元满五而于确明况目面

列问前数使做单程团色公各知专后管制级快选极离了片当算类决开路不水然根成众极克九么和根这断听金单示些你等却放直系素收条该积反科国和根县被后己传已领类处家张导 界具质即细学结场查市林的满子何话几日到可省严石手术见满使议给育音民据题我按成果日做值每认件调要交边划感选精类高公平见传就完片际住电些机名带将身受间市众受省多系一部交建快权正月日步论名 改却接热引水参发你先划多主小全动儿外安头走构除结己叫做直华则照且然还儿权十文到品团回切难传半效论取信半北联离须门离保管建运好 传件本书设再按值大写准阶或开向相达