时间:2021-07-01 10:21:17 帮助过:3人阅读
1.设置默认编码字符集
路径:Settings->Editor->File Encodings
2.显示行号
路径:Editor->General->Appearance
3.版权信息
/**
* COPYRIGHT (C) ${YEAR} BY ${user} SOFTWARE. ALL RIGHTS RESERVED.
*
* @author:${user}
* @date:${YEAR}/${MONTH}/${DAY}
* @since:1.0
* @description:
*/4.添加PHP解释器
试着run当前PHP文件,如果没有添加php解释器,会提示”interpreter is not specified or invalid”,此时,点击Fix,添加php解释器(php.exe)。
Ctrl+j:自动代码补全
Ctrl+d: 复制当前行
Shift+2:快速定位错误
Alt+1:弹出文件列表
Ctrl+g:跳转到指定行
F4:查找变量来源
Ctrl+y:删除当前行
step into [F7]:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数);
step over [F8]:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行)。
step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。
run to cursor 跳到光标的位置
cookie信息会以字符串的形式保存

用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
在一个会话过程中,用户会产生一些数据,比如购物车,每个用户查看购物车时,看到自己选的商品,这是怎么实现的?
为什么有些视频网站可以保存你上次看过的记录?
如何保存用户上次浏览的信息,如何保存用户在一定时间内,不用反复登录?
<?php
//演示如何创建cookie信息
//把用户名和密码保存到客户端的cookie
//1:key;2:value;3:interval(秒)
setcookie("name", "hoki", time() + 10);//当前时间+10秒
echo "保存成功";?>如果不加第三个参数,cookie不会保存到客户端,当浏览器的会话结束,我们的cookie就失效
cookie只能保存字符串
echo "<pre>";
print_r($_COOKIE); echo "<pre>"; //获取指定的key对应的值
if(!empty($_COOKIE['name'])){ echo $_COOKIE['name']; return;
} echo "cookie失效了";?>如果cookie有效时间到,则不能取出;
cookie通过http协议传输到服务器;
客户端可以保存多个键值对;
cookie也可以保存中文,默认将会对中文进行urlencode进行编码;
cookie可以给不同的键值对指定不同的有效时间
就是重置cookie,跟创建cookie一样
要删除cookie需要确保它的失效期是在过去,才能触发浏览器的删除机制
删除指的定某个键值对
<?php
//如果要删除某个键,只需要把time()-秒数即可
setcookie("name","",time()-200); echo "删除name键成功";?>删除所有的键值对
<?php
//遍历删除
foreach($_COOKIE as $key=>$val){
setcookie("$key","",time()-200);
} echo "删除所有的键值对成功";?>如果你要删除的cookie没有删除完,则这个cookie在客户端依然是有保留的;如果你把这个网站的所有cookie都删除了,则浏览器会把整个文件都删除据。
cookie可以进行md5加密
setcookie("name", md5("hoki"), time() + 10);如何实现登陆某个网站后能在任何一个网页上查看用户名?
graph LR浏览器-->|将数据保存到session文件中|session01.phpsession01.php-->|写入|session文件浏览器-->|取出该浏览器保存的session数据|session02.phpsession02.php-->|读取|session文件
数据库实现起来较为复杂
cookie需要在网络传数据具有不安全性和数据量过大的问题
保存的数据格式: name|s:8:”hoki”;
- name: key
- s: Data Type
- 8: Data Size(Byte)
<?php
echo "<br>--演示如何保存session数据?--<br>"; //1. 初始化session
session_start();//可通过手册获取(函数扩展->Session扩展->Session函数)
//2. 保存数据
$_SESSION['name']="hoki"; //3. session文件可以保存double,integer,bool,array,object等类型
$_SESSION['age']=100;//integer
$_SESSION['isBoy']=true;//bool
//save array
$arr=array("hoki","lin","handsome"); $_SESSION['arr']=$arr; //save object
class Cat{
private $name; private $age; private $intro; function __construct($name,$age,$intro){
$this->name = $name; $this->age = $age; $this->intro = $intro;
} public function getName(){
return $this->name;
} public function getAge(){
return $this->age;
} public function getIntro(){
return $this->intro;
}
} $cat = new Cat("猫","2","well"); $_SESSION['cat'] = $cat; echo "保存成功";?><?php
echo "<br/>获取session数据<br/>";
session_start(); //1. 获取所有session
echo "<pre>";
print_r($_SESSION); echo "</pre>"; //2. 通过key来指定获取某个值
echo "名字是:".$_SESSION[name]; $arr = $_SESSION['arr']; echo "<br>数组的数据是:"; foreach($arr as $key=>$val){ echo "<br>$val";
} //3. 获取对象
//因为对象没有串行化,所以要把类的定义也搬过来
//当然,也可以把类的定义独立出来,要用到时require_once调用即可
class Cat{
private $name; private $age; private $intro; function __construct($name,$age,$intro){
$this->name = $name; $this->age = $age; $this->intro = $intro;
} public function getName(){
return $this->name;
} public function getAge(){
return $this->age;
} public function getIntro(){
return $this->intro;
}
} $cat = $_SESSION['cat']; echo "<br>猫的名字是:".$cat->getName(); echo "<br>猫的年龄是:".$cat->getAge(); echo "<br>猫的介绍是:".$cat->getIntro();?><?php
session_start(); $_SESSION['name'] = "小明"; echo "更新成功";?><?php
session_start(); //1. 删除某一个键值对
unset($_SESSION['name']); //2. 删除所有键值对,相当于把当前这个浏览器对应的session文件删除
session_destroy(); echo "删除session数据成功";?>要使用session,都需要初始化session_start();
session文件中可以放入多个键值对,但要注意键不能重复,值则可以为基本数据类型或数组,对象
如果要获取对象,则需要声明类的定义
一个会话对应一个session文件
session.gc_maxlifetime = 1440 秒
在php.ini文件中搜索session.save_path,可以查看session文件的默认保存路径
Cookie是把用户的数据写给用户的浏览器
Session是把用户的数据写到用于独有的$_SESSION中,存在服务器的某个路径的文件中
F12查看效果更佳;记得清除浏览器缓存;
<?php
//购物界面
echo "<h1>欢迎购买</h1>"; echo "<a href='ShopProcess.php?bookid=sn001&bookname=三国演义'>三国演义</a><br/>"; echo "<a href='ShopProcess.php?bookid=sn002&bookname=红楼梦'>红楼梦</a><br/>"; echo "<a href='ShopProcess.php?bookid=sn003&bookname=水浒传'>水浒传</a><br/>"; echo "<a href='ShopProcess.php?bookid=sn004&bookname=西游记'>西游记</a><br/>"; echo "<hr/>"; echo "<a href='ShowCart.php'>查看已购商品列表</a>"?><?php
//接收用户购买请求并把书存到session中
$bookid = $_GET['bookid']; $bookname = $_GET['bookname']; //保存到session中
session_start(); $_SESSION[$bookid] = $bookname; echo "<br/>购买商品成功"; echo "<br/><a href='MyHall.php'>返回购物界面继续购买</a>";?><?php
echo "<h1>购物车商品列表</h1><br/>";
session_start(); foreach($_SESSION as $key=>$val){ echo "书号:".$key.";书名:".$val."<br/>";
} echo "<br/><a href='MyHall.php'>返回购物界面继续购买</a>";?>浏览器->工具->Internet选项->隐私->高级
如果用户禁用cookie后,服务器每次session_start();都会创建一个全新的session文件,后果就是无法让多个php页面共享同一份session文件。
有三种方式可以实现在客户端禁用cookie后共享session
在每个超链接上添加一个PHPSESSID=sessionId;同时在每个页面加入:
if(isset($_GET['PHPSESSID'])){
session_id($_GET['PHPSESSID']);
}
session_start();使用常量SID
在超链接action ,header(“Location:xx”)可以直接拼接SID常量即可
echo "<a href='ShopProcess.php?bookid=sn004&bookname=西游记&".SID."'>西游记</a><br/>";
启用session.use_trans_sid=1
登录页面
session_start();$_SESSION['loginuser']=$name;
目标页面
session_start();if(empty($_SESSION['loginuser'])){
header("Location: login.php");
}当某个用户操作session的时候,会使用到session_start(),该函数会调用gc,但是其概率是session.gc_probability/session.gc_pisor;如果网站的规模越大,应该把这个概率设置得越小。
[atime] => 1523005390 该文件上一次被访问的时间戳
[mtime] => 1523005397 该文件上一次内容被修改时间戳
[ctime] => 1523005390 该文件上一次文件所有者/文件所在组被修改的时间戳
<?php
//第一种方式获取文件信息
//打开文件
$file_path = "test.txt"; //fopen函数返回一个指向文件的指针
if ($fp = fopen($file_path,"r")){ //fstat函数返回文件指针的文件统计信息
$file_Info = fstat($fp); echo "<pre>";
print_r($file_Info); echo "</pre>"; //获取文件大小等
echo "<br>文件大小:".$file_Info['size']; //如果会出现警告,可能是没有在php.ini中设置时区
//修改date.timezone = UTC后重启即可
echo "<br>文件上次修改时间:".date("Y-m-d H:i:s",$file_Info['mtime']); echo "<br>文件上次访问时间:".date("Y-m-d H:i:s",$file_Info['atime']); echo "<br>文件上次change时间:".date("Y-m-d H:i:s",$file_Info['ctime']);
}else{ echo "打开文件失败";
} //关闭文件指针
fclose($fp); //第二种方式获取文件信息
echo "<br/>".filesize($file_path); echo "<br/>".fileatime($file_path); echo "<br/>".filectime($file_path); echo "<br/>".filemtime($file_path);?><?php
$file_path = "test.txt"; /**************第一种读取方式*******************/
//判断文件是否存在/* if(file_exists($file_path)){
//打开文件
$fp = fopen($file_path,"a+");
//读内容,并输入
$con = fread($fp,filesize($file_path));
echo "文件的内容是:<br/>";
//在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符
$con = str_replace("\r\n","<br/>",$con);
echo $con;
}else{
echo "文件不存在";
}
//关闭文件
fclose($fp);
*/
/**************第二种读取方式*******************//* $con = file_get_contents($file_path);//连关闭的动作都不用写
//在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符
$con = str_replace("\r\n","<br/>",$con);
echo $con;
*/
/**************第三种读取方式*******************/
$fp = fopen($file_path,"a+"); //设置一次读取1024个字节
$buffer = 1024; $str = ""; //一边读,一边判断是否到文件结束位置
while(!feof($fp)){ //读内容
$str.= fread($fp,$buffer);
} //在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符
$con = str_replace("\r\n","<br/>",$str); echo $str; //关闭文件
fclose($fp);连接数据库的时候,可以把用户名,密码等配置到一个外部文件
db.ini
host=127.0.0.1user=adminpassword=123456
readIni.php
<?php
$arr = parse_ini_file("db.ini");
print_r($arr); echo "<br/>"; echo $arr['host']; echo "<br/>"; echo $arr['user']; echo "<br/>";
echo $arr['password'];?><?php
$file_path="C:/test.txt";//路径名的斜杆必须是/
//传统方式写入/* if(file_exists($file_path)){
//如果是追加内容,则使用a+的方式打开
$fp = fopen($file_path,"a+");
$con = "\r\n这是追加的内容";
for($i=0;$i<10;$i++){
fwrite($fp,$con);
}
}else{
echo "执行失败";
}
echo "添加成功";
//关闭文件
fclose($fp);
*/
//第二种方式写入
$con = "\r\nhello";
file_put_contents($file_path,$con,FILE_APPEND);//底层封装了fopen(),fwrite()和fclose()
//如果用第二种方式来循环添加内容的话,效率就没有传统的方式写入高了
//因为第二种方式总是需要走三步执行一次,如果一定要用第二种方式写入的话,
//应该先把字符串拼接完再调用file_put_contents函数写入,效率才高
echo "添加成功";?><?php
//路径不要带中文,否则会提示失败信息
$file_path = "E:\\phpAll\\Apache24\\htdocs\\file\\jay.jpg"; //路径名转码
$file_target = iconv("utf-8","gb2312","d:\\周杰伦.jpg"); //copy(数据源,目标地址);
if(!copy($file_path,$file_target)){ echo "error"; return;
} echo "success";?><?php
$file_path = "d:/hoki_test/a/b"; //创建一个文件夹 /* if(!is_dir($file_path) && mkdir($file_path)){
echo "create success";
return;
}
echo "create failed";
*/
//创建多个文件夹(递归创建) /* if(!is_dir($file_path) && mkdir($file_path,0777,true)){
//777:可读可写可执行;
echo "create success";
return;
}
echo "create failed";
*/
//删除一个文件夹(如果是多级的就删除最外面的那个)
//如果文件夹下有文件,或者目录,均不能删除成功/* if(is_dir($file_path) && rmdir($file_path)){
echo "delete success";
return;
}
echo "delete failed";
*/
//在指定现有目录下创建一个文件并写入内容/* $file_name = "/test.txt";
$fp = fopen($file_path.$file_name,"w+");
$content = "hello world";
fwrite($fp,$content);
fclose($fp);
echo "create file success";
*/
//删除文件
$file_name = "/test.txt"; if (is_file($file_path.$file_name)){ if (unlink($file_path.$file_name)){ echo "delete file success"; return;
} echo "delete file failed"; return;
} echo "file none found";?><!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传案例</title>
</head>
<body>
<h1>上传文件</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
请选择文件:
<input type="file" name="file" />
<input type="submit" value="上传" />
</form>
</body>
</html><?php
//取文件信息
$arr = $_FILES["file"]; //var_dump($arr);
//加限制条件
//1.文件类型
//2.文件大小
//3.保存的文件名不重复
if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png" ) && $arr["size"]<10241000 )
{ //临时文件的路径
$arr["tmp_name"]; //上传的文件存放的位置
//避免文件重复:
//1.加时间戳.time()加用户名.$uid或者加.date('YmdHis')
//2.类似网盘,使用文件夹来防止重复
$filename = "./images/".date('YmdHis').$arr["name"]; //保存之前判断该文件是否存在
if(file_exists($filename))
{ echo "该文件已存在";
} else
{ //中文名的文件出现问题,所以需要转换编码格式
$filename = iconv("UTF-8","gb2312",$filename); //移动临时文件到上传的文件存放的位置(核心代码)
//括号里:1.临时文件的路径, 2.存放的路径
move_uploaded_file($arr["tmp_name"],$filename);
}
}else{ echo "上传的文件大小或类型不符";
}?>像素是密度单位,不是长度单位
在php.ini中启动gd库(extension=php_gd2.dll)
创建画布
绘制需要的各种图形
输出图像到网页,也可另存
销毁图片(服务器端的),释放内存
GIF:压缩率高,但是只能显示256色,会造成颜色丢失,可以显示动画
JPG/JPEG:压缩率高(有损压缩),可以用较小的文件来显示,网页上用的比较多
png:该格式综合了GIF和JPG的优势,缺点是不能显示动画
<?php
//1. 创建画布,默认背景是黑色的
$im = imagecreatetruecolor(800,600); //修改背景颜色
$white = imagecolorallocate($im,255, 255, 255);
imagefill($im,0,0,$white); //2. 绘制需要的各种图形
//创建三个颜色
$red = imagecolorallocate($im,255, 29, 0); $blue = imagecolorallocate($im,6, 81, 244); $gary = imagecolorallocate($im,178, 174, 170); //3. 输出图像到网页,也可另存
header("content-type: image/png");
imagepng($im); //4. 销毁图片(服务器端的),释放内存
imagedestroy($im);?><?php// 1. 创建画布,默认背景是黑色的
$im = imagecreatetruecolor(800,600);// 2. 绘制需要的各种图形
//创建一个颜色
$red = imagecolorallocate($im,255,0,0); //ellipse:椭圆
imageellipse($im,20,20,20,20,$red); //直线
imageline($im,0,0,400,300,$red); //矩形
imagerectangle($im,150,150,40,50,$red); //填充矩形
imagefilledrectangle($im,0,0,40,50,$red);//PHP设计者设计函数名时设计得不好
//弧线(顺时针)
imagearc($im,100,100,50,50,0,180,$red); //扇形
imagefilledarc($im,100,100,50,50,180,270,$red,IMG_ARC_PIE);
imagefilledarc($im,100,100,50,50,270,360,$red,IMG_ARC_PIE); //拷贝图像到画布
//加载源图片/* $srcImage = imagecreatefromjpeg("cat.jpg");
//获取图片的宽和高存于数组中
$srcImageInfo = getimagesize("cat.jpg");
//拷贝源图片到目标画布
imagecopy($im,$srcImage,0,10,200,0,$srcImageInfo[0],$srcImageInfo[1]);
*/
//字符串
$str = "hello world,中文";// imagestring($im,10,400,200,$str,$red);//中文显示乱码
//在字体库C:\Windows\Fonts中找中文字体// imagettftext($im,10,0,50,50,$red,"STFANGSO.TTF",$str);// 3. 输出图像到网页,也可另存
header("content-type: image/png");
imagepng($im);// 4. 销毁图片(服务器端的),释放内存
imagedestroy($im);?>可封装为一个函数,方便使用
<?php
//1. 创建画布,默认背景是黑色的
$im = imagecreatetruecolor(800,600); //修改背景颜色
$white = imagecolorallocate($im,255, 255, 255);
imagefill($im,0,0,$white); //2. 画出扇形
//创建三个颜色
$red = imagecolorallocate($im,255, 29, 0); $darkred = imagecolorallocate($im,144, 0, 0); $blue = imagecolorallocate($im,6, 81, 244); $darkblue = imagecolorallocate($im,0, 0, 80); $gary = imagecolorallocate($im,178, 174, 170); $darkgary = imagecolorallocate($im,144, 144, 144); //立体扇形其实就是多个扇形的叠加
for ($i=200;$i>=150;$i--){
imagefilledarc($im,350,$i,200,150,0,35,$darkblue,IMG_ARC_PIE);
imagefilledarc($im,350,$i,200,150,35,75,$darkgary,IMG_ARC_PIE);
imagefilledarc($im,350,$i,200,150,75,360,$darkred,IMG_ARC_PIE);
} //在上面加个盖
imagefilledarc($im,350,150,200,150,0,35,$blue,IMG_ARC_PIE);
imagefilledarc($im,350,150,200,150,35,75,$gary,IMG_ARC_PIE);
imagefilledarc($im,350,150,200,150,75,360,$red,IMG_ARC_PIE); //3. 输出图像到网页,也可另存
header("content-type: image/png");
imagepng($im); //4. 销毁图片(服务器端的),释放内存
imagedestroy($im);?><?php
echo "<img src=yanzhengma.php>";?><?php
function random($len){
$srcstr = "ABCDEFGHIJKLMNONPQRSTUVWXYZ0123456789";
mt_rand(); $strs = ""; for($i=0;$i<$len;$i++){ $strs.=$srcstr[mt_rand(0,35)];
} return strtoupper($strs);
} $str = random(4);//随机生成的字符串
$width = 50; $height = 25;
@header("Content-Type: image/png"); $im = imagecreate($width,$height); $back = imagecolorallocate($im,0xFF,0xFF,0xFF); //模糊点颜色
$pix = imagecolorallocate($im,187,230,247); //字体色
$font = imagecolorallocate($im,41,163,238); //绘制模糊作用的点
mt_srand(); for($i=0;$i<1000;$i++){
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im,5,7,5,$str,$font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);?>相关推荐:
PHPTree——php快速生成无限级分类_php技巧
php中tree类的使用方法
以上就是$PHP_THREE的详细内容,更多请关注Gxl网其它相关文章!