如何使用PHP代码将文件上传至Shutterstock FTP?
PHP 上传文件至 Shutterstock FTP 的实现方案
修正后的完整代码
// 配置信息 $user = "你的Shutterstock用户名"; $pass = "你的Shutterstock密码"; $localfile = "本地文件路径"; // 示例: "./photo.jpg" $remotefile = "远程文件路径"; // 示例: "subfolder/photo.jpg" $upURL = "ftp.shutterstock.com"; // 初始化cURL会话 $ch = curl_init(); if (!$ch) { die("无法初始化cURL会话"); } // 以二进制模式打开本地文件 $fp = fopen($localfile, "rb"); if (!$fp) { die("无法读取本地文件: " . $localfile); } // 设置cURL核心选项 curl_setopt($ch, CURLOPT_URL, "ftp://" . $upURL . "/" . $remotefile); curl_setopt($ch, CURLOPT_USERPWD, $user . ":" . $pass); curl_setopt($ch, CURLOPT_UPLOAD, true); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); // 自动获取本地文件大小 curl_setopt($ch, CURLOPT_FTP_CREATE_MISSING_DIRS, true); // 自动创建不存在的远程目录 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行上传操作 $result = curl_exec($ch); // 错误处理与结果反馈 if ($result === false) { echo "上传失败: " . curl_error($ch); } else { echo "文件上传成功"; } // 清理资源 curl_close($ch); fclose($fp);
关键优化说明
- 会话初始化: 原代码缺少
curl_init()创建会话句柄的步骤,这是cURL操作的必要前提。 - 文件读取模式: 使用
rb二进制模式读取文件,避免跨系统环境下的文件编码或格式异常。 - 文件大小获取: 用
filesize()替代自定义属性获取文件大小,避免因属性值错误导致上传中断。 - 目录自动创建: 开启
CURLOPT_FTP_CREATE_MISSING_DIRS可自动生成远程路径中不存在的目录,减少手动操作。
常见问题排查
- 确认Shutterstock账户已开通FTP上传权限,且用户名、密码无误。
- 检查服务器是否启用cURL扩展,且支持FTP协议。
- 确保服务器防火墙/安全组允许出站FTP连接(默认端口21)。
内容的提问来源于stack exchange,提问作者HomerSenpai
相关产品推荐
相关产品推荐

