学php一段时间了,依照布尔教育的blog教程跟做了一个简易博客。
用到及学到的组织规范有:
1.思路:从需求分析到产品运营维护的流程,需求分析=》设计=》编码=》测试=》实施=》维护,因为之前软考学过,就不在这里赘述了,可以到软考---系统开发运行了解
2.代码规范:注释一定要有,封装函数时用注释段来解释函数的作用,定义的变量类型及含义,方便以后增添功能或优化修改代码。
/**
*分页类
*@param int $num 文章总数
*@param int $curr 当前页码
*@param int $cnt 每页显示的条数
*
*/
3.文件组织规范:一个工程下创建多个文件分门别类的存放前端代码和php文件。
用到及学到的知识有:
1.在html代码中插入php代码,主要应用于修改模板,循环显示需要输出的数据库数据,例如文章列表,代码如下:①用大括号来开始结束循环体<?php } ?> 【 注意大括号和php之间一定要有空格 】
① <?php foreach ($arts as $a) {?>
<tr>
<td><?php echo $a['art_id']; ?></td> </tr>
<?php } ?>
②用endforeach来结束循环体 <?php endforeach; ?> 开始循环体使用冒号 【这种方式来自老韩教程】
<?php foreach ($article_list as $article): ?>
<a href="#"><?php echo $article['user_id']; ?></a>
<?php endforeach; ?>
2.定义根目录,引用文件使用绝对路径,相对路径会在多重引用时找乱。
define('ROOT',dirname(__DIR__));
3.图片上传,会存在临时文件,当php代码结束,该文件自动删除,所以需要转移文件
//判断是否上传图片
if (!empty($_FILES['pic']['name']) && $_FILES['pic']['error']==0){
$filename=createDir().'/'.randStr().getExt($_FILES['pic']['name']);
//移动上传的图片同时创建缩略图
if(move_uploaded_file($_FILES['pic']['tmp_name'], ROOT.$filename)){
$art['pic']=$filename;
$art['thumb']=makeThumd($filename);
}
}
/**
* 创建目录
* @return string|boolean
*/
function createDir(){
$path='/upload/'.date('Y/m/d');
$fpath=ROOT.$path;
if (is_dir($fpath) || mkdir($fpath,007,ture)){
return $path;
}else {
return false;
}
}
/**
* 获取文件后缀
*
*/
function getExt($filename){
return strrchr($filename,'.');
}
4.创建日志文件记录每次调用数据库的语句及错误,方便查找调用数据库时的错误。
function mLog($str){
$filename = ROOT.'/log/'.date('Ymd',time()).".text";
$log = "------------------------------------\n".date('Y/m/d H:i:s',time())."\n".$str."\n"."------------------------------------\n\n";
return file_put_contents($filename, $log,FILE_APPEND);
}
5.使用sql语句的拼接来完成sql增改操作
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))."')";
//echo $sql;
return mQuery($sql);
}elseif ($act=="update"){
$sql="update $table set ";
foreach ($data as $k=>$v){
$sql.=$k."='".$v."',";
}
$sql=rtrim($sql,',')." where ".$where;
return mQuery($sql);
}
5.返回上个页面,应用于用户提交评论后,防止刷新重复提交。
$ref = $_SERVER['HTTP_REFERER'];
用到及学到的小函数:
1.获取用户ip:
function getRealIp(){
static $realip=null;
if ($realip!==null){
return $realip;
}
if (getenv('REMOTE_ADDR')){
$realip=getenv('REMOTE_ADDR');
}elseif (getenv('HTTP_CLIENT_IP')){
$realip=getenv('HTTP_CLIENT_IP');
}else if(getenv('HTTP_X_FORWARD_FOR')){
$realip=getenv('HTTP_X_FORWARD_FOR');
}
return $realip;
}
2.引入GD库,画图及创建缩略图
/**
* 生成缩略图
* @param str $oimg /upload/2017/08/18/2Mbszd.jpg
* @param int $sw 缩略图的宽
* @param int $sh 缩略图的高
* @return str 生成缩略图的路径 /upload/2017/08/18/2Mbszd.jpg
*/
function makeThumd($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);
$map = array(
1=>'imagecreatefromgif',
2=>'imagecreatefromjpeg',
3=>'imagecreatefrompng',
15=>'imagecreatefromwbmp'
);
if (!isset($map[$btype])){
return false;
}
//获取大图
$opic=$map[$btype]($opath);
//计算缩略比
$rate=min($sw/$bw,$sh/$bh);
//小图大小
$zw=$bw*$rate;
$zh=$bh*$rate;
//
imagecopyresampled($spic, $opic, 0, 0, 0, 0, $zw, $zh, $bw, $bh);
imagepng($spic,$spath);
imagedestroy($opic);
imagedestroy($spic);
return $simg;
}