You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中通过FTP创建上传新文件且不覆盖旧文件的实现问题

FTP上传相关问题解答

能否实现FTP上传不覆盖已有旧文件

可以实现,常用两种方案:

  • 上传前先检测远程文件是否存在:调用ftp_size()方法传入FTP连接对象和远程文件路径,返回值为-1说明文件不存在,可以正常上传;如果返回数值大于等于0说明文件已存在,可终止上传或给新文件添加时间戳、随机序号等后缀后再执行上传操作。
  • 利用FTP的STOU指令自动生成不重名文件:如果你的FTP服务支持STOU命令,可发送指令让服务器自动为上传的文件分配不重复的名称,完全避免覆盖风险。

你当前代码运行失败的原因

ftp_put()函数的第三个参数要求传入本地待上传文件的路径字符串,你当前传入的是$objPHPExcel对象,参数类型不匹配,所以函数无法正常执行。同时你前面生成的newfile.txt也没有在上传逻辑中用到,逻辑不对应。

修正后的代码示例

示例1:上传你之前创建的文本文件

// 生成本地文本文件
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);

// 初始化FTP连接,增加错误判断
$ftp = ftp_connect("web") or die("FTP连接失败");
if(!ftp_login($ftp, "user", "pass")) {
    die("FTP登录失败");
}

// 先检测远程文件是否存在,避免覆盖
$remote_file_path = "Tulassi/tulasi_test.txt";
if(ftp_size($ftp, $remote_file_path) == -1) {
    // 远程文件不存在,执行上传,第三个参数传本地文件路径
    $upload_result = ftp_put($ftp, $remote_file_path, "newfile.txt", FTP_BINARY);
    echo $upload_result ? "上传成功" : "上传失败";
} else {
    echo "远程文件已存在,终止上传避免覆盖";
}

ftp_close($ftp);
exit;

示例2:上传PHPExcel生成的Excel文件

// 先将PHPExcel对象保存为本地临时文件
$local_excel_path = "temp_excel.xlsx";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($local_excel_path);

// FTP上传逻辑
$ftp = ftp_connect("web") or die("FTP连接失败");
ftp_login($ftp, "user", "pass") or die("FTP登录失败");

$remote_file_path = "Tulassi/tulasi_test.xlsx";
if(ftp_size($ftp, $remote_file_path) == -1) {
    $upload_result = ftp_put($ftp, $remote_file_path, $local_excel_path, FTP_BINARY);
    echo $upload_result ? "上传成功" : "上传失败";
    // 上传完成后可删除本地临时文件
    unlink($local_excel_path);
} else {
    echo "远程文件已存在,无需重复上传";
}

ftp_close($ftp);
exit;

内容的提问来源于stack exchange,提问作者sathish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:02