写一个博客所需的知识
一 lib(library常用代码库)文件夹下的代码
4个init.php初始,config.php配置,func.php函数,mysql.php数据库;
init.php代码:<?php
header('Content-type:text/html;charset=utf8');//header — 发送原生 HTTP 头,输出格式。
define('ROOT' , dirname(__DIR__));//define()定义常量;__DIR__是魔术常量,表示文件所在的目录
php -- 取路径:getcwd()、__DIR__、__FILE__ 的区别
G:\demo\test01\blog\lib\init.php
getcwd() :取得当前工作目录。 G:\demo\test01\blog\lib
__DIR__ :当前内容写在哪个文件里就显示这个文件的目录 G:\demo\test01\blog\lib ( \init.php)
__FILE__ : 当前内容所在文件的目录+/文件名 G:\demo\test01\blog\lib\init.php
;dirname()给出一个包含有指向一个文件的全路径的字符串,
本函数返回去掉文件名后的目录名如echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc;PHP_EOL是php中的换行符,随机应变unix系列用 /n
windows系列用 /r/n
mac用 /r换行;
/*echo __FILE__ , '<br>';
echo __LINE__;*/
require(ROOT . '/lib/mysql.php');
require(ROOT . '/lib/func.php');
//require,include 语句包含并运行指定文件。
$_GET = _addslashes($_GET);
$_POST = _addslashes($_POST);
$_COOKIE = _addslashes($_COOKIE);
//
/**
* 使用反斜线 转义字符串
* @param arr 待转义的数组 //@param指明一个函数的参数
* @return arr 被转义后的数组 //@return指明一个方法或函数的返回值
*/
function _addslashes($arr) {
foreach($arr as $k=>$v) {
if(is_string($v)) {
$arr[$k] = addslashes($v);
}else if(is_array($v)) {
$arr[$k] = _addslashes($v);
}
}
return $arr;
}
?>
config.php配置代码<?php
return array(
'host'=>'localhost',
'user'=>'root',
'pwd'=>'',
'db'=>'blog',
'charset'=>'utf8',
'salt'=>'Lsd":Adfqef]'
);
?>
func.php代码<?php
/**
* 成功的提示信息
*/
function succ($res) {
$result = 'succ';
require(ROOT . '/view/admin/info.html');
exit();
}
/**
* 失败返回的报错信息
*/
function error($res) {
$result = 'fail';
require(ROOT . '/view/admin/info.html');
exit();
}
/**
* 获取来访者的真实IP
*
*/
function getRealIp() {
static $realip = null;
if($realip !== null) {
return $realip;
}
if(getenv('REMOTE_ADDR')) {
$realip = getenv('REMOTE_ADDR');
} else if(getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else if (getenv('HTTP_X_FROWARD_FOR')) {
$realip = getenv('HTTP_X_FROWARD_FOR');
}
return $realip;
}
/**
* 生成分页代码
* @param int $num 文章总数
* @param int $curr 当前显示的页码数 $curr-2 $curr-1 $curr $curr+1 $curr+2
* @param int $cnt 每页显示的条数
*/
function getPage($num,$curr,$cnt) {
//最大的页码数
$max = ceil($num/$cnt);
//最左侧页码
$left = max(1 , $curr-2);
//最右侧页码
$right = min($left+4 , $max);
$left = max(1 , $right-4);
/* (1 [2] 3 4 5) 6 7 8 9
1 2 (3 4 [5] 6 7) 8 9
1 2 3 4 (5 6 7 [8] 9)*/
$page = array();
for($i=$left;$i<=$right;$i++) {
$_GET['page'] = $i;
$page[$i] = http_build_query($_GET);
}
return $page;
}
//print_r(getPage(100,5,10));
/**
* 生成随机字符串
* @param int $num 生成的随机字符串的个数
* @return str 生成的随机字符串
*/
function randStr($num=6) {
$str = str_shuffle('abcedfghjkmnpqrstuvwxyzABCEDFGHJKMNPQRSTUVWXYZ23456789');
return substr($str, 0 , $num);
}
//echo randStr();
/**
* 创建目录 ROOT.'/upload/2015/01/25/qwefas.jpg'
*
*/
function createDir() {
$path = '/upload/'.date('Y/m/d');
$fpath = ROOT . $path;
if(is_dir($fpath) || mkdir($fpath , 0777 , true)) {
return $path;
} else {
return false;
}
}
/**
* 获取文件后缀
* @param str $filename 文件名
* @return str 文件的后缀名,且带点.
*/
function getExt($filename) {
return strrchr($filename, '.');
}
/**
* 生成缩略图
*
* @param str $oimg /upload/2016/01/25/asdfed.jpg
* @param int $sw 生成缩略图的宽
* @param int $sh 生成缩略图的高
* @return str 生成缩略图的路径 /upload/2016/01/25/asdfed.png
*/
function makeThumb($oimg , $sw=200 , $sh = 200) {
//缩略图存放的路径的名称
$simg = dirname($oimg) . '/' . randStr() . '.png';
//获取大图和缩略图的绝对路径
$opath = ROOT . $oimg;//原图的绝对路径
$spath = ROOT . $simg;//最终生成的小图
//创建小画布
$spic = imagecreatetruecolor($sw, $sh);
//创建白色
$white = imagecolorallocate($spic, 255, 255, 255);
imagefill($spic, 0, 0, $white);
//获取大图信息
list($bw , $bh ,$btype) = getimagesize($opath);
//1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,
//7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,
//11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
$map = array(
1=>'imagecreatefromgif',
2=>'imagecreatefromjpeg',
3=>'imagecreatefrompng',
15=>'imagecreatefromwbmp'
);
if(!isset($map[$btype])) {
return false;
}
$opic = $map[$btype]($opath);//大图资源
//imagecreatefromjpeg(filename)
//计算缩略比
$rate = min($sw/$bw , $sh/$bh);
$zw = $bw * $rate;//最终返回的小图宽
$zh = $bh * $rate;//最终返回的缩略小图高
//imagecopyresampled(dst_image, src_image, dst_x, dst_y,
//src_x, src_y, dst_w, dst_h, src_w, src_h)
//echo $rate , '<br>' , $zw , '<br>' , $zh ;exit();
//imagecopyresampled($spic, $opic, 0, 0, 0, 0, $zw, $zh, $bw, $bh);
imagecopyresampled($spic, $opic, ($sw-$zw)/2, ($sh-$zh)/2, 0, 0, $zw, $zh, $bw, $bh);
imagepng($spic , $spath);
imagedestroy($spic);
imagedestroy($opic);
return $simg;
}
/**
* 检测用户是否登录
*/
function acc() {
if(!isset($_COOKIE['name']) || !isset($_COOKIE['ccode'])){
return false;
}
return $_COOKIE['ccode'] === cCode($_COOKIE['name']);
}
/**
* 加密用户名
* @param str $name 用户登陆时输入的用户名
* @return str md5(用户名+salt)=>md5码
*/
function cCode($name) {
$salt = require(ROOT . '/lib/config.php');
return md5($name . '|' . $salt['salt']);
}
?>
mysql.php代码 <?php
/**
* mysql.php mysql系列操作函数
* @author nianbaibai
*/
/**
* 连接数据库
*
* @return resource 连接成功,返回连接数据库的资源
*/
function mConn() {
static $conn = null;
if($conn === null) {
$cfg = require(ROOT . '/lib/config.php');
$conn = mysqli_connect($cfg['host'] , $cfg['user'] , $cfg['pwd']);
if (!$con)
{
die("连接错误: " . mysqli_connect_error());
}
mysqli_query('use '.$cfg['db'] , $conn);
mysqli_query('set names '.$cfg['charset'] , $conn);
}
return $conn;
}
/**
* 查询的函数
* @return mixed resoure/bool
*/
function mQuery($sql) {
$rs = mysqli_query($sql , mConn());
if($rs) {
mLog($sql);
} else {
mLog($sql. "\n" . mysql_error());
}
return $rs;
}
/**
* log日志记录功能
* @param str $str 待记录的字符串
*/
function mLog($str) {
$filename = ROOT . '/log/' . date('Ymd') . '.txt';
$log = "-----------------------------------------\n".date('Y/m/d H:i:s') . "\n" . $str . "\n" . "-----------------------------------------\n\n";
return file_put_contents($filename, $log , FILE_APPEND);
}
/**
* select 查询多行数据
*
* @param str $sql select 待查询的sql语句
* @return mixed select 查询成功,返回二维数组,失败返回false
*/
function mGetAll($sql) {
$rs = mQuery($sql);
if(!$rs) {
return false;
}
$data = array();
while($row = mysqli_fetch_assoc($rs)) {
$data[] = $row;
}
return $data;
}
/*$sql = "select * from cat";
print_r(mGetAll($sql));
*/
/**
* select 取出一行数据
*
* @param str $sql 待查询的sql语句
* @return arr/false 查询成功 返回一个一维数组
*/
function mGetRow($sql) {
$rs = mQuery($sql);
if(!$rs) {
return false;
}
return mysqli_fetch_assoc($rs);
}
/*$sql = "select * from cat where cat_id=1";
print_r(mGetRow($sql));*/
/**
* select 查询返回一个结果
*
* @param str $sql 待查询的select语句
* @return mixed 成功,返回结果,失败返回false
*/
function mGetOne($sql) {
$rs = mQuery($sql);
if(!$rs) {
return false;
}
return mysqli_fetch_row($rs)[0];
}
/*$sql = "select count(*) from art where cat_id=1";
echo mGetOne($sql);*/
/**
* 自动拼接insert 和 update sql语句,并且调用mQuery() 去执行sql
*
* @param str $table 表名
* @param arr $data 接收到的数据,一维数组
* @param str $act 动作 默认为'insert'
* @param str $where 防止update更改时少加where条件
* @return bool insert 或者update 插入成功或失败
*/
function mExec($table , $data , $act='insert' , $where=0) {
if($act == 'insert') {
$sql = "insert into $table (";
$sql .= implode(',' , array_keys($data)) . ") values ('";
$sql .= implode("','" , array_values($data)) . "')";
return mQuery($sql);
} else if ($act == 'update') {
$sql = "update $table set ";
foreach($data as $k=>$v) {
$sql .= $k . "='" . $v . "',";
}
$sql = rtrim($sql , ',') . " where ".$where;
return mQuery($sql);
}
}
//$data = array('title'=>'今天的空气' , 'content'=>'空气质量优' , 'pubtime'=>12345678,'author'=>'baibai');
//insert into art (title,content,pubtime,author) values ('今天的空气','空气质量优','12345678','baibai');
//update art set title='今天的空气',conte='空气质量优',pubtime='12345678',author='baibai' where art_id=1;
//cho mExec('art' , $data , 'update' , 'art_id=1');;
//insert into cat (id,catname) values (5 , 'test');
/**
* 取得上一步insert 操作产生的主键id
*/
function getLastId() {
return mysql_insert_id(mConn());
}
/**
* 使用反斜线 转义字符串
* @param arr 待转义的数组
* @return arr 被转义后的数组
*/
function _addslashes($arr) {
foreach($arr as $k=>$v) {
if(is_string($v)) {
$arr[$k] = addslashes($v);
}else if(is_array($v)) {
$arr[$k] = _addslashes($v);
}
}
return $arr;
}
?>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++