阿里云

PHP上传图片至远程服务器

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

一、逻辑

首先,我们以thinkphp框架为基础,在表单或ajax(包含JS组件)提交图片信息至服务器时,我们首先将资源上传至本地服务器,在上传时可进行图片的压缩、裁剪、重命名等操作。关于图片处理不做太多的说明,本方案是将上传资源再次上传至服务器,然后删除本地资源,返回或保存服务器图片路径。


PHP图片上传.jpg

二、说明

本方案采用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);
}


喜欢就点个赞吧