首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
关于
友链
留言
壁纸
Search
1
关于《杀死那个石家庄人》背后的故事
499 阅读
2
摄影记录|鸿恩寺
337 阅读
3
沈阳故宫之旅
234 阅读
4
赤壁赋| 知不可乎骤得,托遗响于悲风
164 阅读
5
EasyWechat 微信小程序接入微信支付|笔记
159 阅读
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
redis
万能青年
累计撰写
58
篇文章
累计收到
48
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
页面
关于
友链
留言
壁纸
搜索到
22
篇与
的结果
2022-03-14
laravel-admin 报错 | Disk [admin] not configured, please add a disk config in `config/filesystems.php`.
config/filesystems.php 添加admin 文件上传配置 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ],最终效果'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), ], 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ], ],
2022年03月14日
50 阅读
0 评论
0 点赞
2022-03-14
PHP图片旋转
代码 /* * $filename 图片地址 * $src 替换地址 * $degrees 转换度数 */ private function flip($filename='',$src='',$degrees = 90) { if(!$filename || !file_exists($filename) || !$src || !file_exists($src)){ return false; } $data = @getimagesize($filename); if($data==false)return false; //读取旧图片 switch ($data[2]) { case 1: $src_f = imagecreatefromgif($filename);break; case 2: $src_f = imagecreatefromjpeg($filename);break; case 3: $src_f = imagecreatefrompng($filename);break; } if($src_f=="")return false; $rotate = @imagerotate($src_f, $degrees,0); if(!imagejpeg($rotate,$src,100))return false; @imagedestroy($rotate); return true; }
2022年03月14日
36 阅读
0 评论
0 点赞
2022-03-14
laravel 8 自定义日志文件名|自定义目录
环境{callout color="#f0ad4e"}基于Laravel 8{/callout}代码<?php namespace App\Http\Helpers; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Route; use Monolog\Formatter\LineFormatter; use Monolog\Logger; use Monolog\Handler\StreamHandler; class LogHelper { private static $filename =''; // 文件记录类型 1:文件目录/日期/文件名 2:所有日志一个文件夹 private function __construct() { } private function __clone() { // TODO: Implement __clone() method. } /** * 设置日志文件名称 * @param $filename */ public static function setFilename($filename) { self::$filename = $filename; } /** * @param $message * @param array $data * @param string $filename * @param string $isDate 是否按月份分文件夹 */ private static function _save($message, $data = [],string $filename, $isDate = true) { $action = Route::current()->getActionName(); list($class, $method) = explode('@', $action); if (empty($filename)) $filename = !empty(self::$filename) ? self::$filename : $method; $log = new Logger('mylog'); if (PHP_SAPI == 'cli') { // 命令行访问脚本的,加一个cli标识和用户浏览器访问的区分开 $filename .= '_cli'; } $filename = $filename . '.log'; if ($isDate) { // 是否要按日显示 $path = storage_path('logs/' . date('Y-m-d')); } else { $path = storage_path('logs/'); } // 有时候运维没给号权限,容易导致写入日志失败 self::mkDirs($path); $path = $path . '/' . $filename; if (gettype($data) != 'array') { $message .= " " . $data; $data = []; } $microtime = microtime(); $message = '[' . substr($microtime, 0, 8) . '] ' . $message;// 记录毫秒时间 // finally, create a formatter $formatter = new LineFormatter("[%datetime%] %message% %context%\n", "Y-m-d H:i:s"); $stream = new StreamHandler($path, Logger::INFO); $stream->setFormatter($formatter); $log->pushHandler($stream); $log->info($message, $data); } /** * 日志打印 * @param string $message * @param array $data * @param string $filename */ public static function info(string $message,$data = [],string $filename='') { self::_save($message, $data, $filename); } /** * 给日志文件夹权限 * @param $dir * @param int $mode * @return bool */ private static function mkDirs($dir, int $mode = 0777) { if (is_dir($dir) || @mkdir($dir, $mode)) { return TRUE; } if (!self::mkdirs(dirname($dir), $mode)) { return FALSE; } return @mkdir($dir, $mode); } /** * 记录最后一条执行的sql * @param string $file_name * */ public static function sql(string $file_name='') { if (empty($file_name)) $file_name = !empty(self::$filename) ? self::$filename : __FUNCTION__.'_sql'; DB::listen(function ($sql) use ($file_name) { foreach ($sql->bindings as $i => $binding) { if ($binding instanceof \DateTime) { $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); } else { if (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } } $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); LogHelper::info('sql:', $query, $file_name); }); } } 调用// 按日 按文件名 LogHelper::info('A 数组',['a','b'],'order'); // 按文件名 LogHelper::info('A 数组',['a','b'],'order'); // 只有字符串 LogHelper::info('B 字符串'); // 记录下面的执行sql LogHelper::sql(); // 输出: // [2021-04-15 11:50:37] [0.627499] sql:select * from `user` where `mobile` = '' limit 1 []
2022年03月14日
28 阅读
0 评论
0 点赞
2022-03-14
Laravel-admin 删除行|删除回调
在模型中增加protected static function booted() { static::deleting(function ($param) { $total = 1; //在这里去做逻辑判断,$param->id 可以拿到当前操作id if ($total > 0) { throw new \Exception("无法删除"); } return true; }); }
2022年03月14日
127 阅读
0 评论
0 点赞
2022-03-07
PHP之trait的用法
trait{callout color="#f0ad4e"}PHP 实现了一种代码复用的方法,称为 traitphp从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性{/callout}{message type="info" content="例子"/}<?php trait Dog{ public $name="dog"; public function bark(){ echo "This is dog"; } } class Animal{ public function eat(){ echo "This is animal eat"; } } class Cat extends Animal{ use Dog; public function drive(){ echo "This is cat drive"; } } $cat = new Cat(); $cat->drive(); echo "<br/>"; $cat->eat(); echo "<br/>"; $cat->bark(); 输出结果为: This is cat drive This is animal eat This is dog ?>优先级#1{callout color="#f0ad4e"}从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。{/callout}<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>结果为Hello World!{dotted startColor="#ff6c6c" endColor="#1989fa"/}优先级#2<?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello(); ?>结果为Hello Universe!详情可查阅php手册:https://www.php.net/manual/zh/language.oop5.traits.php
2022年03月07日
41 阅读
0 评论
0 点赞
1
2
3
4
5