Categories
php

PHP unit

测试用例例子

namespace Tests\Unit;


//use PHPUnit\Framework\TestCase;
//转换成Tests\TestCase 才能正确初始化laravel Application

use Tests\TestCase;

class ExampleTest extends TestCase
{

    //前置条件
     public function setUp()
    {
        parent::setUp();
    }

    /**
     * A basic test example.
     *
     * @return void
     */
    //测试的方法一定要test开头
    public function testBasicTest()
    {
        print "\n";
        echo("进入测试");
        $this->assertTrue(true);
    }
}

执行测试用例:


php vendor/phpunit/phpunit/phpunit ./tests/Unit/ExampleTest.php

查看命令情况:

php vendor/phpunit/phpunit/phpunit -h 
Categories
php

Laravel redis使用

laravel 使用redis 需要先安装redis包

composer require predis/predis

redis的配置文件是:config/database.php
 
 'redis' => [
 
        'client' => 'predis', //指定redis驱动为predis
 
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD',null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
 
    ],

在 .env 配置具体参数
REDIS_CLIENT=predis
    //也可在这里指定redis驱动为predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
操作代码

use Illuminate\Support\Facades\Redis;

//set存数据 创建一个 key 并设置value 
Redis::set('key','value'); 
 
//get命令用于获取指定 key 的值,key不存在,返回null,如果key储存的值不是字符串类型,返回一个错误。
var_dump(Redis::get('key'));
 
//del 删除 成功删除返回 true, 失败则返回 false
Redis::del('key');
 
//mset存储多个 key 对应的 value
$array= array(
		'user1'=>'张三',
		'user2'=>'李四',
		'user3'=>'王五'
);
redis::mset($array); // 存储多个 key 对应的 value
 
// Mget返回所有(一个或多个)给定 key 的值,给定的 key 里面,key 不存在,这个 key 返回特殊值 nil
 
var_dump(redis::mget (array_keys( $array))); //获取多个key对应的value
 
//Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key存储不是字符串,返回错误。
var_dump(redis::strlen('key'));
 
//substr 获取第一到第三位字符
var_dump(Redis::substr('key',0,2));
 
//根据键名模糊搜索
var_dump(Redis::keys('use*'));//模糊搜索
 
//获取缓存时间
Redis::ttl('str2');//获取缓存时间
 
//exists检测是否存在某值
Redis::exists ( 'foo' ) ; //true

redis get

 'user' => Redis::get('user:profile:'.$id)

redis lrange

$values = Redis::lrange('names', 5, 10);

命令模式

$values = Redis::command('lrange', ['name', 5, 10]);

指定连接返回redis对象

$redis = Redis::connection('connection-name');

redis 事务


Redis::transaction(function ($redis) {
    $redis->incr('user_visits', 1);
    $redis->incr('total_visits', 1);
});

pipeline模式

Redis::pipeline(function ($pipe) {
    for ($i = 0; $i < 1000; $i++) {
        $pipe->set("key:$i", $i);
    }
});

redis消息队列(用laravel command 生成监听类)

消息订阅

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;

class RedisSubscribe extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'redis:subscribe';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Subscribe to a Redis channel';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        Redis::subscribe(['test-channel'], function ($message) {
            echo $message;
        });
    }
}

消息发布

 Redis::publish('test-channel', json_encode([
        'name' => 'Adam Wathan'
    ]));
Categories
nodejs

Taro

小程序 公众号 等多端开发 nodejs框架

Categories
nodejs

pm2

pm2 为nodejs 进程管理器 为某个nodejs进程提供守护进程功能

npm install -g pm2 全局安装

pm2 start app.js 替代 node app.js 以守护进程启动app.js

pm2 start app.js –name wb123 以守护进程启动app.js 并命名为wb123

pm2 start bin/www –watch 以守护进程启动bin/www 并监控文件变化自动重启

pm2 restart wb123 重启wb123服务

pm2 stop wb123 停止服务 pm2 stop all 停止所有

pm2 delete www 删除www服务 pm2 delete all 删除所有

pm2 list 查看所有进程

pm2 monit 查看进程内存等

pm2 -h 查看命令详细

pm2 启动其他进程 在当前文件写下一个 xxx.json的脚本

pm2 start xxx.json 执行

脚本内容如下

{
  "name": "应用进程名称",
  "args": "传递给脚本的参数",
  "script": "启动的脚本路径",
  "exec_interpreter": "指定的脚本解释器",
  "exec_mode": "fork",
  "max_memory_restart": "100M",
  //其它参数
  "watch": [  // 监控变化的目录,一旦变化,自动重启
    "bin",
    "routers"
  ],
  "ignore_watch" : [  // 从监控目录中排除
    "node_modules", 
    "logs",
    "public"
  ],
  "watch_options": {
    "followSymlinks": false
  },
  "error_file" : "./logs/app-err.log",  // 错误日志路径
  "out_file"   : "./logs/app-out.log",  // 普通日志路径
  "env": {
      "NODE_ENV": "production"  // 环境参数,当前指定为生产环境
  }
}

php脚本

{
  "name": "php-socket",
  "args": "",
  "script": "./include/Socket.php",
  "exec_interpreter": "php.exe",
  "exec_mode": "fork",
  "max_memory_restart": "100M"
}

java jar包

{
    "name": "my-server",
    "script": "/usr/bin/java",
    "args": [
        "-jar",
        "server.jar"
    ],
    "exec_interpreter": "",
    "exec_mode": "fork"
}
{
      "name": "yhtAdmin",

    "script": "java",

    "args": [

        "-jar",

        "background-0.0.1-SNAPSHOT.jar"

    ],

   "error_file":"./log/err.log",

   "out_file":"./log/out.log",

   "exec_interpreter": "",

   "exec_mode": "fork"
}
Categories
php

carbon php 日期操作

laravel Eloquent 中自动把 datetime数据格式化为字符串 yyyy-MM-ddTHH:ii:ss:SSSSz

需要使用 Carbon::parse($value) 反序列化字符串为日期 再执行format(‘Y-M-d H:i:S’) 输出

Carbon 是 一个php的日期处理库

Categories
php

php 字符串操作

php 拼接

'/admin/doctors/'.strval($appointment->doctor->id)

. 连接字符串

php 字符串转换 转换为字符串

strval($appointment->doctor->id)

Categories
php

php 标准输出输入流

因为php默认的输入流就是请求 默认的输出流就是响应 当我们需要再控制台打印数据该如何办呢?

$fp = fopen("php://stdout", 'a');

fputs($fp, "hello\n");

有几个php://的流位php辅助的流

上图为控制台输出

php://stderr位控制台异常流

php://stdin为控制台输入流

Categories
php

Laravel-Admin

https://laravel-admin.org laravel-admin 文档

类似于ruby on rails (grails) laravel-admin 具有大量代码生成命令,(本身就是laravel的特性)代码区分 model controller view

然而view是由具体php类(继承自renderable)来定义的 高内聚 却 提高了门槛

这个是laravel-admin最大的特点舍弃了编辑html的机会(不用blade模板),用纯php代码书写视图(放弃了灵活性,但提高了效率,类似于extjs 用js把html封装成component对象 其渲染的核心方法也是render 接口是)

创建控制器 UserController 微控制器名称 –model指定数据库对象

php artisan admin:make UserController --model=App\User

初始化laravel-admin 会执行数据库初始化 并且 把laravel-admin的初始化文件 复制到 laravel下面

php artisan admin:install

自动生成 数据库表对象

php artisan make:model XXX

view组件:

Grid 的使用

  $grid = new Grid(new Appointment());

  $grid->model()->where('status', 1)->orderBy('created_at','desc');

Categories
php

php artisan

该命令是laravel下的项目命令

其实是用php执行项目下的artisan文件(php文件)

该文件会接受参数(通过$argv获取,$argc显示参数个数)

Categories
php

PHP 基础

PHP变量以$

字符串模板 : $temp = “Hello , {$var1} !”;

if语法:(注:是 elseif 不是else if)

if(true){

}elseif(false){

}else{

}

while语法:

while(true){ 

}

数组语法:

array(key=>value,key=>value)

[key=>value,key=>value]  //映射类数组

[value1,value2]  //顺序类数组

count($array) //返回数组长度

数组迭代:

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

}

foreach ($array as $value){

}

函数:

function($variable){

return $value

}

模块: 通过require引入某个文件 通过use 引入命名空间

require “another.php”

use “/Robin/luo/Another”

类:

class Another {

public $property

public function __construct($property){

this->property = $property;

}

public function func($param){

return $value;

}

public static function func1(){

}

}

$object = new Another();

$object1 = new Another(1);

$object->property = 1;

$object->func(1);

Another::func1();

命名空间:通过namespace 定义 用\进行解析不是java的.

namespace Robin;

\Robin\luo::reading();