将图片上传至图片服务器,在项目开发过程中有很大概率会遇到,在动静分离的今日,将静态资源单独拿出来是一种趋势,下面分享一下在实际开发过程中的应用,将代码分享出来。
一、逻辑
首先,我们以thinkphp框架为基础,在表单或ajax(包含JS组件)提交图片信息至服务器时,我们首先将资源上传至本地服务器,在上传时可进行图片的压缩、裁剪、重命名等操作。关于图片处理不做太多的说明,本方案是将上传资源再次上传至服务器,然后删除本地资源,返回或保存服务器图片路径。
二、说明
本方案采用PHP内置函数,需要有ftp地址、账户、密码、端口;
ftp_connect 打开 FTP 连接 ftp_login 登录 FTP 服务器。 ftp_nlist 返回指定目录的文件列表。 ftp_mkdir 在 FTP 服务器创建一个新目录。 ftp_chdir 改变 FTP 服务器上的当前目录。 ftp_put 把文件上传到服务器 ftp_close 关闭 FTP 连接。三、示例代码
<?php /** * 上传图片至远程服务器 * @param $path string 图片路径 * @param $status int 是否是本地图片 默认为本地图片 * @param $type int 是否删除 默认为删除 * @return bool */ function uploadServer($path, $status = 1, $type = 1) { if (!$path) { return false; } //ftp 配置参数 $ftpIp = '1.2.3.4'; //ip地址 $port = 21; //端口号 $timeOut = 90; //响应时间 $name = 'zhanghu'; //ftp 账户 $pass = 'mima'; //ftp 密码 $uploadPath = '/img/'; //连接ftp $conn = ftp_connect($ftpIp, $port, $timeOut) or die("Could not connect"); //登录frp ftp_login($conn, $name, $pass); //返回当前目录名称 $nowDir = date('Ymd', time()); $res = ftp_nlist($conn, $nowDir); if (!$res) { //不存在目录,则创建 ftp_mkdir($conn, $nowDir); } //切换目录 至 上传目录 ftp_chdir($conn, $nowDir); //服务器文件名称,规则 MD5 加密当前时间戳,文件名后缀为 jpg $serverName = md5(time()) . '.jpg'; //上传图片 $result = ftp_put($conn, $serverName, $path, FTP_BINARY); if ($result === FALSE) { return ['code' => 100, 'msg' => '上传失败']; } else { //本地图片 and 删除原图 if ($status == 1 && $type == 1) { //删除本地文件 unlink($path); } return ['code' => 200, 'msg' => '上传成功', 'data' => $uploadPath . $nowDir . '/' . $serverName]; } //关闭连接 ftp_close($conn); }