为什么图像被损坏使用PHP上传到FTP服务器?

时间:2014-12-03 07:50:41

标签: php file-upload ftp remote-server fileserver

我正在将图像上传到特定文件夹位置的FTP服务器。代码工作正常。但是当我查看上传的图像时,我得到了无法打开的损坏的图像文件。对于少数图像文件,文件中的图像被破坏。我不明白为什么会这样。

以下是我尝试的可行代码:

      if(!empty($_FILES['student_image']['name'])) {
        $ext = pathinfo($_FILES['student_image']['name'], PATHINFO_EXTENSION);     

        $student_image_name = 'student_'.$student_data['student_id'].'.'.$ext;

        $ftp_server="56.215.30.91"; 
        $ftp_user_name="myservercreds"; 
        $ftp_user_pass="MyServerCreds";

        $file = $_FILES['student_image']['tmp_name'];//file to be uploaded to FTP server 
        $remote_file = "/Students/".$student_image_name;        


        // set up basic connection 
        $conn_id = ftp_connect($ftp_server);  

        // login with username and password 
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

        if($login_result) {
          if(!is_dir('ftp://myservercreds:MyServerCreds@56.215.30.91/Students')) {
            ftp_mkdir($conn_id, "/Students");
            ftp_chmod($conn_id, 0777, '/Students');
          }

          if(!file_exists("/Students/".$student_image_name))
            $file_upload_status = ftp_put($conn_id, $remote_file, $file, FTP_ASCII);                    
        }  

    // close the connection 
    ftp_close($conn_id);
  }

我不知道在完成上传后上传到FTP服务器时图像文件何时会损坏。

1 个答案:

答案 0 :(得分:6)

您应该将模式ftp_put设置为FTP_BINARY

ftp_put($conn_id, $remote_file, $file, FTP_BINARY); 

这是强制性的,因为ASCII模式检查客户端/服务器上的行结尾是否不同(您的情况,因为您可能在Windows上并且服务器运行unix)并尝试转换它们(\r\n\n)。在BINARY模式下,文件按原样发送。