2020年01月

2020-1-2 周四

一个前端手机调试工具:Eruda
感觉还挺好的,基本可以满足需求,在手机上调试可以不用抓包了

2020-1-3 周五

多线程运行 PHP 单元测试
https://github.com/paratestphp/paratest

2020-1-4 周六

Linux 子系统中访问 Windows 的文件:

 cd /mnt

 

列出文件就可以发现 c d e f g h 盘都在这儿了

2020-1-6 周一

报错:Call to undefined function simplexml_load_string()

原因是 php-xml 没有安装,解决方法:

 sudo apt install php-xml

 

2020-1-7 周二

找到一个非常轻量级的服务器运行状态监控:
https://status.tabll.cn/
运行状态监控
它可能不像 Navicat Monitor 这样的功能非常强大,但是应该足够使用了

2020-1-8 周三

Laravel 模型数据处理问题

因为之前在模型的定义中修改了数据的返回 年月日,现在有地方要显示成 年月日-时分秒
在用户模型中加上静态变量:

 public static $withoutAppends = false; // 标记是否使用不做处理的原始数据,默认使用处理后的

// ......

// 获取created_at
public function getCreatedAtAttribute($value)
{
    if (self::$withoutAppends) {
        return $value;
    }

    return date('Y-m-d', strtotime($value));
}

 

调用的控制器中:

 public function __construct()
{
    parent::__construct();
    User::$withoutAppends = true; // 不使用自定义属性
}

// 其实不需要析构
public function __destruct()
{
    User::$withoutAppends = false;
}

 

这里不加析构函数也是可以的,因为每次请求就是一个生命周期,下一次又是 false
不加构造函数也是可以的,需要用的时候写这行代码就行

2020-1-9 周四

通过 Excel 导入数据

通过遍历的方式添加数据:

     /**
     * 通过 Excel 添加
     * @param $url string Excel地址
     * @return mixed
     */
    public function addByExcel($url)
    {
        $filename = uniqid() . '.xlsx'; // 文件名
        $bool = Storage::disk('upload')->put($filename, file_get_contents($url));
        if (!$bool) {
            return response()->fail(self::UPLOAD_ERROR_CODE, self::UPLOAD_ERROR_MSG);
        }
        $filePath = storage_path('downloads/' . $filename);
        $data = Excel::load($filePath)->all()->toArray();
        $existed = 0; // 名单中已存在的个数
        $noUser = 0;  // 找不到用户的个数
        $success = 0; // 成功新增的个数

        foreach ($data as $item) {
            $mobile = $item["手机号"];
            $remark = $item["备注"];
            $user = User::where('mobile', $mobile)->first();
            if (is_null($user)) {
                $noUser++;
                continue;
            }
            if (NoDisturbUser::where('user_id', $user->id)->exists()) {
                $existed++;
                continue;
            }

            $noDisturbUser = new NoDisturbUser();
            $noDisturbUser->user_id = $user->id;
            $noDisturbUser->remark = $remark;
            $noDisturbUser->save();

            $success++;
        }

        return response()->success('新增了' . $success . '条数据');
    }

 

上面没有判断备注的数据长度,备注过长的话写入的时候会有问题

2020-1-10 周五

Composer 清理缓存

 composer clear-cache

 

升级 Laravel 框架版本

 composer require laravel/framework

 

最新的版本已经到 6.10.1

2020-1-13 周一

MySQL 升级

1 备份
2 兼容问题解决
3 升级
一般情况下直接升级就可以了,具体可以看官方升级文档

Laravel 模拟测试任务

 use Tests\TestCase;
use App\Jobs\ShipOrder;
use Illuminate\Support\Facades\Bus;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;

class ExampleTest extends TestCase
{
    public function testOrderShipping()
    {
        Bus::fake(); // 不会真的发送
        // 执行订单发货
        // ...
        Bus::assertDispatched(ShipOrder::class, function ($job) use ($order) {
            return $job->order->id === $order->id;
        });
        // 断言任务并未分发...
        Bus::assertNotDispatched(AnotherJob::class);
    }
}

 

网络版权相关法律

信息网络传播权保护条例
中华人民共和国侵权责任法

2020-1-14 周二

Python 时间转换

存成 String 类型的时间在取出来的时候需要再转换成 datetime 格式以用于时间的比较处理

 lastTime = datetime.datetime.strptime(frontData['calculate_time'], "%Y-%m-%d %H:%M:%S.%f")

 

2020-1-15 周三

数组取最后一个并合并

例如合并前是:

 [
    [
        1, 23
    ],
    [
        2
    ]
]

 
 foreach ($ids as $key => $value) {
    $ids[$key] = end($value); // 取最后一个
}

 

合并后是:

 [
    23,
    2
]

 

2020-1-16 周四

Composer 取消镜像设置

 # 取消当前项目配置
composer config --unset repos.packagist

# 取消全局配置
composer config -g --unset repos.packagist

 

2020-1-17 周五

Confluence 时间设置

 # 时间配置 小时:分钟 上午/下午
h:mm a
# 时间配置 24小时格式
h:mm

 

2020-1-20 周一

防止 API 接口被恶意调用或攻击

增加图形验证码
限定请求次数
流程加入条件限定
检查归属地(可以检查用户的IP与手机号归属地是否匹配)
服务器接口验证
使用 HTTPS
服务器端代理请求
……

来自:前后端分离,如何防止api接口被恶意调用或攻击


唤醒精灵