年度归档: 2019 年

  • PHP 开发 foreach list 配套 代码实例

    PHP 开发 foreach list 配套 代码实例

    我们日常的PHP开发中,经常会使用到 foreach 的循环,但是如果是更深层次的数组的话就需要 each 函数来进行配套使用 。

    foreach each代码实例

    <?php
    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
    while (list($key, $val) = each($fruit)) {
        echo "$key => $val\n";
    }

    输出

    a => apple

    b => banana

    c => cranberry

    但是each函数在php7.2之后就被废除了。

    each

    (PHP 4, PHP 5, PHP 7)

    each — Return the current key and value pair from an array and advance the array cursorWarning

    This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.

    foeach list 代码使用实例

    php7.2 each 被废除之后怎么办呢?我们就需要使用到 foeach 、 list函数的配套使用了。代码实例如下:

    <?php
    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
    foreach ($fruit as list($key, $val) ) {
        echo "$key => $val\n";
    }

    这样修改以后跟上面的while 、each配合使用效果一致。

  • Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    记录一下在MacOS下利用Docker搭建Nginx+php-fpm+MariaDB的常用命令:

    # 拉取镜像资源
    docker pull mariadb && docker pull bitnami/php-fpm && docker pull nginx
    # 本地Docoker建立顺序
    docker run -d --name jmysql --restart=always -e MYSQL_ROOT_PASSWORD=jjjjjj -e TZ="Asia/Shanghai" mariadb
    docker run -d --name jphp-fpm -v /wwwroot:/data/wwwroot --restart=always -e TZ="Asia/Shanghai" --link jmysql bitnami/php-fpm
    docker run -d --name jnginx -v /DockerConfig/nginx/conf.d:/etc/nginx/conf.d -v /wwwroot:/data/wwwroot -p 8081:80 --restart=always -e TZ="Asia/Shanghai" --link jphp-fpm --link jmysql nginx
    #启动顺序
    docker start jmysql
    docker start jphp-fpm
    docker start jnginx

  • PHP如何正则表达式获取SQL语句中的表名?

    PHP如何正则表达式获取SQL语句中的表名?

    有一个SQL语句集合,里面可能有select、select ... left join、update、delete、insert。

    要从这语句集合中获取到所有的表名,代码如下:

    <?php
    function get_sql_tables($sqlString) {
        $sqlString = str_replace( '`','',trim($sqlString) ).' AND 1=1 ';
        $key = strtolower(substr($sqlString, 0, 6));
        if( $key === 'select' ){
            $tmp = explode('where' , strtolower( trim( $sqlString ) ) );
            $tmp = explode('from',$tmp[0]);
            if ( strpos($tmp[1],',') !== false && ! stristr( $tmp[1],'select')){
                $tmp = explode( ',' , $tmp[1] );
                foreach( $tmp as $k => $v ){
                    $v = trim( $v );
                    if( strpos( $v , ' ') !== false ){
                        $tv = explode(' ' , $v);
                        $return[] = $tv[0];
                    }
                }
                return $return;
            }else{
                $expression = '/((SELECT.+?FROM)|(LEFT\\s+JOIN|JOIN|LEFT))[\\s`]+?(\\w+)[\\s`]+?/is';
            }
        }else if( $key === 'delete' ){
            $expression = '/DELETE\\s+?FROM[\\s`]+?(\\w+)[\\s`]+?/is';
        }else if( $key === 'insert' ){
            $expression = '/INSERT\\s+?INTO[\\s`]+?(\\w+)[\\s`]+?/is';
        }else if( $key === 'update' ){
            $tmp = explode( 'set' , strtolower( str_replace('`','',trim( $sqlString ) ) ) );
            $tmp = explode( 'update' , $tmp[0] );
            if ( strpos($tmp[1] , ',' ) !== false && ! stristr( $tmp[1] , 'update' ) ){
                $tmp = explode( ',' , $tmp[1] );
                foreach( $tmp as $k => $v ){
                    $v = trim( $v );
                    if( strpos( $v , ' ') !== false ){
                        $tv = explode(' ' , $v);
                        $return[] = $tv[0];
                    }
                }
                return $return;
            }else{
                $expression = '/UPDATE[\\s`]+?(\\w+)[\\s`]+?/is';
            }
        }
        preg_match_all($expression, $sqlString, $matches);
        return array_unique(array_pop($matches));
    }

    使用姿势:

    <?php
    $sql = "select count(*) as count from order as a left join user as b on a.user_id = b.user_id where a.title like '%老季%'";
    var_dump(get_sql_tables());#输出结果:order和user
    $sql = "select * from T_5 a, T_6 b , T_7 c where a.id=b.id";
    var_dump(get_sql_tables());#输出结果:Array ( [0] => T_5 [1] => T_6 [2] => T_7 )


  • WordPress 插件开发 自定义文章类型中 add_meta_box  如何使用原生的分类/标签显示并保存数据?

    WordPress 插件开发 自定义文章类型中 add_meta_box 如何使用原生的分类/标签显示并保存数据?

    近日我们在改版 WordPress 采集插件 wp-jpost , 将代码内容进行重构,我们尽量使用 WordPress 原生的代码来做。

    当我们在插件开发中使用 register_post_type 函数来自定义文章类型(wordpress使用register_post_type 函数创建自定义文章类型)时,可能需要 register_taxonomy 来注册一个对应的分类,但是我们这里想使用原生的 分类时,一开始我们使用了 add_meta_box (WordPress函数:add meta box(自定义添加Meta模块))的 post_categories_meta_box 来进行注册。

    但是后台可以正常显示,但是保存数据时并不能将分类数据保存下来,后来我们查阅相关文档之后发现必须使用 register_taxonomy_for_object_type 函数来调用。同样的标签类型也可以使用。

    <?php
    add_action( 'init', 'jiloc_add_page_cats' );
    function jiloc_add_page_cats(){
        $slug = "jiloc";
        register_taxonomy_for_object_type( 'category', $slug );
        register_taxonomy_for_object_type( 'post_tag', $slug );
    }
    

    WordPress函数:register post type (自定义文章类型)用法和范例 , 在这篇文章中我们进行了详细的记载。

  • Javascript开发jQuery Ajax 返回值如何阻止form表单提交?

    Javascript开发jQuery Ajax 返回值如何阻止form表单提交?

    在实际的开发业务中,我们一般会利用ajax检测一些东西,然后阻止表单提交。如果我们在 ajax 代码中直接使用 return false; 这里必须在 $.ajax 中设置 async:false 任然无法阻止表单提交,所以我们使用 the_submit 来控制表单是否提交。

    JAVASCRIPT代码部分

    <script type="text/javascript">
    $(function() {
        $("#addForm input.btn_submit").click(function(){
            var the_submit = true;
            if( $("input.name").val() == "" ){
                alert('请填写机房');
                $("input.name").focus();
                the_submit = false;
            }
            if( $("select.status").val() == "" ){
                alert('请选择状态');
                $("select.status").focus();
                the_submit = false;
            }
    	$.ajax({
                url:"/idc_xiaoshou/check_third_party_computer_room_name",
                dataType:"html",
                type:"post",
                data:{ name:$('input.name').val() },
                async:false,////////////
                success:function(data){
                  console.log(data);
                    if( data == 0 ){
                        alert("机房名重复");
                        $("input.name").focus();
                        the_submit = false;
                    }
                },
                error:function(data){
                    alert('UNKNOW ERROR');
                    the_submit = false;
                }
    	});
            if( !the_submit ){
                return false;
            }
        });
    
    });	
    </script>

    HTML代码部分

                <form enctype="multipart/form-data" action="/idc_xiaoshou/save_third_party_computer_room" method="post" id="addForm" name="form1" >     
                  <input type="hidden" name="id" value="<?php echo $obj['id']; ?>"/>
                  <table border="0" cellpadding="0" cellspacing="0" class="table2" style="margin:0 auto">          
                      <tr>
                          <td align="right">机房:</td>
                          <td><input class="textinput1 name" value="<?php echo $obj['name'];?>" type="text" name="name" style="width: 200px;"/></td>
                          <td><span class="color1">*</span></td>
                      </tr>
                      <tr>
                          <td align="right">状态:</td>
                          <td>
                              <select style="min-width: 100px" name="status" class="textinput1 status">
                                  <option value="" >所有</option>
                                  <?php foreach( $statusAry as $v):?>
                                  <option value="<?php echo $v;?>"><?php echo $v;?></option>
                                  <?php endforeach;?>
                              </select>        
                          </td>
                          <td><span class="color1">*</span></td>
                      </tr>
                      <tr>
                          <td align="right">备注:</td>
                          <td><textarea name="others" class="textinput1" cols="50" rows="10"><?php echo $obj['others']?></textarea></td>
                          <td></td>
                      </tr>        
                      <tr>
                          <td></td>
                          <td colspan="2"><input type="submit" value="提交" class="btn_submit"/></td>
                      </tr>
                </table>
                </form> 
  • 什么是Docker?Docker的架构是什么样的?

    什么是Docker?Docker的架构是什么样的?

    什么是Docker?

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    Docker的架构

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

    Docker 容器通过 Docker 镜像来创建。

    容器与镜像的关系类似于面向对象编程中的对象与类。

    Docker面向对象
    容器对象
    镜像类
    Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板。
    Docker 容器(Container)容器是独立运行的一个或一组应用。
    Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
    Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
    Docker 仓库(Registry)Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
    Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
  • Docker安装Mariadb数据库 设置root密码 图文教程

    Docker安装Mariadb数据库 设置root密码 图文教程

    前面我们介绍了Docker的内容:

    下面我们记录一下如何安装Mariadb/MySQL数据库。

    镜像库搜索安装Mariadb

    搜索Mariadb

    $ docker search mariadb
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    mariadb MariaDB is a community-developed fork of MyS… 2848 [OK]
    bitnami/mariadb Bitnami MariaDB Docker Image 98 [OK]
    linuxserver/mariadb A Mariadb container, brought to you by Linux… 75
    toughiq/mariadb-cluster Dockerized Automated MariaDB Galera Cluster … 38 [OK]
    colinmollenhour/mariadb-galera-swarm MariaDb w/ Galera Cluster, DNS-based service… 26 [OK]
    panubo/mariadb-galera MariaDB Galera Cluster 23 [OK]
    lsioarmhf/mariadb ARMHF based Linuxserver.io image of mariadb 18
    million12/mariadb MariaDB 10 – ~60Mb Alpine UTF-8 16 [OK]
    webhippie/mariadb Docker images for MariaDB 15 [OK]
    bianjp/mariadb-alpine Lightweight MariaDB docker image with Alpine… 9 [OK]
    mariadb/server MariaDB Server is a modern database for mode… 9 [OK]
    centos/mariadb-101-centos7 MariaDB 10.1 SQL database server 9
    severalnines/mariadb A homogeneous MariaDB Galera Cluster image t… 7 [OK]
    centos/mariadb-102-centos7 MariaDB 10.2 SQL database server 5
    wodby/mariadb Alpine-based MariaDB container image with or… 4 [OK]
    tutum/mariadb Base docker image to run a MariaDB database … 4
    circleci/mariadb CircleCI images for MariaDB 3 [OK]
    rightctrl/mariadb Mariadb with Galera support 2 [OK]
    jonbaldie/mariadb Fast, simple, and lightweight MariaDB Docker… 2 [OK]
    kitpages/mariadb-galera MariaDB with Galera 2 [OK]
    tiredofit/mariadb-backup MariaDB Backup image to backup MariaDB/MySQL… 1 [OK]
    demyx/mariadb FROM webhippie/mariadb:latest 0
    jelastic/mariadb An image of the MariaDB SQL database server … 0
    ansibleplaybookbundle/mariadb-apb An APB which deploys RHSCL MariaDB 0 [OK]
    alvistack/mariadb Docker Image Packaging for MariaDB 0 [OK]

    安装Mariadb

    docker pull mariadb

    运行 Mariadb 镜像

    运行Mariadb服务

    docker run --name jmariadb -p 3306:3306 -d -v D:\mysqlData:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=jiloc mariadb
    • -e MYSQL_ROOT_PASSWORD 设置数据库root密码 jiloc
    • -v 映射数据库文件位置
    • --name 设置容器别名

    ============以下是配置Mariadb的config文件映射============

    查看容器ID

    docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    c63468060135 mariadb “docker-entrypoint.s…” 34 seconds ago Exited (1) 33 seconds ago jmariadb
    c948b4856671 nginx “nginx -g ‘daemon of…” 21 minutes ago Up 20 minutes 0.0.0.0:8081->80/tcp jnginx
    d593465ab743 bitnami/php-fpm “php-fpm -F –pid /o…” About an hour ago Up About an hour 9000/tcp jphp-fpm

    创建配置文件夹/文件,挂载数据

    创建 D:\DockerConfig\mysql ,我们将这个文件夹作为一会Docker将要映射的文件位置。

    docker run -d -p 3306:3306 --name mariadb -v D:\DockerConfig\mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jiloc mariadb

    测试连接

    docker ps -a

    确认数据库实例在运行,然后我们这里使用Navicat Premium 进行连接

  • Docker 安装 PHP 并配合 Nginx 运行 phpinfo

    Docker 安装 PHP 并配合 Nginx 运行 phpinfo

    搜索安装 PHP 镜像

    docker pull php

    查找Docker Hub上的php镜像

    $ docker search php
    NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    php                       While designed for web development, the PH...   1232      [OK]       
    richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   207                  [OK]
    phpmyadmin/phpmyadmin     A web interface for MySQL and MariaDB.          123                  [OK]
    eboraas/apache-php        PHP5 on Apache (with SSL support), built o...   69                   [OK]
    php-zendserver            Zend Server - the integrated PHP applicati...   69        [OK]       
    million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   67                   [OK]
    webdevops/php-nginx       Nginx with PHP-FPM                              39                   [OK]
    webdevops/php-apache      Apache with PHP-FPM (based on webdevops/php)    14                   [OK]
    phpunit/phpunit           PHPUnit is a programmer-oriented testing f...   14                   [OK]
    tetraweb/php              PHP 5.3, 5.4, 5.5, 5.6, 7.0 for CI and run...   12                   [OK]
    webdevops/php             PHP (FPM and CLI) service container             10                   [OK]
    ...

    这里我们拉取官方的镜像,标签为5.6-fpm

    $ docker pull bitnami/php-fpm

    等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为5.6-fpm的镜像。

    $ docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
     bitnami/php-fpm            latest              84abb84939ff        About an hour ago   246MB
     php                        latest              f0357c41bff5        10 days ago         367MB
     nginx                      latest              719cd2e3ed04        2 weeks ago         109MB
     docker4w/nsenter-dockerd   latest              2f1c802f322f        8 months ago        187kB

    Nginx + PHP 部署

    Nginx 部署可以查看:Docker 安装 Nginx,一些 Nginx 的配置参考这篇文章。

    启动PHP容器

    $ docker run -d --name jphp-fpm -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc  bitnami/php-fpm

    命令说明:

    • –name jphp-fpm : 将容器命名为 jphp-fpm。
    • -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc 将主机中项目的目录 POWER_IDC 挂载到容器的data/wwwroot/poweridc

    查看php容器IP

    docker inspect --format '{{ .NetworkSettings.IPAddress }}' jphp-fpm

    配置Nginx的虚拟主机文件

    在该目录下修改 D:\DockerConfig\nginx\conf.d\poweridc.conf 文件,内容如下:

    server {
        listen       80;
        server_name  poweridc;
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        location / {
            root   /data/wwwroot/poweridc;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            #root           html;
            fastcgi_pass   jphp-fpm:9000;#下面用了--link参数,hosts里会自动解析ip
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /data/wwwroot/poweridc/$fastcgi_script_name;
            include        fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    

    配置文件说明:

    • 172.17.0.3:9000: 表示 php-fpm 服务的容器地址,上面已经说明。

    启动Nginx

    docker run -d -p 8081:80 --name jnginx -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc -v D:\DockerConfig\nginx\conf.d\poweridc.conf:/etc/nginx/conf.d/poweridc.conf -v D:\DockerConfig\nginx\logs:/etc/nginx/logs --link jphp-fpm:bitnami/php-fpm nginx
    • -p 8081:80: 端口映射,把 nginx 中的 80 映射到本地的 8081 端口。
    • D:\wwwroot\POWER_IDC: 是本地 html 文件的存储目录,/data/wwwroot/poweridc 是容器内 html 文件的存储目录。
    • D:\DockerConfig\nginx\conf.d\poweridc.conf: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d/poweridc.conf 是容器内 nginx 配置文件的存储目录。

    运行php文件

    接下来我们在 D:\wwwroot\POWER_IDC 目录下创建 info.php,代码如下:

    <?php phpinfo();

    浏览器打开 http://poweridc:8081/info.php,显示如下:

  • Docker 安装 Nginx 映射本地文件 多虚拟主机 图文教程

    Docker 安装 Nginx 映射本地文件 多虚拟主机 图文教程

    Docker命令行如何安装Nginx?

    docker pull nginx 命令安装

    查找 Docker Hub 上的 nginx 镜像

    $ docker search nginx
    NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx                     Official build of Nginx.                        3260      [OK]       
    jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   674                  [OK]
    richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   207                  [OK]
    million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   67                   [OK]
    maxexcloo/nginx-php       Docker framework container with Nginx and ...   57                   [OK]
    ...

    这里我们拉取官方的镜像

    $ docker pull nginx

    等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像。

    $ docker images nginx
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              555bbd91e13c        3 days ago          182.8 MB

    Docker中如何启动Nginx实例?

    以下命令使用 NGINX 默认的配置来启动一个 Nginx 容器实例:

    $ docker run --name jiloc-nginx-test -p 8081:80 -d nginx
    • jiloc-nginx-test 容器名称。
    • the -d设置容器在在后台一直运行。
    • the -p 端口进行映射,将本地 8081 端口映射到容器内部的 80 端口。

    执行以上命令会生成一串字符串,类似 0c3b0eaaa36657306e4586cfd613f5e37bbff0423cc3e58ee3683b4a1f1458f5,这个表示容器的 ID,一般可作为日志的文件名。

    我们可以使用 docker ps 命令查看容器是否有在运行:

    $ docker ps
    CONTAINER ID        IMAGE        ...               PORTS                  NAMES
    0c3b0eaaa366        nginx        ...      0.0.0.0:8081->80/tcp   jiloc-nginx-test

    PORTS 部分表示端口映射,本地的 8081 端口映射到容器内部的 80 端口。

    在浏览器中打开 http://127.0.0.1:8081/,效果如下:


    Docker部署nginx设置配置文件

    首先,创建目录 nginx, 用于存放后面的相关东西。

    $ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

    拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:

    docker cp 0c3b0eaaa366:/etc/nginx/nginx.conf ~/nginx/conf
    • www: 目录将映射为 nginx 容器配置的虚拟目录。
    • logs: 目录将映射为 nginx 容器的日志目录。
    • conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
    • :ro 只读

    部署命令

    $ docker run -d -p 8082:80 --name jiloc-nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v ~/nginx/logs:/var/log/nginx nginx

    已有源码 Windows 本地映射,启动Docker开启虚拟主机

    docker run -d -p 8081:80 --name jnginx -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc -v D:\DockerConfig\nginx\conf.d\poweridc.conf:/etc/nginx/conf.d/poweridc.conf nginx

    命令说明:

    • -p 8082:80: 将容器的 80 端口映射到主机的 8082 端口。
    • –name jiloc-nginx-test-web:将容器命名为 jiloc-nginx-test-web。
    • -v ~/nginx/www:/usr/share/nginx/html:将我们自己创建的 www 目录挂载到容器的 /usr/share/nginx/html。
    • -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。
    • -v ~/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。

    启动以上命令后进入 ~/nginx/www 目录:

    $ cd ~/nginx/www

    创建 index.html 文件,内容如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(laoji.org)</title>
    </head>
    <body>
        <h1>我的第一个标题</h1>
        <p>我的第一个段落。</p>
    </body>
    </html>

    输出结果为:

    我们这里使用的是自定义域名,设置方法请看:

    Linux Windows MacOS 等系统中hosts的原理及作用

    相关命令

    如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:

    $ docker kill --signal=SIGHUP container-name

    重启 NGINX 容器命令:

    $ docker restart container-name
  • Docker中快速删除所有容器

    Docker中快速删除所有容器

    查看运行容器

    docker ps

    查看所有容器

    docker ps -a

    进入容器

    其中字符串为容器ID:

    docker exec -it d27bd3008ad9 /bin/bash

    停用全部运行中的容器:

    docker stop $(docker ps -q)

    删除全部容器:

    docker rm $(docker ps -aq)

    一条命令实现停用并删除容器:

    docker stop $(docker ps -q) & docker rm $(docker ps -aq)
  • jQuery获取append添加html内容后的动态元素:live()和on()

    jQuery获取append添加html内容后的动态元素:live()和on()

    jquery通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)

    $("ul").append("<li class='name'>名称</li>");

    错误方法:

    $(“.name”).click(function (){
    alert(“获取到append后的节点”);
    })

    正确方法:

    $(".name").live("click", function() {
        alert("获取到了");
    });

    jquery 1.7+之后用on代替live,on()方法在被选元素及子元素上添加一个或多个事件处理程序

    <div id=”one”></div>
    $(‘#one’).append(“<p id=’two’>test1</p>”);
    append后结果:
    $(‘#one’).append(“<p id=’two’>test1</p>”);

    错误示例:

    $("#two").on("click",function(data){
        alert(data);
    });

    正确方法:

    $("body").on("click","#two",function(data){
        alert(data);
    });
  • 微信小程序开发 批量选择上传图片 代码实例

    微信小程序开发 批量选择上传图片 代码实例

    最近在做微信开发,下面记录一下wx.chooseImage 、wx.uploadImage接口上传多张图片的代码实例。

    JAVASCRIPT代码实例:

    $(function(){
        wx.config({
    	debug: false,
    	appId: '<?php echo $signPackage["appId"];?>',
    	timestamp: <?php echo $signPackage["timestamp"];?>,
    	nonceStr: '<?php echo $signPackage["nonceStr"];?>',
    	signature: '<?php echo $signPackage["signature"];?>',
    	jsApiList: [
    	    'checkJsApi',
    	    'chooseImage',
    	    'previewImage',
    	    'uploadImage',
    	    'downloadImage'
    	]
        });
        wx.ready(function () {    
            var localIds = [];
    	$(".weui_uploader_input").click(function(){
    	    var that = $(this);
    	    wx.chooseImage({
    		count: 9,
    		sourceType: ['camera', 'album'], 
    		success: function (res) {
    		    localIds = res.localIds;
    		    syncUpload(that);		
    		}
    	    });
    	});
    	
            function syncUpload() {
                if (!localIds.length) {
                    console.log('上传成功!');
                } else {
                    var localId = localIds.pop();
                    var select_name = that.attr('select_name');
                    wx.uploadImage({
                        localId: localId,
                        success: function() {
                            syncUpload();
                        }
                    });
                }
            }
        });
    });

    localIds 为上传图片队列。

WeChat
↑