php原生态php文章管理系统-适合初学者学习;功能开发作者:徐多蔚,xuduowei,徐老师

前端效果:http://www.xuduowei.com/tc/php1

后台登录:http://www.xuduowei.com/tc/php1/admin888

后台功能模块预览:

登录成功后,首先看到的是开发信息和基本设置。

基本设置中有个网站设置及网站设置-增加变量,这个主要是更方便参数的修改和扩展,比如网站的名称,网站的关键字,网站的描述,网站的联系人电话,地址,qq,email,网站备案号等。

基本设置中有个缩略图管理,这个主要是管理文章记录缩略图多余的情况,比如修改文章缩略图了,或者删除文章记录了,有可能其对应的缩略图文件还在。这个时候,我们就需要对多余的缩略图进行删除操作。

 

栏目管理:主要是cms内容列表查看,增加,修改,删除,以及分类的管理【实现无限极分类】。如下图:

用户管理:查看用户,添加用户,如下图:

单页管理:重点是单页业务处理,如:关于我们,服务流程,公司简介。如下图:

 

权限思路分析:

分析权限设置的核心:
需要对分组id进行权限的分配而不是指定的用户!!
我们需要给用户表增加一个新字段,字段名:groupid tinyint型
我们事先声明号:
1为超级管理员【拥有所有的,全部的操作权限】;
2为信息发布员,只希望让他有增加文章的操作。其他权限不给!
要模拟设置好2个用户【??? 为超级管理员】;
【???为信息发布员】
我们考虑在登录验证登录后写入$_SESSION[‘groupid’]=$rs[‘groupid’];
我们考虑在哪个页面实现所谓的权限判断?safecheck.php
非数据库方式进行“权限”的验证,首先要想到的就是用数组来定义!!!!!!!
我们要考虑到分组可能有很多个?这个时候若要用数组的方式定义对应的权限,我们首先考虑到的应该是2维数组。
2维数组中,要方便根据我们的分组ID快速找到对应的权限。
$arr=array(
“2”=>array(
“权限1″,”权限2”
)
)

关注公众号,了解更多it技术(it问答网

ci快速上手手册-徐多蔚xuduowei整理【原创】

徐多蔚
官方:
https://codeigniter.com/
中国:
http://codeigniter.org.cn/
ci:
url路径1:
index.php/welcome/abc/?id=6
welcome: 控制器名;[默认:welcome]
abc: 方法名;  [默认:index]
id:表示的是传递给控制器的参数,如 ID 或其它各种变量。
index.php/welcome/abc/?id=6
get接值:$this->input->get(); //得到的get传过来的值,格式是数组。
若是post方式:接收值格式:
$this->input->post();
url路径2:
example.com/index.php?c=controller&m=function
index.php?c=welcome&m=abc
注意:ci中方法参数默认是m,若需要修改,也可以更改的。
application/config/config.php 文件中进行设置,只需将将 enable_query_strings 更改为 TRUE 即可。
$config[‘function_trigger’] = ‘m’;//修改方法参数
==================================================
提示:我们可以在对应的application\controllers下方创建文件夹比如:
index
admin
来模拟tp中的“模块”
,ci中如何访问呢?
pathinfo模式:
index.php/文件夹名/控制器名/方法名
CI中url要么用普通模式,要么用pathinfo模式[推荐使用此模式]【仅同时支持一种!】。
视图的渲染:
$this->load->view(‘welcome_message’);
view下:
welcome_message.php [默认后缀是.php]
================================================
ci框架视图赋值变量
$this->load->vars(“xdw”,array(‘a’=>’1’,’b’=>2,’c’=>3));
$this->load->view(‘abc/hi’);
code1:
控制器:
$this->load->vars(“xdw”,array(‘a’=>’1’,’b’=>2,’c’=>3));
$this->load->view(‘abc/hi’);
视图引用:
<?php
 print_r($xdw);
?>
code2:
控制器:
$this->load->view(‘abc/hi’,array(‘xdw’=>array(‘a’=>’1’,’b’=>2,’c’=>3)));
视图引用:
<?php
 print_r($xdw);
?>
视图中如何使用自定义函数,以有利于功能扩展?
1、system\helpers 目录下创建一个common_helper.php 文件
2、控制器中需要载入对应的文件。
$this->load->helper(‘common’);//注意是common不是common_helper【系统自动可以识别】
3、视图中就可以直接引用自定义函数了。
提示:如何设置自动载入?
application\config\autoload.php
搜索helper
$autoload[‘helper’] = array(‘common’);
CI 中视图引入JS、CSS文件的方式===========
echo base_url(); //得到项目的目录。
切记必须先载入helper url文件。
$autoload[‘helper’] = array(‘common’,”url”);
//url 的2种载入方式:
1、$this->load->helper(‘url’);//手动
2、如何设置自动载入?
application\config\autoload.php
搜索helper
$autoload[‘helper’] = array(‘url’);
表单提交路径=============
$this->load->helper(‘url’);//不能少,也可以在autoload.php中配置好。
用site_url(‘控制器/方法名’);//文件夹名/控制器名/方法名
===========================
数据库的增、删、改、查
1、确保配置项正常。
application\config\database.php
2、
$this->load->database();
$rst=$this->db->query(“select * from obj_users”);
$rs=$rst->result_array();//写法上有多种
foreach($rs as $k){
echo $k[‘username’].”<br/>”;
}
提示:$rst->result_array();//把抽象的结果集转换成数组 echo $k[‘username’];
      $rs=$rst->result();   //把抽象结果转换成对象     echo $k->username
配置交换表前缀
$db[‘default’][‘dbprefix’] = ‘obj_’;
$db[‘default’][‘swap_pre’] = ‘my_’;
那么我们在写sql语句时就用my_这个表前缀,ci会自动把my_换位obj_,所以,dbprefix可以随便修改,方便我们修改数据库名。
如:$sql = “SELECT * FROM my_users”;
$rst=$this->db->query($sql);
$rst=$this->db->get(表名);
$this->db->where(“id=1”);
$rst=$this->db->select(“username”)->get(“users”);
删除:
$this->load->database();
$num=$this->db->where(“id=14”)->delete(‘users’); //返回的是布尔值true/false;
修改:
$this->load->database();
$num=$this->db->where(“id=13”)->update(‘users’,array(“username”=>’xdw’));
var_dump($num);//布尔值
增加:
$this->load->database();
$num=$this->db->insert(‘users’,array(“username”=>’xdw666′));
var_dump($num);//布尔值
模型如何载入?
手动:
$this->load->model(“m_welcome”);//m_welcome大小写均可,推荐首字母大写。和模型命名一致。
控制器中载入模型的核心源码:
$this->load->model(“M_welcome”);//手动下载入指定模型不可省略。
$m=new M_welcome();
$rs=$m->abc();
var_dump($rs);
若我们需要载入指定目录中的模型,demo:
$this->load->model(“模型文件夹名称/M_welcome”);
对应的模型的命名建议和控制器名区别开,一般建议在前方加前缀M_
模型文件的写法:
class M_index  extends CI_Model{ //注意:extends CI_Model不能省,否则报错!
自动:
自动载入,在config/autoload.php中配置
$autoload[‘model’] = array(‘m_welcome’);
提示:m_welcome 或者M_welcome均可,推荐首字母大写,这样和模型的命名保持一致。
我们可以在autoload.php中设置自动载入数据库类,这样我们对数据库操作的时候,就可以省略:
$this->load->database();
配置项如下:
$autoload[‘libraries’] = array(‘database’);
///session的使用;
使用前都要导入session类,导入方法。
导入session方式一:全局法:
config/autoload.php中 $autoload[‘libraries’] = array(“session”);
导入session方式二:页面导入:
function __construct(){
parent::__construct();//不可省略
$this->load->library(‘session’);
}
使用格式一:
设置:
$_SESSION[session名]=值
取的:
$_SESSION[session名]
使用格式二:
设置:
$this->session->name=值;
取的:
$this->session->name;
CI框架获取控制器名和方法名
$directory=$this->router->fetch_directory();//目录名
$class = $this->router->fetch_class();//获取控制器名
$method = $this->router->fetch_method();//获取方法名
==================================

提示:ci中若要模拟tp中公共类的继承。

参考格式如下:
@include_once(APPPATH . ‘controllers/admin/Common.php’);
class Welcome extends Common {

其中Common.php代码如下:
class Common extends CI_Controller {

解说:
ci对CI_Controller做了自动包含,但是对其他的没有做自动包含。需要手动include包含类文件。

================================
了解下YII框架。
https://www.yiiframework.com/
https://www.yiichina.com/

关注公众号,了解更多it技术(it问答网

tp3.2.3搜索分页

$obj=M(‘users’);
$tj=””;
//$condition[‘uid’] = array(‘like’,’%’.$keyword.’%’);
if(I(“get.”)){
$keyword=I(“get.keyword”);
//$tj=” username like ‘%”.$keywords.”%'”;
$s[‘username’] = array(‘like’,’%’.$keyword.’%’);
      /* $condition[‘usertype’] = array(‘neq’,2);
        $condition[‘uid’] = array(‘like’,’%’.$keyword.’%’);
        $condition[‘status’] = $status;
        $condition[‘sex’] = $sex;*/
}
$num=3;//设置一页分多少条
$count=$obj->where($s)->count();//计算总记录数
$Page= new \Think\Page($count,$num);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$arr=$obj->order(‘id desc’)->where($s)->limit(“$Page->firstRow,$Page->listRows”)->select();
//print_r($arr);
print_r( $Page->parameter);
$Page->setConfig(‘prev’,’上一页’);//一定要放到$Page->show();之上才有效!
$Page->setConfig(‘next’,’下一页’);
$map[‘keyword’] = $keyword;
$Page->parameter = array_map(‘urlencode’,$map);  //将parameter变成字符串形式,导致无法翻页。所以选择第二种。
//array_map是将函数作用到数组的每个元素上。
$show= $Page->show();// 分页显示输出
//echo $show;
$this->assign(‘show’,$show);
$this->assign(‘arrlist’,$arr);
$this->display(“/list”);

关注公众号,了解更多it技术(it问答网

用PHP代码给GIF动画图片加水印,保持原有的动画效果

在程序开发时,上传图片加水印是常见的功能。

但是常规加水印的方法对GIF动画图片就会产生问题,加上水印后,GIF 图片就不动了。

那么有没有办法给GIF动画图片加上水印后,保持原有的动画效果呢(效果图在最后)?

下面就给大家详细的说说:

一、首先分别下载3个开源的php类库

imageworkshop

composer 地址:https://packagist.org/packages/sybio/image-workshop

GifFrameExtractor

composer 地址:https://packagist.org/packages/sybio/gif-frame-extractor

gifcreator

composer 地址:https://packagist.org/packages/sybio/gif-creator

二、准备好gif图片

三、主要代码

1.你的GIF地址

$gifPath = ‘123.gif’;

2.获取gif宽和高(后面有用)

$imginfo=getimagesize($gifPath);

3.判断图片是否是GIF动画图

if (GifFrameExtractor::isAnimatedGif($gifPath))

4.将GIF图片释放成一帧一帧的图

$gfe = new GifFrameExtractor();

$frames = $gfe->extract($gifPath,true);

5.初始化水印

$watermarkLayer = ImageWorkshop::initTextLayer(‘代码庸医’, ‘simkai.ttf’, 15);

我这里是直接用字作为水印,也可以用图片作为水印,方法如下:

$watermarkLayer = ImageWorkshop::initFromPath(‘你的水印图片地址’);

6.给每一个图片帧加上水印

foreach ($frames as $frame)

{

$frameLayer = ImageWorkshop::initFromResourceVar($frame[‘image’]);

$frameLayer->resizeInPixel($imginfo[0], $imginfo[1], true); // 设置图片高度宽度

$frameLayer->addLayerOnTop($watermarkLayer, 20, 20, ‘LB’); // 水印位置

$retouchedFrames[] = $frameLayer->getResult();

}

7.合并每一帧生成加上水印的GIF图片

$gc = new GifCreator();

$gc->create($retouchedFrames, $gfe->getFrameDurations(), 0);

file_put_contents(‘pic/newgif.gif’, $gc->getGif());


关注公众号,了解更多it技术(it问答网

phpStudy下Apache环境安装SSL证书实现https链接

phpstudy的Apache环境下如何安装SSL证书?网上很多教程,然并卵。本文真实可靠实际操作,为大家教学phpstudy下A环境安装SSL证书的正确方法。不用花钱请大神,希望大家分享该知识为https普及做贡献。

工具/原料

  • 申请并下载好ssl证书(PEM格式)
  • phpstudy集成环境下正常运行的网站
  • 避免意外请先备份(复制)好httpd.conf配置文件。

方法/步骤

  1. 首先,开启apache的编译ssl模块,如图打开phpstudy—其它选项设置—PHP扩张及设置—php扩展—php-openssl前面打勾

  2. 如图点击打开修改httpd.conf配置文件,打开找到#LoadModule ssl_module modules/mod_ssl.so,去掉前面的注释符#(保证前面没有#号),使得ssl模块生效。

    增加一条引用语句   Include conf/vhosts_ssl.conf

  3. 依次打开phpstudy安装文件,打开Apache打开conf文件,在conf文件夹中创建一个名为vhosts_ssl.conf的配置文件。编辑vhostsssl.conf文件,增加如下内容:

    Listen 443

    SSLStrictSNIVHostCheck off

    SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL

    SSLProtocol all -SSLv2 -SSLv3

    <VirtualHost *:443>

    DocumentRoot “D:\phpStudy\WWW\bbs”(网站根目录路径)

    ServerName www.yuming.com(更换成自己的域名)

    ServerAlias yuming.com(更换成自己的域名)

    <Directory “D:\phpStudy\WWW\bbs”>(网站根目录路径)

    Options FollowSymLinks ExecCGI

    AllowOverride All

    Order allow,deny

    Allow from all

    Require all granted

    </Directory>

    SSLEngine on

    SSLCertificateFile “D:\phpStudy\Apache\conf\ssl\XXX.cer”(证书路径)

    SSLCertificateKeyFile “D:\phpStudy\Apache\conf\ssl\XXX.key”(证书路径)

    </VirtualHost>

  4. 将下载好的证书放入ssl目录路径D:\phpStudy\Apache\conf\ssl\如图,注意文件格式,.cer和.key只需要这两个证书文件。你可以右键属性查看文件类型确认文件格式正确不。

  5. 防火墙端口入站规则哪里关闭443,绿勾变成灰色就关闭了,关闭后现在重启phpstudy,正常重启后,在浏览器里面输入https://的域名就能看到安全锁出来啦。

    地址栏未能显示绿色锁标是因为网站有http非加密资源,如图片,css,js等,需要全部调整为https开通协议资源才能挂锁成绿色。

    END

注意事项

  • 如果启用了cdn加速或网站卫士需要到cdn将其设置成http是协议,否则有可能乱码或不挂绿锁
  • 有不清楚不明白有疑问的可以联系我尽力帮助。

来源:https://jingyan.baidu.com/article/49ad8bceb4dc735835d8fa6a.html


关注公众号,了解更多it技术(it问答网

bat执行php,

A.BAT 文件放www文件夹中,内容如下:

E:\phpStudy\php\php-5.4.45\php -f b.php
pause

================================

b.php也放www中,内容如下:

<?php

echo 666;

?>

 

若需要定时器处理,比如:10s执行一次【经过实测无误。】。

bat文件内容如下:

@echo off
E:\phpStudy\php\php-5.4.45\php -f b.php
:start
ping -n 10 127.1>NUL
E:\phpStudy\php\php-5.4.45\php -f b.php
goto start
pause

 

===========

若要实现每执行一次都换行,可以在bat中这样 echo.  注意:echo后面有一个点。

@echo off
E:\phpStudy\php\php-5.4.45\php -f b.php
echo.
:start
ping -n 3 127.1>NUL
E:\phpStudy\php\php-5.4.45\php -f b.php
echo.
goto start
pause

 

提示:若bat中显示中文乱码,则用:iconv(“utf-8″,”gb2312//IGNORE”,”中文”);处理下,转下编码。因为bat中编码中文是gb2312!若b.php是ansi编码则不需要转码的哦。

echo iconv(“utf-8″,”gb2312//IGNORE”,”中文”);处理下即可,若需要换行则串接一个 “\r\n”

完整b.php代码如下:

echo file_get_contents(‘http://127.0.0.1/oop,180104/tp3/index.php/Admin/index/aaa’);
echo “处理完成\r\n”;


关注公众号,了解更多it技术(it问答网

Composer是什么?

是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

官方链接:http://www.phpcomposer.com/

简单来说,Composer 是一个新的安装包管理工具,服务于 PHP 生态系统。它实际上包含了两个部分:ComposerPackagist。下面我们就简单说一下他们各自的用途。

Composer

Composer 是由 Jordi Boggiano 和 Nils Aderman 创造的一个命令行工具,它的使命就是帮你为项目自动安装所依赖的开发包。Composer 中的很多理念都借鉴自 npmBundler,如果你对这两个工具有所了解的话,就会在 composer 中发现他们的身影。Composer 包含了一个依赖解析器,用来处理开发包之间复杂的依赖关系;另外,它还包含了下载器、安装器等有趣的东西。

作为一个用户,你所要做的就是在 composer.json 文件中声明当前项目所依赖的开发包,然后运行 composer.phar install 就行了。composer.json 文件定义了当前项目所依赖的开发包和 composer 的配置信息。下面是一个小型实例:

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

Packagist

Packagist 是 Composer 的默认的开发包仓库。你可以将自己的安装包提交到 packagist,将来你在自己的 VCS (源码管理软件,比如 Github)仓库中新建了 tag 或更新了代码,packagist 都会自动构建一个新的开发包。这就是 packagist 目前的运作方式,将来 packagist 将允许直接上传开发包。


关注公众号,了解更多it技术(it问答网

yii框架介绍

Yii 是一个 高性能 的,适用于开发 WEB 2.0 应用的 PHP 框架。

Yii 自带了 丰富的功能,包括 MVC,DAO/ActiveRecord,I18N/L10N,缓存,身份验证和基于角色的访问控制,脚手架,测试等,可显著缩短开发时间。

yii框架中文网站:

视频教程:点击打开

中文文档:点击下载

下载框架:点击下载

信息来自:http://www.yiichina.com/


关注公众号,了解更多it技术(it问答网

取得文件扩展名方法

取得文件扩展名方法一:
$r=basename(“1/333.jpg.exe.txt”);
$arr=explode(“.”,$r);
echo “.”.$arr[count($arr)-1];

取得文件扩展名方法二:

$r=pathinfo(“1/333.jpg.exe.txt”);
echo $r[‘extension’];


关注公众号,了解更多it技术(it问答网