学习笔记

 : jank    :   : 2872    : 2016-09-27 08:15  php

2016 6/20

一. mysql 添加索引:

1. alter table name add primary_key(`primary_key_name`);

2. alter table name add unique(`unique_name`);

3. alter table name add index(`index_name`);

二. mysql 删除索引:

1. alter table name drop key column_name;

三. mysql 修改表名

1. rename table oldname to newname;


2016 6/21

一. 几个数组函数

array_push(array, date);//注意这个函数结果就是括号里的array,不能赋值

range(1, 100); //从一到一百的数组

shuffle(array); //把数组打成乱序,不能赋值

array_slice(array, 0, 1); //从数组中截取一个数值。


2016 6/22

一. 服务器

1.reboot 重启服务器

2.nginx 路径 -s reload 重启nginx

3.nginx 路径 -s stop 关闭nginx

4.php-fmp路径 restart 重启 php

5.给执行权限 chmod O+x 文件名

6.开启mysql /bin/systemctl start  mysqld.service

7.svnserve -d -r ./svn 开启svn服务




2016 6/23

微信支付完成实现自动关注 增加 is_subscribe 字段

从服务器导出数据库: mysqldump -u root -p guanjian > /home/www/guanjian.sql 回车输入密码

从服务器导出数据表: mysqldump -u root -p guanjian gj_yhq > /home/www/gj_yhq.sql 回车输入密码

从服务器导出表字段: mysqldump -u root -p guanjian gj_paimai where jiang=1  > /mnt/gj_paimai.sql 回车输入密码

从服务器导入数据库表:进入mysql,直接source sql文件路径自动导入

創建數據庫默認字符集: CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

数据库表重命名:

2016 6/27

1.查看linux服务器所有信息  lsb_release -a


2016 6/28

1.var_dump('a'>0); 打印出bool值true or false print_r() echo 打印空

2.$str='abc#defg';

  $in=strstr($str,'#d');//输出结果为:#defg,从某个字符开始截取

  stristr和strstr效果一样,只是stristr不区分大小写

  $in=substr($str, 1,2);//截取

  var_dump(strpos($str,'ab'));//返回bool值,

3. sort()函数对索引数组,键从0,1,2开始排列


2016 6/29

1.decbin() 函数把十进制转换为二进制。


2016 6/30

1.tp框架中vendor()函数,Thinkphp/Library/Vendor存放第三方类库

2.simplexml_load_string() 函数把 XML 字符串载入对象  可以通过json_decode(json_encode())来转换成数组 

3.文件操作

fopen()

   'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

   'a' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

4. $_SERVER[HTTP_USER_AGENT]; //获取用户客户端基本信息

5. $_SERVER['REQUEST_URL']; //获取当前页面url

6. session('?openid'); //thinkphp中判断是否存在名字为openid的session


2016 7/1

1. strtotime();//将英文时间转换成时间戳,strtotime("+1 hours +1 week 3 days 7 hours 5 seconds"); strtotime('next day'); strtotime("3 October 2005")

2. (.*?) //正则最少匹配  &quot; = "''"   &gt; = '>'   &lt; = '<'   &amp; = '&'  &nbsp; = ''  /s 单行模式匹配

3. str_repeat($str, 2);//字符串重复指定两次

4.商品上线多少天

$mall['onsaledate'] = time();

$mall['onsaleday'] = 1;

$saleend = strtotime(date('Ymd', $mall['onsaledate'])) + $mall['onsaleday'] * 86400;

echo date('Y/m/d H:i:s', $saleend) . ',';

echo $saleend;

2016 7/4

1.mysql操作

    如果出现类似'Access denied for user 'root'@'localhost' (using password: NO)'错误

    则,在mysql配置文件'/etc/my.cnf'中加入skip-grant-tables 字段。然后保存重启mysql: 'service mysqld restart'

    或者 '/etc/rc.d/init.d/mysqld restart'。直接mysql -u root -p 回车进入mysql修改mysql数据库中的user表的password

    注:修改时得用password()函数。改完后则回到my.cnf文件中,去除刚加入的字段,保存重启,重新登录mysql。

2.查看linux服务器所有运行的服务进程: ps aux|less

3.判断tp中mysql是否修改成功if($result != false) 或者 if($result === 0 || $result > 0)


2016 7/5

1.thinkphp中统计单个字段的和用sum()函数

2.跳转页面总结:首先判断这个值是否正确,然后查找数据库判断

3.使用redirect(U("Home/User/supgetmoney/uid/$uid"), 3, '余额不足,3秒后自动返回提现页面...');进行3秒后重定向。


2016 7/8

1.如果安装mysql时没有设置自动开启mysql,则每次重启服务器时就需要service mysqld start开启mysql

2.在linux环境下,当执行php命令时报convert: command not found错误时,说明在/etc/profile文件中没有把php的bin路径

加在path中


2016 7/11

1.

命令:curl 可以访问url

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。

它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。


2016 7/12

1.quickstart guide 快速入门指南

2.migrations 迁移

3.eloquent 有说服力的

4.Blade  刀 

5.templates 模板

6.track 轨道,路线,跟踪,检测

7.1024端口 是 *UNIX 系统动态端口的开始,是我们不需要 root 权限就可以随意监听的数值最小的端口。

8.ORM 對象關係映射 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

9.syntax error 語法錯誤

2016 7/15

1.赋予root权限

方法一:修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉

## Allows people in group wheel to run all commands

%wheel    ALL=(ALL)    ALL

然后修改用户,使其属于root组(wheel),命令如下:

#usermod -g root jank


2016 7/19

    1.svn使用

        首先yum -y install subversion

        make /home/svn

        svnadmin create /home/svn/blog

        编辑 /svn/blog/conf/auth,passd,ser..三个文件 注:修改配置文件时头部不能有空格

        在hooks中添加钩子文件post-commit,指定好svn目录 并赋予root执行权限 

        

        在指定的目录的上一层svn checkout svn://www.jankl.com/blog

        修改blog为指定的目录名

        服务器常用命令有

        svn add 文件/文件夹名

        svn commit -m jank(随便输入,应对有时直接suv commit报错)

        svn update

        svn del

        svn revert 有时候svn add 后源文件被找不到会报错,解决方法是:

        svn revert 删除的文件/文件夹名  --depth infinity

    

    2.redis连接:$redis = new Redis(); $redis->connect('0.0.0.0', 6379);

    3.pdo

        连接:

        $pdo = new PDO('mysql:host=127.0.0.1;dbname=blog', 'root', 'jank');

        设置编码:

        $pdo->query('set names utf8');

        

        PDO::FETCH_ASSOC-- 关联数组形式

        PDO::FETCH_NUM -- 数字索引数组形式

        PDO::FETCH_BOTH -- 两者数组形式都有,这是缺省的

        PDO::FETCH_OBJ -- 按照对象的形式,类似于以前的mysql_fetch_object()



2016 7/21

linux chown更改文件所有权 chown(filename, user);

chown -R jank:phpgroup blog 修改blog目录及其所有文件的归属权为phpgroup组的jank所有

创建用户:

    1.# useradd –d /usr/sam -m sam

    此命令创建了一个用户sam。

    2.# useradd -s /bin/sh -g group –G adm,root gem

    此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

    这里可能新建组:#groupadd group及groupadd adm 

    增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

    Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。

用户添加组:

    将一个用户添加到用户组中,千万不能直接用: 

    usermod -G groupA 


    这样做会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员。 

    应该用 加上 -a 选项: 

    usermod -a -G groupA user


    (FC4: usermod -G groupA,groupB,groupC user)

    -a 代表 append, 也就是 将自己添加到 用户组groupA 中,而不必离开 其他用户组。 

2016 7/27

1.冒泡排序:

    设置两个for循环,

    里面一个循环就是拿出第一个数一次跟后面的数进行比较,遇到比自己大的就替换掉继续比较直到最后一个数,

    外面的循环为的是让上一次排好顺序的序列,和上一次一样再来走一遍,走的遍数等于数组的长度。

sort() - 以升序对数组排序

rsort() - 以降序对数组排序

asort() - 根据值,以升序对关联数组进行排序

ksort() - 根据键,以升序对关联数组进行排序

arsort() - 根据值,以降序对关联数组进行排序

krsort() - 根据键,以降序对关联数组进行排序

array_multisort()函數把多維數組進行排序或者多个数组进行排序,所得结果无需赋予变量

例:array_multisort($num1, SORT_ASC, $num2, SORT_DESC);//对$num1进行升序,$num2进行降序

2.array_column($user, 'name');//把二维数组转换成一维数组,结果需要赋予变量

3.php -m 查看已经安装好的php扩展库

4.php7所有对字符串进行的函数操作都必须加上mb_


2016 7/28

1.scws 中文分词php扩展,函数调用方法

    $so = scws_new();

    $so->set_charset('utf8');

    // 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件

    $so->send_text("我是一个中国人,我会php语言,我也有很多T恤衣服");

    while ($tmp = $so->get_result())

    {

        $jank = array_column($tmp, 'word');

    }

    print_r($jank);

    $so->close();


2.array_filter($arr);//删除数组中的空元素

3.array_unique($arr);//去除数组中重复的元素


2016 7/29

1.array_slice($arr, 0, 8);//数组截取函数,数组长度不够不报错,截取的结果须赋给一个变量


2016 8/1

git 版本控制器学习

    1.首先使用yum安装好git:yum install git

    2.新建一个文件夹gitdir,进入文件夹gitdir执行命令:git init即生成版本仓库,当前系统第一次使用

    需要登录名:git config --global user.name 姓名

    登录邮箱: git config --global user.email 邮箱地址

    3.本地的仓库基本命令

        git add filename

        git rm filename

        git mv filename new.filename

        git commit -m 描述

    4.注册github中国版

        网址:https://git.oschina.net

        然后创建一个项目如地址:https://git.oschina.net/jank1369/ceshi.git

    5.克隆远程目录文件

        git clone https://git.oschina.net/jank1369/ceshi.git

    6.版本库远程操作

        git remote add origin(远程库名) https://git.oschina.net/jank1369/ceshi 添加远程库

        git remote remove origin(远程库名)

        git pull origin master 更新本地

        git push origin master 提交至远程

2016 8/4

1.mb_substr_count($user['fans'], ',') + 1;//截取粉色的个数

2.$str = str_split($str);//字符串转数组

2016 8/8

1.form 表单提交post数据,页面跳转

  ajax 在当前页面提交后台函数,获取回调信息,但还是在本页面

2.mysql修改字段名称change并重新输入字段信息,modify主要用来修改字段信息


2016 8/9

1.mysql添加unique或者primary 索引的时候注意如果表中有字段需要为其先赋上不同的值,才能添加成功


2016 8/10 

1.删除数组中的指定元素:

  例:

    $arr = array(1,3,5,23,15);//删除键值5

    $key = array_search(5, $arr); // 一,先找到键值5所在数组$arr中的位置

    if($key != false)

        array_splice($arr, $key, 1);// 二,删除$key的键值

2.数组键值反转函数:array_flip(trans);


2016 8/11

1.mysql 删除数据库的unique索引,同删除index索引方法一样。


2016 8/12

1.foreach循环中给键值重新赋值要注意:

例:

    $arr = array(array('name' => 'jank'),array('name' => 'ai'));

    foreach($arr as $k => $v){

        $arr[$k]['name'] = '占魁';

    }

    而不是:$v['name'] = '占魁';

    

2.后台传json值给前台模板是json值不能为空

3.thinkphp模板输出

    <foreach name="jank" item="j" key="k"></foreach> 一维数组键{$k} 值{$j}

    <volist name="jank" id=""></volist>

    <empty> <else /> </empty>

    <notempty> </notempty>

    <present></present>

    <if condition="$jank eq 1"> <else /> </if>

    <eq name="jank" value="1"> <else /> </eq>

2016 8/13

1.url重写


2016 8/18

1.ci框架

    配置框架:把index.php放在根目录后需要更改index.php文件中system和application的路径

    配置database:打开config目录中的database.php更改其中的配置

        注:如果之前php.ini文件中是pdo_mysql.default_socket=

            修改:等号后面添加mysql.sock文件的路径 


2016 8/21

1. 1s=1000ms


2016 8/25

1.当重启nginx时出现"nginx: [error] open() "/usr/local/nginx/logs/nginx.pid"

 failed (2: No such file or directory"错误时,

  解决方案:执行命令 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf


2016 8/26

1.apache编译安装参数说明


./configure //配置源代码树

--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录prefix ,也就apache的安装目录。如果没有指定PREFIX,默认会装到/usr/local/apache2。

--enable-module=so //打开 so 模块,so 模块是用来提 dso 支持的 apache 核心模块

--enable-deflate=shared //支持网页压缩

--enable-expires=shared //支持 http 控制

--enable-rewrite=shared //支持 url 重写

--enable-cache //支持缓存

--enable-file-cache //支持文件缓存

--enable-mem-cache //支持记忆缓存

--enable-disk-cache //支持磁盘缓存

--enable-static-support //支持静态连接(默认为动态连接)

--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件

--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件 

--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 apache 日志的管道日志程序 

--enable-static-logresolve //使用静态连接编译 logresolve - 解析 apache 日志中的ip地址为主机名

--enable-static-htdbm //使用静态连接编译 htdbm - 操作 dbm 密码数据库 

--enable-static-ab //使用静态连接编译 ab - apache http 服务器性能测试工具

--enable-static-checkgid //使用静态连接编译 checkgid 

--disable-cgid //禁止用一个外部 cgi 守护进程执行cgi脚本

--disable-cgi //禁止编译 cgi 版本的 PHP

--disable-userdir //禁止用户从自己的主目录中提供页面

--with-mpm=worker // 让apache以worker方式运行

--enable-authn-dbm=shared // 对动态数据库进行操作。rewrite时需要。

/usr/local/apache/bin/apachectl -m =-t -d dump_modules 安装了哪些模块

/usr/local/apache/bin/apachectl -t 测试安装是否成功

/usr/local/apache/bin/apachectl -k start|restart|stop 查看具体


./configure --prefix=/usr/local/apache --enable-module=so 

--enable-deflate=shared --enable-expires=shared 

--enable-rewrite=shared --enable-cache --enable-file-cache

 --enable-mem-cache --enable-disk-cache --enable-static-rotatelogs

  --enable-static-logresolve --enable-authn-dbm=shared --enable-so


AddType application/x-httpd-php .php .php3 .phtml .inc

AddType application/x-httpd-php-source .phps


2016 08/30

一、linux下安装ftp

    1.首先判断当前系统下是否已安装ftp:rpm -qa|grep vsftpd

      如果返回结果为空则说明没有安装。

    2.安装:yum -y install vsftpd

    

2016 09/05

    1.

    一月份=JAN.   Jan.=January

    二月份=FEB.   Feb.=February

    三月份=MAR.   Mar.=March 

    四月份=APR.   Apr.=April 

    五月份=MAY    May=May

    六月份=JUN.   Jun.=June

    七月份=JUL.   Jul.=July

    八月份=AUG.   Aug.=August 

    九月份=SEP.   Sept.=September

    十月份=OCT.   Oct.=October

    十一月份=NOV. Nov.=November

    十二月份=DEC. Dec.=December


    2.'5' == 5 但不全等 '5' === 5 false

2016 09/06

    1.80端口是web服务的标准端口,SMTP服务是25端口,FTP服务是21端口,等等。

    端口号小于1024的是Internet标准服务的端口,端口号大于1024的,可以任意使用。 

2016 09/13

    1.utf8中文占 3 字节,英文数字 1 个字节

      gbk中文占 2 字节

      echo strlen('中国人'); //9

      echo mb_strlen('中国人'); //9

      echo mb_strlen('中国人', 'utf8'); //3

    2.rmp -q -a 查看所有软件包

2016 10/13

    1.修改PATH环境变量

        vim /etc/profile    //打开配置文件

        export PATH=$PATH:/usr/local/go/bin

        source /etc/profile //重启配置文件

2016 10/14

    1.$a = 1; $a++是赋值后加1,echo $a++; 1。++$a是赋值前$a本身就加1了。echo ++$a; 2。

    2.unset($arr['name'], $arr['age'], ...);//一次unset多個數組鍵值


2016 10/18

    1.file函数

        fopen(filename); 打开文件

        filesize(filename);//获取文件内容总字节数

        fread(filename, "设定查看的字节大小");

        file_get_contents(filename);//读取整个文档的内容,file_get_contents(),它的性能比fread() 好得多。

        fwrite(filename, 'a');//

        file_put_contents(filename, str, FILE_APPEND);//向filename文件中写入字符串(append形式),效率更高

            模式  描述 

            r   only read    只读。在文件的开头开始。 

            r+  read/write   读/写。在文件的开头开始。 

            w   only write   只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 

            w+  read/write   读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 

            a   and to       追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。 

            a+  read/and to  读/追加。通过向文件末端写内容,来保持文件内容。 

            x   only write   只写。创建新文件。如果文件以存在,则返回 FALSE。 

            x+  read/write   读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

    2.flock()函数

        要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)

        要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)

        要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)

        如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)

        例:

            $file = "jank.txt";

            $fp = fopen($file, 'a');

            if(flock($fp, LOCK_EX)){

                fwrite($fp, " 最美的太阳 ");

                sleep(10);

                flock($fp, LOCK_UN);

            }

            fclose($fp);


    3.dirname()函数

        __FILE__ 和 dirname() 函数从 PHP 4.0.2 就开始启用。

        __DIR__ 变量则是 PHP5.3.0 新增的

        在实现同样功能的情况下,dirname(__FILE__)多了一层函数调用。

        所以, __DIR__ 比 dirname(__FILE__) 在效率上有优势。

            例:

                print_r(dirname(__DIR__));         C:wampwwwjank

                print_r(dirname(__FILE__));        C:wampwwwjanksheel

                print_r(__FILE__);                 C:wampwwwjanksheellockread.php

                print_r(__DIR__);                  C:wampwwwjanksheel



    4.sleep()函数

        usleep() - 以指定的微秒数延迟执行

      time_nanosleep — 延缓执行若干秒和纳秒

      time_sleep_until() - 使脚本睡眠到指定的时间为止。

      set_time_limit() - 设置脚本最大执行时间

      sleep() - 延缓执行

2016/10/19

1.存储分隔字段

    if($mall['biaolist'] != ''){    

        $list = explode(',', $mall['biaolist']);

        if(!in_array($uid, $list))

            array_push($list, $uid);

        $list = implode(',', $list);

    }else{

        $list = $uid;

    }

2016/10/20

1.定时任务

开启定时任务:crontab -e

重启定时任务:service crond restart


2016/10/21

1.设置字符串格式

    $id = settype($_GET['id'], 'integer');

2.异常

    异常的规则

    1. 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。

    2. 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。

    3. 使用多个 catch 代码块可以捕获不同种类的异常。

    4. 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。


   注意:抛出的异常必须要捕获,否则将报错


2016/10/24

    1.thinkphp 修改单个字段:

        $result = $Dao->where('uid = 2')->setField('email','Jack@163.com');//修改单个字段

        $User->where('id=5')->setInc('score',3); // 用户的积分加3

        $User->where('id=5')->setInc('score'); // 用户的积分加1

        $User->where('id=5')->setDec('score',5); // 用户的积分减5

        $User->where('id=5')->setDec('score'); // 用户的积分减1


2016/10/28

    1.for循环中赋值细节

        $jank = array();

        $arr = array(array(1,23,3),array(),array('jank','janks'));

        foreach ($arr as $key => $value) {

            $jank[$key] = $value;

            if(empty($jank[$key])){

                unset($jank[$key]);   

                continue;        //continue的同时需把该键给删掉

            }

        }

        echo '----------------------方法二(推荐)'. "<br/>";

        foreach ($arr as $key => $value) {

            $j = $value;         //或者是通过赋值的方式来处理

            if(empty($j)){

                continue;        

            }

            $json[] = $j;

        }


2016/10/31

    1. php绝对值: abs();

    2. mysql 获取当前时间戳函数: unix_timestamp(now())

    

2016/11/04

1.配置$GOPATH : 

    vim /etc/profile

    末尾添加:export GOPATH=/usr/local/go/bin  

    source /etc/


2016/11/07

1.thinkphp 拼接注意'{}'相当于'<?php ?>': var links = "{:C('IPROOT')}/mall/info/mid/{$info['mid']}"


2016/11/09


    1.cookie

    cookie是有时间限制的,根据生命期不同分成两种:会话cookie和持久cookie;

    如果不设置过期时间,则表示这个cookie生命周期为从创建到浏览器关闭止,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

    如果设置了过期时间(setMaxAge(606024)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。


   

备案编号:赣ICP备15011386号

联系方式:qq:1150662577    邮箱:1150662577@qq.com