技术圈开发者交流群:

php格式化输出json

格式化输出json,php版本要求5.4或更高

    /**
     * 浏览器友好的变量输出json格式
     * @param mixed     $var 变量
     * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
     * @return void|string
     * @author TechLee
     */
    function ddj($var, $echo = true)
    {
        header('content-type:application/json;charset=utf8');
        $output = json_encode($var, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
        if ($echo) {
            echo ($output);
            return;
        } else {
            return $output;
        }
    }


PHP 2017年09月08日 25541

php格式化输出代替var_dump/print_r

PHP输出变量函数print_r和var_dump,没有格式化,易读性太差

下面结合thinkphp礼包dump函数改进的

    /**
     * 浏览器友好的变量输出
     * @param mixed     $var 变量
     * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
     * @param string    $label 标签 默认为空
     * @return void|string
     * @author TechLee
     */
    function ddp($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
    {
        $label = (null === $label) ? '' : rtrim($label) . ':';
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);

        if (!extension_loaded('xdebug')) {
            $output = htmlspecialchars($output, $flags);
        }
        $output = '' . $label . $output . '';

        if ($echo) {
            echo ($output);
            return;
        } else {
            return $output;
        }
    }


PHP 2017年09月08日 25409

磁盘阵列基本知识

基础知识

一、RAID的定义

是Redundant Array of Independent Disks(独立磁盘冗余阵列),RAID就是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来的一个硬盘组(逻辑硬盘)。

软RAID:是通过软件实现多块硬盘冗余的.

硬RAID是一般通过RAID卡来实现RAID的.

二、RAID0

image.png

 

三、RAID1

image.png

四、RDID5

image.png

 

五、RAID100+1

image.png

六、基本命令

1、创立Raid:

  Raid1 卷

mdadm -C /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

或mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1

  Radid5 卷

mdadm -C /dev/md5 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1

或mdadm -Cv /dev/md5 –l5 –n3 /dev/sdb1 /dev/sdc1 /dev/sdd1

 

2、查看raid

mdadm -D /dev/md0

mdadm  --examine /dev/sdb1

或:

mdadm  /dev/md0 --examine /dev/sdb1


3、停止raid 

mdadm -S /dev/md0 

 

4、激活raid 

mdadm -A /dev/md0 /dev/sdd1 /dev/sdc1 

 

5、替换设备: 

mdadm /dev/md0 -f /dev/sdb0 

把设备列为有问题 

mdadm /dev/md0 -r /dev/sdb0 

移除成员 

mdadm /dev/md0 -a /dev/sdc0 

添加成员 

mdadm /dev/md0  --re-add   /dev/sdc0 

重新把最近移除的RAID成员重新添加到RAID中 

 

6、扩容与缩减 

mdadm -G /dev/md0  -n4 

mdadm /dev/md5 -f /dev/sde1 

mdadm /dev/md5 -r /dev/sde1 

mdadm -G /dev/md5 --size=3

Linux 2017年08月30日 12733

LINUX进程管理

程序

保存在硬盘、光盘等介质中的可执行代码和数据

是静态保存的代码

进程

在CPU及内存中运行的程序代码

是动态执行的代码

父、子进程:每个进程可以创建一个或多个进程

 

ps命令

用途:查看静态的进程统计信息

格式:ps aux

      ps -elf

 

使用ps命令工具时,要注意选项前是否有”-“引导符,例如”e“和”-e”选项的含义是有区别的

ps命令结合“aux”选项使用时,将显示系统中所有的进程信息

    PID:该进程在系统中的数字ID号,在当前系统中是唯一的;    %CPU:CPU占用百分比;    %MEM:内存占用百分比

ps命令结合“-elf”选项使用时,将以长格式显示系统中所有的进程信息,包含更丰富的内容(其中PPID列表示进程的父进程的PID号)

 

image.png

定制属性

ps axo pid,comm,%cpu  --sort=%cpu | tail -1

 

进程状态

image.png

 

常见进程状态

image.png

 

进程优先级决定了CPU对进程调度顺序.在Linux中,进程优先级受nice值(-20-19)影响,默认值为0,nice值越小,则进程对cpu的使用权越具有优先性

调整进程优先级的命令:

nice(启动进程时使用)

nice  -n 5  vi

   renice (对于已经启动的进程)

                  renice 9 1236

 

top命令

用途:查看动态的进程排名信息

 

切换到虚拟机环境演示ps(包括ps aux、ps –elf的用法)、top命令的使用,并讲解输出结果中的要点(CPU占用、内存占用等)

从用途上对比ps、top两个命令的不同,可适当介绍top工具的命令按键:P、M、N、h、q

按P键根据CPU占用情况对进程列表进行排序

按M键根据内存占用情况进行排序

按N键根据启动时间进行排序

按h键可以获得top程序的在线帮助信息

按q键可以正常退出top程序

使用空格键可以强制更新进程状态显示

 

pgrep命令

用途:根据特定条件查询进程PID信息

 

[root@localhost ~]# pgrep "init"

1

[root@localhost ~]# pgrep -l "log"

2538 syslogd

2541 klogd

3221 login

[root@localhost ~]# pgrep -l -U teacher -t tty1

27483 bash

27584 vim

 

 

pgrep命令

用途:根据特定条件查询进程PID信息

 

[root@localhost ~]# pstree -aup

init,1

  ├─acpid,2866

  ├─atd,3060

  ├─auditd,2516

     ├─python,2518 /sbin/audispd

     └─{auditd},2517

……

[root@localhost ~]# pstree -ap teacher

bash,27483

  └─vim,27674 myfile.txt

 

手工启动

前台启动:用户输入命令,直接执行程序

后台启动:在命令行尾加入“&”符号

[root@localhost ~]# cp /dev/cdrom mycd.iso &

[1] 28454

 

调度启动

使用at命令,设置一次性计划任务

使用crontab命令,设置周期性计划任务

 

Ctrl+Z 组合键

将当前进程挂起,即调入后台并停止执行

jobs命令

查看处于后台的任务列表

fg命令

将处于后台的进程恢复到前台运行,需指定任务序号

[root@localhost ~]# jobs

[1]-   Stopped                 cp /dev/cdrom mycd.iso

[2]+  Stopped                 top

[root@localhost ~]# fg 1

 

Ctrl+C组合键

中断正在执行的命令

kill、killall命令

kill用于终止指定PID号的进程

killall用于终止指定名称的所有进程

-9 选项用于强制终止

[root@localhost ~]# pgrep -l "portmap"

2869  portmap

[root@localhost ~]# kill  -9  2869

[root@localhost ~]# killall -9 vim

[1]-  已杀死               /usr/bin/vim file1

[2]-  已杀死               /usr/bin/vim file2

 

pkill命令

用途:根据特定条件终止相应的进程

常用命令选项:

 -U:根据进程所属的用户名终止相应进程

 -t:根据进程所在的终端终止相应进程

[root@localhost ~]# pgrep –l -U "hackli"          

3045 bash

[root@localhost ~]# pkill -9 -U "hackli

[root@localhost ~]# pgrep -l U "hackli


Linux 2017年08月30日 37028

SELinux管理

DACMAC

1.DAC(Discretionary Access Control),主体是用户,访问目标文件由文件本身的权限决定,依进程运行时的用户身份决定其访问权限权限.

2.MAC(Mandatory Access Control),主体是进程,访问目标文件由策略决定.

 

SELinux配置文件  /etc/sysconfig/selinux

1.三种模式

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=enforcing           --selinux的工作状态

#     SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted            --指定保护级别

 

2.设置selinux的模式

    sestatus           查看SELinux状态

    semodule -l            查看selinux加载的内核模块

     getenforce          查询当前SELinx配置文件模式

    setenforce  1 | 0    Enforcing | Permissive

3.SElinux的五种元素

     ls -Z   查看文件的安全上下文

     ps -Z    查看进程的上下文

     id -Z    查看用户的上下文

     User:role:type:sensitivity:category

     User_u:object_r:tmp_t:s0:c0

4.selinux策略的控制文件  /selinux/booleans

     getsebool [ -a ] 查看某个(所有)控制策略启用情况

     setsebool [ -P ] 开启或者关闭某个策略,-P表示始终

5.例如查看samba的相关策略

    

image.png


Linux 2017年08月30日 16955

Server2016 安装IIS+PHP+Mysql教程

Server2016 安装IIS+PHP+Mysql教程


PHP安装与配置

php.ini-development为开发环境配置文件模板,生产环境请使用php.ini-production

  • 打开php.ini文件

    • 设置时区,找到 ;date.timezone = ,去掉前面的‘;’号,改为date.timezone = PRC

    • 开启常用扩展,找到; extension_dir = "ext",同样去掉前面的‘;’号。

    • 找到;extension=php_bz2.dll 该行,该行以下均是扩展,去掉前面的‘;’号即可。

    • 常用的扩展有:

    • extension=php_curl.dll

    • extension=php_fileinfo.dll

    • extension=php_gd2.dll

    • extension=php_mbstring.dll

    • extension=php_mysqli.dll

    • extension=php_openssl.dll

    • extension=php_pdo_mysql.dll

安装IIS

  • 开始菜单-服务器管理器-添加角色和功能-默认下一步下一步-选择角色(勾选Web服务器)-下一步-选择角色服务(勾选如图)-下一步-等待安装完成。  

配置IIS和PHP

  • 开始菜单-windows管理工具-Internet Information Services (IIS)管理器

  • 选择网站-处理程序映射-添加模块映射。   

  • 添加默认文档index.php 

安装Mysql,傻瓜式安装,这里就不啰嗦了

下载地址参考 https://dev.mysql.com/downloads/installer/

大功告成,验证时刻

  • 网站目录新建index.php 

  • 浏览器打开http://localhost/ ,见到下面的页面,就成功啦 


windows 2017年08月29日 42723

Hyper-v安装Server 2016 教程

Hyper-v安装Server 2016


windows10 开启hyper-v功能

  • 开始菜单 - windows系统 - 控制面板 - 程序 - 启用和关闭Windows功能 - 勾选“Hyper-V” - 确定 

打开hyper-v

  • 开始菜单 - windows管理工具 - hyper-V管理器

安装Server2016

接下来我就不多说了,和安装windows10差不多的步骤

如需要激活请参考 http://www.aiweibk.com/5315.html


windows 2017年08月27日 46867

PHP批量检查并清除bom头

Cannot send session cache limiter - headers already sent (output started at...) on line ...

在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)

<?php
if (isset($_GET['dir'])) {
    // config the basedir
    $basedir = $_GET['dir'];
} else {
    $basedir = '.';
}

$auto = 1;

checkdir($basedir);
function checkdir($basedir)
{
    if ($dh = opendir($basedir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..') {
                if (!is_dir($basedir . "/" . $file)) {
                    // 如果是文件
                    echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . " 
";
                } else {
                    $dirname = $basedir . "/" . $file; // 如果是目录
                    checkdir($dirname); // 递归
                }
            }
        }
        closedir($dh);
    }
}
function checkBOM($filename)
{
    global $auto;
    $contents   = file_get_contents($filename);
    $charset[1] = substr($contents, 0, 1);
    $charset[2] = substr($contents, 1, 1);
    $charset[3] = substr($contents, 2, 1);
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
        // BOM
        // 的前三个字符的ASCII
        // 码分别为
        // 239
        // 187
        // 191
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite($filename, $rest);
            return ("");
        } else {
            return ("");
        }
    } else {
        return ("BOM Not Found.");
    }

}
function rewrite($filename, $data)
{
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}


PHP 2017年08月26日 20000

LINUX计划任务管理_AT与crontab

at命令

一次性计划任务

服务脚本名称:/etc/init.d/atd

设置格式:at  [HH:MM]  [yyyy-mm-dd] 

[root@localhost ~]# date
2011年 02月 21日 星期一 14:45:05 CST
[root@localhost ~]# at 14:55 2011-02-21
at> pgrep -U root | wc -l > /tmp/ps.root
at>
job 1 at 2011-02-21 14:55 
[root@localhost ~]# cat /tmp/ps.root
63

案例

在当天的21:30时自动关闭当前系统

root@localhost ~]# at 21:30
at> shutdown -h now
at>
job 7 at 2011-02-21 21:30

查看未执行任务列表

[root@localhost ~]# atq
1       2011-02-21 14:55 a root
2       2011-02-21 21:30 a root

删除第二条任务

[root@localhost ~]# atrm 2
[root@localhost ~]# atq
1       2011-02-21 14:55 a root

at计划任务 所在目录/var/spool/at

at的控制文件/etc/at.allow和 /etc/at.deny 

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

crontab命令

按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务 

启用周期性任务有一个前提条件,即对应的系统服务crond必须已经运行

全局配置和系统默认配置中的内容一般不需要用户去修改,用户只需设置/var/spool/cron/目录下与本帐号同名的文件即可,接下来介绍如何设置用户自己的计划任务

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

管理cron计划任务

编辑计划任务:crontab  -e  [-u  用户名]

查看计划任务:crontab  -l  [-u  用户名]

删除计划任务:crontab  -r  [-u  用户名]

 

用户只需执行“crontab -e”命令后会自动调用文本编辑器(默认为vi)并打开“/var/spool/cron/用户名”文件,无需手动指定文件位置

image.png

  • 时间数值的特殊表示方法

    • *       表示该范围内的任意时间

    • ,    表示间隔的多个不连续时间点

    • -       表示一个连续的时间范围

    • /       指定间隔的时间频率

  • 应用示例

    • 0  17        *  *  1-5        周一到周五每天17:00

    • 30  8        *  *  1,3,5          每周一、三、五的8点30分

    • 0  8-18/2        *  *  *          8点到18点之间每隔2小时

    • 0  *        */3  *  *              每隔3天

 

  • 示例1(root用户)

    • 每天早上7:50自动开启sshd服务,22点50时关闭

    • 每隔5天清空一次FTP服务器公共目录/var/ftp/pub

    • 每周六的7:30时,重新启动httpd服务

    • 每周一、三、五的17:30时,打包备份/etc/httpd目录

[root@localhost root]# crontab -e
50 7 * * *   /sbin/service  sshd  start
50 22 * * *   /sbin/service  sshd  stop
0 0 */5 * *   /bin/rm –rf /var/ftp/pub/*
30 7 * * 6   /sbin/service  httpd  restart
30 17 * * 1,3,5   /bin/tar  jcf  httpdconf.tar.bz2  /etc/httpd/
  • 示例2jerry用户)

    • 每周日晚上23:55时将“/etc/passwd文件的内容复制到宿主目录中,保存为pwd.txt文件

[root@localhost root]# crontab -e -u  jerry
55 23 * * 7   /bin/cp  /etc/passwd  /home/jerry/pwd.txt
  • 示例3

    • root用户查看自己的计划任务列表

    • 查看并删除jerry用户设置的计划任务

[root@localhost root]# crontab -l -u jerry
55 23 * * 7  /bin/cp /etc/passwd /home/jerry/pwd.txt
[root@localhost root]# crontab -r -u jerry
[root@localhost root]# crontab -l -u jerry
no crontab for jerry
[root@localhost root]#

Crontab安全性

默认情况下,所有用户都可使用cron工具,要限制对cron的访问,可以使用/etc/cron.allow与/etc/cron.deny文件。

1、这两个文件都不存在时,每个用户都可以访问cron工具。

2、若两个文件都存在,只有/etc/cron.allow中的用户可以访问cron工具,忽略/etc/cron.deny文件

3、如果/etc/deny文件不存在,则/etc/allow中的用户不可以访问cron工具。


Linux 2017年08月16日 19840

排行

解决方案

网站建设

专业企业官网建设,塑造企业形象,传递企业价值

系统开发

系统软件开发,用心思考,用心设计,用心体验

技术支撑

打破技术瓶颈,让不堪重负的项目起死回生

业务中台

构建全渠道一体化运营能力,实现全链路数字化

文案策划

文案撰写、营销策划,专注品牌全案

新媒体运营

一站式解决企业互联网营销痛点和难题

以技术的力量,改变互联网

联系我们
鄂ICP备19028750号 @copyright 2019 tech1024.com