ZIP存档仅在从PHP上传到FTP后才会损坏

时间:2012-09-01 16:42:15

标签: php file-upload ftp zip corruption

编辑:这完全描述了我的问题,但我无法用PHP克服它:http://kb.winzip.com/kb/entry/149

我正在用PHP编写一个自动备份脚本,该脚本生成我网站文件和数据库的备份副本,并将这些文件发送到远程FTP站点进行灾难恢复。我的SQL和ZIP文件(在My SQL上没有双关语)在服务器上完美生成,但是,当我的ZIP存档上传到FTP站点时,它会被破坏。

我从生成它的服务器下载了ZIP文件,打开它没问题。但是,一旦将ZIP文件传输到FTP站点并从那里下载,就没有ZIP提取程序能够打开同一个文件。我可以打开我的SQL文件没问题。

我很确定存档是否正常,但错误在于传输文件:

$conn_id = ftp_connect("ftp.example.com");
$login_result = ftp_login($conn_id, "johnny1", "Re@l1y $tr0nG P@5swOrd!");
$dbBackup = fopen('database-backup.sql', 'r');
$filesBackup = fopen('files-backup.zip', 'r');

if (ftp_fput($conn_id, 'database/backup.sql', $dbBackup, FTP_BINARY) && 
    ftp_fput($conn_id, 'files/backup.zip', $filesBackup, FTP_BINARY)) {
  echo "Done!<br>";
} else {
   echo "Failed";
   exit;
}

ftp_close($conn_id);
fclose($dbBackup);
fclose($filesBackup);

从这里可以看到ZIP文件的传输有什么问题吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

我已经在我的Ubuntu系统上测试了你的代码,它没有问题 这可能是FTP服务器问题;你应该尝试在另一台FTP服务器上传文件。

答案 1 :(得分:0)

您可以尝试以二进制模式打开您的zip文件。 It's recommended

  

为了便于携带,强烈建议您在使用fopen()打开文件时始终使用'b'标志。

fopen('files-backup.zip', 'rb');