首页 编程语言 php

PHP上传图片发送到远程服务器

图片上传至图片服务器,在项目开发过程中有很大概率会遇到,在动静分离的今日,将静态资源单独拿出来是一种趋势,下面分享一下在实际开发过程中的应用,将代码分享出来。

一、逻辑

首先,我们以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);
}
相关推荐