-基础笔记-
慕课网 PHP 基础语法巩固(2) 课堂笔记,包含会话,文件,数据库操作等细碎的摘要
会话控制
session
HTTP 是无状态协议,HTTP 不知道请求来自哪个客户端,Session 提供在 PHP 脚本中定义全局变量的方法,使全局变量在同一个 Session 中对所有的 PHP 脚本文件内都有效,解决 HTTP 断链接的问题
Session 可以减轻服务器压力,缺点在于每次请求会传输大量重复的信息
Session 允许通过将数据存储在 HTTP 服务器中,使得用户在回话过程中保持该数据
session_start(); $_SESSION['id'] = 'info'
   | 
 
每一次请求有 SessionID 区分不同的信息,SessionID 存储到 cookie 中,Session 数据通过变量$_SESSION存储到 Session 文件中
SessionID:
- PHP 回话启用
 
- 检查 SessionID,如果没有启动新会话 + SessionID
 
- 一直使用的 SessionID 相同,默认会话在活动,超过一定时间则视为过期
 
- 默认情况下 SessionID 存在 Cookie 中,也可以存在 URL 中
 
Session 函数:
bool session_start()   string session_id(string $id)   string session_name(string $name)   bool session_destroy(void) 
  session.auto_start(bool)   session.name(string)   session.save_handler(string)   session.save_path(string)   session.gc_maxlifetime(int)   session.gc_probability(int)  
   | 
 
- 必须在 session_start()函数之前调用 session_name()函数
 
- 垃圾回收进程概率计算:gc_probability/gc_divisor
 
cookie
cookie 是服务器发送到用户浏览器上并保存在浏览器里的数据,会在浏览器下一次请求时一起发送到服务器上
session 是存储在服务器的数据
cookie 是存储在客户端的数据
cookie 的用途:
会话状态管理,个性化设置,浏览器行为跟踪
bool setcookie(string $name,string $value,[$expire,$path,$domain])  
   | 
 
文件操作
API
filetype($filename);   filesize($filename);   filectime($filename);   filemtime($filename);   fileatime($filename);  
 
  date_default_timezone_set('PRC'); date('Y-m-d H:i:s',filectime($filename));
 
  is_readable($filename);   is_writable($filename)/is_writeable($filename);   is_executable($filename);   is_file($filename);  
   | 
 
pathinfo($filename, $options);  
 
 
  dirname($path);   basename($filename,$suffix);   file_exists($filename);  
   | 
 
touch($filename,$time,$atime);   
 
 
 
  unlink($filename,$context);   rename($oldname,$newname,$path);   copy($filename);  
   | 
 
$handle = fopen($filename, r|r+|w|...)   fread($handle, $size)  fwrite($handle, 'info',$size)|fput()  
  ftell($handle)   fseek($handle,$size)   fpassthru()   rewind($handle)  ftruncate($handle,$size)  
  fgetc($handle)   fgets($handle)   fgetss($handle)   fgetcsv()   fputcsv()   file_get_contents()   file_put_contents()   file()   readfile()  
  feof($handle)   fclose()  
  parse_ini_file($filename)   parse_ini_string($ini)   highlight_string($str)   highlight_file()  
   | 
 
‘r’:只读方式打开,将文件指针指向文件头。
‘r+’:读写方式打开,将文件指针指向文件头。
‘w’:写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’:读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’:写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’:读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘x’:创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
‘x+’:创建并以读写方式打开,其他的行为和 ‘x’ 一样。
函数和类的封装
- 创建文件
- 可以用 touch()创建,也可以直接 file_get_contents()
 
 
function create_file(string $filename){      if(file_exists($filename)){     return false;   }      if(!file_exists(dirname($filename))){          mkdir(dirname($filename),0777,true);   }               if(file_put_contents($filename,'')!==false){     return true;   }   return false; }
  | 
 
function del_file(string $filename){      if(!file_exists($filename)||!is_writable($filename)){     return false;   }   if(unlink($filename)){     return true;   }   return false; }
  | 
 
function copy_file(string $filename,string $dest){      if(!is_dir($dest)){     mkdir($dest,0777,true);     }   $destName=$dest.DIRECTORY_SEPARATOR.basename($filename);      if(file_exists($destName)){     return false;   }      if(copy($filename,$destName)){     return true;   }   return false; }
  | 
 
function rename_file(string $oldName,string $newName){      if(!is_file($oldName)){     return false;   }      $path=dirname($oldName);   $destName=$path.DIRECTORY_SEPARATOR.$newName;      if(is_file($destName)){     return false;   }   if(rename($oldName,$newName)){     return true;   }   return false; }
  | 
 
function cut_file(string $filename,string $dest){      if(!is_file($filename)){     return false;   }   if(!is_dir($dest)){     mkdir($dest,0777,true);   }   $destName=$dest.DIRECTORY_SEPARATOR.basename($filename);   if(is_file($destName)){     return false;   }   if(rename($filename,$destName)){     return true;   }   return false; }
  | 
 
function get_file_info(string $filename){      if(!is_file($filename)||!is_readable($filename)){     return false;   }   return [     'atime'=>date("Y-m-d H:i:s",fileatime($filename)),     'mtime'=>date("Y-m-d H:i:s",filemtime($filename)),     'ctime'=>date("Y-m-d H:i:s",filectime($filename)),     'size'=>trans_byte(filesize($filename)),     'type'=>filetype($filename)   ]; }
  | 
 
function trans_byte(int $byte,int $precision=2){   $kb=1024;   $mb=1024*$kb;   $gb=1024*$mb;   $tb=1024*$gb;   if($byte<$kb){     return $byte.'B';   }elseif($byte<$mb){     return round($byte/$kb,$precision).'KB';   }elseif($byte<$gb){     return round($byte/$mb,$precision).'MB';   }elseif($byte<$tb){     return round($byte/$gb,$precision).'GB';   }else{     return round($byte/$tb,$precision).'TB';   } }
  | 
 
function read_file(string $filename){      if(is_file($filename) && is_readable($filename)){     return file_get_contents($filename);   }   return false; }
  | 
 
function read_file_array(string $filename,bool $skip_empty_lines=false){      if(is_file($filename)&&is_readable($filename)){     if($skip_empty_lines){              return file($filename,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);     }else{       return file($filename);     }   }   return false; }
  | 
 
function write_file(string $filename,$data){   $dirname=dirname($filename);      if(!file_exists($dirname)){     mkdir($dirname,0777,true);   }      if(is_array($data)||is_object($data)){          $data=serialize($data);   }      if(file_put_contents($filename,$data)!==false){     return true;   }else{     return false;   } }
  | 
 
function write_file1(string $filename,$data,bool $clearFlag=false){   $dirname=dirname($filename);      if(!file_exists($dirname)){     mkdir($dirname,0777,true);   }      if(is_file($filename)&&is_readable($filename)){          if(filesize($filename)>0){       $srcData=file_get_contents($filename);     }   }
       if(is_array($data)||is_object($data)){          $data=serialize($data);   }      $data=$srcData.$data;      if(file_put_contents($filename,$data)!==false){     return true;   }else{     return false;   } }
  | 
 
function truncate_file(string $filename,int $length){      if(is_file($filename)&&is_writable($filename)){     $handle=fopen($filename,'r+');     $length=$length<0?0:$length;     ftruncate($handle,$length);     fclose($handle);     return true;   }   return false; }
  | 
 
- 下载文件
- 在 html 里添加下载链接
 
- 建立
down_file()函数 
- 建立 php 文件进行下载
 
 
<a href="download.php?filename=download.zip">file_name.zip</a>
   | 
 
 function down_file(string $filename,array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip')){      if(!is_file($filename)||!is_readable($filename)){     return false;   }      $ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));   if(!in_array($ext,$allowDownExt)){     return false;   }         header('Content-Type:application/octet-stream');
       header('Accept-Ranges: bytes');
       header('Accept-Length: '.filesize($filename));
       header('Content-Disposition: attachment;filename=king_'.basename($filename));
          
       $read_buffer=1024;   $sum_buffer=0;   $handle=fopen($filename,'rb');   while(!feof($handle) && $sum_buffer<$filesize){     echo fread($handle,$read_buffer);     $sum_buffer+=$read_buffer;   }   fclose($handle);   exit; }
 
  | 
 
$filename=$_GET['filename']; down_file($filename);
   | 
 
function upload_file(array $fileInfo,string $uploadPath='./uploads',bool $imageFlag=true,array $allowExt=array('jpeg','jpg','png','gif'),int $maxSize=2097152){
    define('UPLOAD_ERRS',[     'upload_max_filesize'=>'超过了PHP配置文件中upload_max_filesize选项的值',     'form_max_size'=>'超过了表单MAX_FILE_SIZE选项的值',     'upload_file_partial'=>'文件部分被上传',     'no_upload_file_select'=>'没有选择上传文件',     'upload_system_error'=>'系统错误',     'no_allow_ext'=>'非法文件类型',     'exceed_max_size'=>'超出允许上传的最大值',     'not_true_image'=>'文件不是真实图片',     'not_http_post'=>'文件不是通过HTTP POST方式上传上来的',     'move_error'=>'文件移动失败'   ]);
       if($fileInfo['error']===UPLOAD_ERR_OK){          $ext=strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));     if(!in_array($ext,$allowExt)){       echo  UPLOAD_ERRS['no_allow_ext'];       return false;     }          if($fileInfo['size']>$maxSize){       echo UPLOAD_ERRS['exceed_max_size'];       return false;     }          if($imageFlag){       if(@!getimagesize($fileInfo['tmp_name'])){         echo UPLOAD_ERRS['not_true_image'];         return false;       }     }          if(!is_uploaded_file($fileInfo['tmp_name'])){       return UPLOAD_ERRS['not_http_post'];     }          if(!is_dir($uploadPath)){       mkdir($uploadPath,0777,true);     }          $uniName=md5(uniqid(microtime(true),true)).'.'.$ext;     $dest=$uploadPath.DIRECTORY_SEPARATOR.$uniName;
           if(@!move_uploaded_file($fileInfo['tmp_name'],$dest)){       echo UPLOAD_ERRS['move_error'];       return false;     }     echo '文件上传成功';     return $dest;   }else{     switch($fileInfo['error']){       case 1:              $mes=UPLOAD_ERRS['upload_max_filesize'];       break;       case 2:       $mes=UPLOAD_ERRS['form_max_size'];       break;       case 3:       $mes=UPLAOD_ERRS['upload_file_partial'];       break;       case 4:       $mes=UPLOAD_ERRS['no_upload_file_select'];       break;       case 6:       case 7:       case 8:       $mes=UPLAOD_ERRS['upload_system_error'];       break;     }     echo $mes;     return false;   } }
  | 
 
- 压缩单个文件
ZipArchive()一个用 Zip 压缩的文件存档类 
- 压缩包要打开后将文件添加到压缩包中
 
 
function zip_file(string $filename){   if(!is_file($filename)){     return false;   }   $zip=new ZipArchive();   $zipName=basename($filename).'.zip';      if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){          if($zip->addFile($filename)){       @unlink($filename);     }     $zip->close();     return true;   }else{     return false;   } }
  | 
 
function zip_files(string $zipName,...$files){      $zipExt=strtolower(pathinfo($zipName,PATHINFO_EXTENSION));   if('zip'!==$zipExt){     return false;   }   $zip=new ZipArchive();   if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){     foreach($files as $file){       if(is_file($file)){         $zip->addFile($file);       }     }     $zip->close();     return true;   }else{     return false;   } }
  | 
 
function unzip_file(string $zipName,string $dest){      if(!is_file($zipName)){     return false;   }      if(!is_dir($dest)){     mkdir($dest,0777,true);   }   $zip=new ZipArchive();   if($zip->open($zipName)){     $zip->extractTo($dest);     $zip->close();     return true;   }else{     return false;   } }
  | 
 
函数和类的封装源码: code/lib/file.func.php
MySQL
具体参考 PHP & MySQL learning notes (1)->3.mySQL
PHP 操作 MySQL
- MySQL:非永久链接,性能低,PHP5.5 之后废弃
 
- MySQLi:永久链接,减轻了服务器压力
 
- PDO:实现 MySQLi 常用功能,支持大部分数据库
 
连接数据库:mysql -uroot -p password
选择数据库:use db
设置字符集:set names utf8
mysql_select_db("DATABASE NAME", $con)
  mysql_connect($server,$username,$password)   mysql_select_db($database_name)   mysql_set_charset($charset)  
  mysql_query($query)  
  mysql_query($query)  
  | 
 
代码示例
header('content-type:text/html;charset=utf-8');
  $link = @mysql_connect('localhost','root','') or die('数据库连接失败!');
  mysql_select_db('test') or die('选择的数据库不存在!');
  mysql_set_charset('utf8');
 
  $result = mysql_query("INSERT INTO users VALUES(NULL ,'李四',20)");
 
 
  $result = mysql_query("UPDATE users SET money=25 where id=3");
 
 
  $result = mysql_query("DELETE FROM users where id=3");
 
 
  $result = mysql_query("DROP TABLE test");
 
 
  $result = mysql_query("SELECT * FROM users");
 
  while($line = mysql_fetch_array($result,MYSQL_ASSOC)){     $data[] = $line; } var_dump($data);
 
 
 
 
 
 
 
  mysql_close($link);
  | 
 
MySQLi 操作
$connect = mysqli_connect('host','username','password'.'database');   $result = mysqli_query($connect,$sql);   mysqli_fetch_all($result)  
  | 
 
错误及常用命令
- Parse error(解析错误): syntax error(语法错误), unexpected ‘<’, expecting end of file
 
- Notice(通知): Undefined variable(未定义的变量): sdkljflskdjflksdjflksdjfklj
 
- Catchable fatal(致命) error: Object of class stdClass could not be converted to string
 
- Warning(警告): settype(): Invalid(非法) type
</br> 
header('content-type:text/html;charset=utf-8'); date_defalut_timezone_set('PRC');
  @ 
  echo($var,....)   var_dump($var)   print_r($var)   unset($var,...)   time()  
 
  is_[int|float|double|bool...]($var)   isset()   function_exists()   file_exists()   $var = file_get_contents($filename)  
  serialize()   unserialize()   setcookie(string $name, string $value, int $expire = 0, string $path = "", string $domain = "")   $var = strip_tags()  
  exit()|die();  
  | 
 
相关链接:
mysql 笔记
PHP & MySQL learning notes (2)
PHP & MySQL learning notes (1)