李东's Blog

李东

laravel使用阿里云oos教程

laravel使用阿里云oos教程

1. 先用composer下载安装扩展包 ```java composer require "johnlui/aliyun-oss" ``` 安装完成之后的设置 在app目录下建立:App\services\OSS 目录 ```php <?php namespace App\services; use JohnLui\AliyunOSS; use Exception; use DateTime; class OSS { /* 城市名称: * * 经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 * VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 */ private $city = '上海'; // 经典网络 or VPC private $networkType = '经典网络'; private $AccessKeyId = 'LTAI5tKXjorberceJii3UL2D'; private $AccessKeySecret = 'byiFFJGuy4sK5gNTjC0lZlhP5H85cD'; private $ossClient; /** * 私有初始化 API,非 API,不用关注 * @param boolean 是否使用内网 */ public function __construct($isInternal = false) { if ($this->networkType == 'VPC' && !$isInternal) { throw new Exception("VPC 网络下不提供外网上传、下载等功能"); } $this->ossClient = AliyunOSS::boot( $this->city, $this->networkType, $isInternal, $this->AccessKeyId, $this->AccessKeySecret ); } /** * 使用外网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传文件路径 * @return boolean 上传是否成功 */ public static function publicUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用阿里云内网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传文件路径 * @return boolean 上传是否成功 */ public static function privateUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用外网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传的变量 * @return boolean 上传是否成功 */ public static function publicUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用阿里云内网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传的变量 * @return boolean 上传是否成功 */ public static function privateUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用外网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function publicDeleteObject($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * 使用阿里云内网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function privateDeleteObject($bucketName, $ossKey) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } # 下面不再分公网内网出 API,也不注释了,大家自行体会吧 public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } // 获取公开文件的 URL public static function getPublicObjectURL($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getPublicUrl($ossKey); } // 获取私有文件的URL,并设定过期时间,如 \DateTime('+1 day') public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getUrl($ossKey, $expire_time); } public static function createBucket($bucketName) { $oss = new OSS(); return $oss->ossClient->createBucket($bucketName); } public static function getAllObjectKey($bucketName) { $oss = new OSS(); return $oss->ossClient->getAllObjectKey($bucketName); } public static function getObjectMeta($bucketName, $ossKey) { $oss = new OSS(); return $oss->ossClient->getObjectMeta($bucketName, $ossKey); } } ``` 控制器使用代码 先在控制器引入OOS ```php use App\Services\OSS; ``` ```php //上传图片 public function upload(Request $request){ if ($request->isMethod('post')){ $file = $request->file('file'); $allowed_extensions = ["png", "jpg","JPG","PNG","JPEG", "jpeg", "gif"]; if($file){ if(!$file->isValid()) { $result = array('msg' => '上传出错,请重试!', 'code'=>500); return response()->json($result); } if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) { $result = array('msg' => '上传格式不对!', 'code'=>500); return response()->json($result); } $img_path = $file -> getRealPath(); // 获取临时图片绝对路径 $entension = $file -> getClientOriginalExtension(); // 上传文件后缀 $filename = date('YmdHis').mt_rand(100,999).'.'.$entension; // 重命名图片 $date = date('Y-m-d'); $filePath = 'uploads/images/'.$date.'/'.$filename; //上传到阿里云服务器 $res=OSS::publicUpload('tea-demo',$filePath, $img_path, ['ContentType'=>'image/jpeg']); if($res){ $result = array('msg' => '上传成功!', 'code'=>200,'path'=>$filePath); return response()->json($result); }else{ $result = array('msg' => '上传失败!', 'code'=>500); return response()->json($result); } }else{ $result = array('msg' => '文件不存在!', 'code'=>500); return response()->json($result); } } } ```
php
2648
2022-07-21
laravel 增加自定义function函数库

laravel 增加自定义function函数库

#### 1.在app目录下新建Helper/functions.php 文件 ![laravel](https://best.rstly.cn/uploads/images/2022-07-21/20220721001218404.jpg "laravel") ------------ #### 2.在composer.json下面 写上: ` "files":[ "app/Helper/functions.php" ]` ------------ #### 3.打开终端,执行下面的命令: `composer dump-auto `
php
2220
2022-07-21
PHP报错A non-numeric value encountered
使用Redis限制IP访问次数

使用Redis限制IP访问次数

$redis = new Redis(); $redis->connect('127.0.0.1', 6379); //连接 Redis if (!$redis->exists(get_real_ip())){ //第一次访问 $redis->set(get_real_ip(),1,5*60); // 设置5分钟过期时间并设置初始值1 }else{ //已经记录过IP if ($redis->get(get_real_ip())<30){ //判断IP有没有到达拉黑阈值 $redis->incr(get_real_ip()); //次数加一 }else{ echo '请稍后访问!';exit; } } function get_real_ip($type = 0,$adv=false) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return $ip[$type]; if($adv){ if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $pos = array_search('unknown',$arr); if(false !== $pos) unset($arr[$pos]); $ip = trim($arr[0]); }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } }elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } $long = sprintf("%u",ip2long($ip)); $ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip[$type]; }
php
2277
2021-04-06
PHP接口验签签名专用

PHP接口验签签名专用

### 接口验签 //签名 function sin($params){ ksort($params); $str = ''; foreach ($params as $key => $param) { if ($param === '') continue; $param=urlencode($param); $str .= (empty($str) ? '' : '&') . "{$key}={$param}"; } // $str.='channelcode='.$params['channelcode'].'&productcode='.$params['productcode'].'&orderno='.$params['orderno'].'&appsecret=Mi1TtL0YyQbqom3xQjOrT2RD7KCPHmel'; $str.='&Mi1TtL0YyQbqom3xQjOrT2RD7KCPHmel'; $md5 = md5($str); return $md5; }
php
925
2021-04-06