【问题标题】:files gets corrupted after uploading via ftp_put in php通过 php 中的 ftp_put 上传后文件损坏
【发布时间】:2013-03-30 07:02:24
【问题描述】:

在我通过 ftp_put 在服务器上的 php 中上传任何文件后,文件被上传,但文件在服务器上被损坏。

以下代码用于上传文件。

<html>
<body>

    <form action="upload.php" method="post"
          enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file"><br>
        <input type="submit" name="submit" value="Submit">
    </form>

</body>
</html>

<?php
if (isset($_REQUEST['submit'])) {
    $local_file = $_FILES["file"]["tmp_name"];
    $ftp_path = 'path/newfolder';
    $filename = $_FILES["file"]["name"];
    $usr = 'userid';
    $pwd = 'password';
    $host = 'server_ip';
    $conn_id = ftp_connect($host, 21) or die("Cannot connect to host");
    ftp_login($conn_id, $usr, $pwd) or die("Cannot login");
    $upload = ftp_put($conn_id, $ftp_path . '/' . $filename, $local_file, FTP_BINARY);
    print (!$upload) ? 'Cannot upload' : 'Upload complete';
}
}
?>

我尝试了 jpeg、xls 等...但上传后我无法打开这些文件。

【问题讨论】:

  • 上传后打不开是什么意思?您是否尝试使用 FileZilla 之类的工具手动执行此操作?会发生什么而不是显示文件?
  • 我尝试下载或直接通过filezilla查看...它显示文件已损坏

标签: php file-upload


【解决方案1】:

不确定是什么原因导致该问题,但假设您需要在move_uploaded_file 之后尝试上传文件:

$filename = $_FILES["file"]["name"];    
$local_file = "some/tmp/storage/path/$filename";
if(move_uploaded_file($_FILES["file"]["tmp_name"], $local_file)) {
   $ftp_path = 'path/newfolder';
   $usr = 'userid';
   $pwd = 'password';
   $host = 'server_ip';
   $conn_id = ftp_connect($host, 21) or die("Cannot connect to host");
   ftp_login($conn_id, $usr, $pwd) or die("Cannot login");
   $upload = ftp_put($conn_id, $ftp_path . '/' . $filename, $local_file, FTP_BINARY);
   print (!$upload) ? 'Cannot upload' : 'Upload complete';
   ulink($local_file); //remove temporary local file
} else {
   echo 'File upload error';
}

此外,通过检查$_FILES["file"]["error"] 确保文件确实已上传。它应该等于UPLOAD_ERR_OK(其他错误codes

【讨论】:

  • 我尝试了上面的代码,但它说“move_uploaded_file(some/tmp/storage/path/Koala.jpg): failed to open stream: No such file or directory in "some path"”。而且当我使用 ftp_put 使用我的原始代码时,文件的大小会减小......就像大约 800kb 的文件缩小到 4kb ..
  • 您必须使用 move_uploaded_file 创建用于放置文件的目录。因此,您必须在脚本所在的同一目录中拥有文件夹 some,其中 tmp,在 tmp 内的 storagetmp 内的 path
  • FTP_BINARY 对我来说已经足够了
猜你喜欢
  • 2017-04-21
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多