[PHP基础]总结2

读取文件内容

将全部文件全部读取到一个字符串中
$content=file_get_contents('./test.txt');
$content=file_get_contents('./test.txt',null,null,100,500);//100读取内容的开始点 500长度

fgets

从文件指针中读取一行

freads

读取指定长度的字符串

$fp=fopen('./text.txt','rb');//rb只读方式打开一个二进制文件
while(!feof($fp)){
    echo fgets($fp);//读取一行
}
fclose($fp);
$fp=fpen('./text.txt','rb');
$contents=' ';
while(!feof($fp)){//测试文件指针是否到文件结束的位置
    $contents.=fread($fp,4096);//一次读取4096个字符
}
fclose($fp);//关闭文件指针 避免文件句柄被占用

文件是否存在

$filename='./test.txt';
if(file_exists($filename)){
    echo file_get_contents($filename);
}

file_exists

文件、目录是否存在

is_file

给定的路径是都是一个文件

$filename='./test.txt';
if(is_file($filename)){
    echo file_get_contents($filename);
}

is_writeable($filename)

是否可读

is_readable($filename)

是否可写

文件元属性

fileowner

获取文件所有者

filectime

创建时间

filemtime

修改时间

fileatime

访问时间

$mtime=filemtime($filename);
echo '修改时间: '.date('Y-m-d H:i:s',filemtime($filename));

filesize($filename)

取得文件大小

$size=filesize($filename);//返回字节数

time()

获取时间戳

date()

取得当前日期

date("Y-m-d");//2014-03-20
date("Y-m-d",'1396193923');//2014-03-30

strtotime

获取某个日期/时间的时间戳

strtotime('2014-04-29');//1398700800
strtotime('2014-04-29 00:00:01');//1398700801
date_default_timezone_set('Asia/shanghai');//设置默认时区是中国

strtotime(要解析的时间字符串,计算返回值的时间[可选])

返回:时间戳/FALSE

strtotime("now")//time()
strtotime("+1 seconds");
strtotime("+1 day");
strtotime("+1 week");
strtotime("+1 week 3 days 7hours 5seconds");

gmdate

格式化一个GMT的日期和时间,返回的是格林威治标准时(GMT)
中国时区:东八区(GMT+8)

date('Y-m-d H:i:s',time());//2014-05-01 15:15:22
gmdate('Y-m-d H:i:s',time());//2014-05-01 07:15:22

PHP图形操作之GD库简介

GD

Graphic Device,PHP的GD库用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或直接生成信的图片。
GD库常用语图片加水印,验证码生成等方法

创建真彩色的空白图片

$img=imagecreatetruecolor(100,100);

画笔

$red=imagecolorallocate($img,0xFF,0x00,0x00);//R,G,B

线条绘制

imageline($img,0,0,100,100,$red);//0,0起始坐标 100,100终点坐标

通过header与imagepng进行图像输出

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

释放图片占用的内存

imagedestroy(#img);

图像保存到文件中

imagepng($img,'img.png');

绘制文字

<?php
    $img=imagecreatetruecolor(100,100);
    $red=imagecolorallocate($img,0xFF,0x00,0x00,0x00);
    imagestring($img,5,0,0,"hello world",$red);//5
    header("content-type:image/png");
    imagepng($img);
    imagedestroy($img);
?>

输出图像文件

$filename='img.png';
imagepng(#img,$filename);

$filename='img.jpg';
imagejpeg($img,$filename,80);//80质量参数

生成图像二维码

<?php
    $img=imagecreatetruecolor(100,400);
    $black=imagecolorallocate($img,0x00,0x00,0x00);
    $green=imagecolorallocate($img,0x00,0xFF,0x00);
    $white=imagecolorallocate($img,0xFF,0xFF,0xFF);
    imagefill($img,0,0,$white);//image线条的绘制
    $color="";
    for($i=0;$i<4;$i++){
        $code.=rand(0,9);//$code.=dechex(rand(0,15));
    }
    imagestring($img,5,10,10,$code,$black);
    //加入噪点干扰
    for($i=0;$i<50;$i++){
        imagesetpixel($img,rand(0,100),rand(0,100),$black);
        imagesetpixel($img,rand(0,100),rand(0,100),$green);
    }
    header("content-type:image/png");
    imagepng($img);
    imagedestroy($img);
  ?>

从图片文件创建图片

$im=imagecreatefromjpeg($filename);
$logo=imagecreatefromjpeg($filename);
imagecopy($im,$logo,15,15,0,0,$width,$height);
imagejpeg($im,$filename);

加水印

<?php
    $url="test.jpg";
    $content=file_get_contents($url);
    $filename='tmp.jpg';
    file_put_contents($filename,$content);

    #url='test2.png';
    file_put_contents('logo.png',file_get_contents($url));
    //开始添加水印
    $imagecreatefromjpeg($filename);
    $logo=imagecreatefrompng('logo.png');
    $size=getimagesize('logo.png');
    imagecopy($im,$logo,15,15,0,0,$size[0],$size[1]);
    //15目标X 15目标y $size[0]loo宽 $size[2]logo高
    header("content-type:image/png");
    imagepng($im);
?>

异常处理

try{

}catch(Exception $e){
    //$e->getMessage();
}
throw new Exception("....");

Exception的属性与方法

message

异常消息内容

code

异常代码

file

抛出异常的文件名

line

抛出异常在改文件的行数

方法

getTrace 获取异常追踪信息

getTraceAsString 获取异常追踪信息的字符串

getMessage 获取出错信息

class MyException extends Exception{
    function getInfo(){
        return '自定义错误信息';
    }
}

try{
      ......throw new MyException('error');
}catch(Exception $e){
    echo $e->getInfo();
    echo $e->getMessage();
}

Cookie

setcookie

name(cookie名)

可以通过$COOKIE['name']进行访问

value(cookie的值)

expire(过期时间)

Unix时间戳格式,默认为0,表示浏览器关闭即失效

path(有效路径)

如果路径为'/',则整个网站都有效

domain(有效域)

默认整个域名都有效,如果设置了‘www.imooc.com’,则只有在www子域中有效

$value='test';
setCookie("TestCookie",$value);
setCookie("TestCookie",$value,time()+3600);//有效期一小时
setCookie("TestCookie",$value,time()+3600,"path","imooc.com");

Cookie是通过标头设置的

所以可用header方法

header("Set-Cookie:cookie_name=value");
<?php
    $value=time();
    setcookie('test',$value);
    if(isset($_COOKIE['test']){
        echo 'success';
    }
?>

cookie的删除

setcookie('test',' ',time()-1);

header("Set-Cookie:test=13393832059;expires=".gmdate('D,d M Y H :i:s \G\M\T'),time()-1);

这里用gmdate,用来生成格林威治标准时间,以排除时差的影响

cookie的有效路径

setcookie('test',time(),0,'/path');

使test在/path以及子路径/path/abc下都有效,但是在根目录就读取不到test的cookie值。

session与cookie异同

cookie相对不是太安全,容易被盗用导致cookie欺骗,单个cookie的值最大只能存储4K。
每次请求都要进行网络传输,占用带宽。

session是将用户的会话数据存储在服务端,没有大小限制,通过session id进行用户识别,PHP默认情况下session id是通过cookie来保存的。session依赖于cookie,但这并不绝对。session id也可以通过参数来实现,只要将session id传递到服务端进行识别的机制都可以使用session

<?php
    //开始使用session  
    session_start();
    //设置一个session
    $SESSION['test']=time();
    //显示当前的session_id
    echo "session_id:".session_id();
    echo "<br>";
    //读取session的值
    echo $_SESSION['test'];
    //销毁一个session
    unset($_SESSION[‘test’]);
    echo "<br>";
    var_dump($_SESSION);
?>
session_id:90ik.....
        148946047
         array(0){
         }
session_start();
$_SESSION['test']=time();
var_dump($_SESSION);\
array(1){
    ["test"]=>
      int(1489465540)
}

session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

session_start();
$_SESSION['ary']=array('name'=>'jobs');
$_SESSION['obj']=new stdClass();
var_dump(#_SESSION);

默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他访问无法执行而等待。可以采用缓存或数据库形式存储来解决这个问题。

删除某个session的值:unset

session_start();
$_SESSION['name']='jobs';
unset($_SESSION['name']);
echo $_SESSION['name'];//提示name不存在

session_destroy:

删除所有数据,但session_id仍存在

session_start();
$_SESSION[‘name’]='jobs';
$_SESSION['time']=time();
session_destroy();

session_destroy不会立即销毁值,只有下次访问时,$_SESSION才为空
如果要立即销毁$_SESSION,使用unset

sesstion_start();
$_SESSION[‘name’]='jobs';
$_SESSION['name']=time();
unset($_SESSION);
session_destroy();
var_dump($_SESSION);//此时已为空

session存储登录信息

$_SESSION[‘uid’]=$userinfo['uid'];
$_SESSION['userinfo']=$userinfo;

session与cookie

session可存取多种数据类型
cookie只支持字符串类型
cookie对安全性较高的数据需格式化和加密
session存储在服务端安全性较高

<?php
session_start();
  $userinfo=array(
      'uid'=>10000,
      'name'=>'Spark',
      'email'=>'spark@imooc.com',
      'sex'=>'man',
      'age'=>'18'
);
header("content-type:text/html;charset=utf-8");
$_SESSION['uid']=$userinfo['uid'];
$_SESSION['name']=$userinfo['name'];
$_SESSION['userinfo']=$userinfo;

$securekey='imooc';
$str=serialize($userinfo);
$str=base64_encode(mcrypt_encrypt(MCRYPT_RIJNDEL_256,md5($securekey),$str,MCRYPT_MODE_ECB));
//用户信息加密后,将加密后的用户数据存储到cookie中
setcookie('userinfo',$str);
//当需要使用时进行解密
$str=mcrypt_decrypt(MCRYPT_RIJNDEAL_256,md5($securekey),base64_encode($str),MCRYPT_MODE_ECB);
$uinfo=unserialize($str);
echo "解密后的用户信息:<br>";
print_r($uinfo);
?>
解密后的用户信息
aray
(
    [uid]=>10000
    [name]
     .......
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 2,112评论 2 38
  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 616评论 0 5
  • 01 我最喜欢的歌手陈奕迅有一首歌《于心有愧》,林夕填的词。歌词中透露着一个人错失了一个人,最终伤害到她没想到这一...
    Hota生活阅读 617评论 0 1
  • 我和你们生活在一起 但我又和你们不太一样 你们朋友圈里的吐槽都是 读了四年大学 却从城里考进了村里 我却是从一个村...
    仅此一家的胡太太阅读 212评论 0 0