2014-12-03 2 views
2

Я загружаю изображение на FTP-сервер в определенном месте папки. Код работает нормально. Но когда я смотрю загруженное изображение, у меня есть поврежденный файл изображения, который нельзя открыть. Для нескольких файлов изображений изображение в файле повреждается. Я не понимаю, почему это происходит.Почему изображение становится поврежденным загруженным на FTP-сервер с помощью PHP?

Ниже приводится работоспособный код, который я попробовал:

 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:[email protected]/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-сервер после завершения загрузки.

ответ

5

Вы должны установить режим с ftp_put быть FTP_BINARY:

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

Это является обязательным, так как проверки режима ASCII отличаются ли линия окончаний на клиент/сервер (ваш случай, так как вы, вероятно, на окнах и сервер работает unix) и пытается их преобразовать (\r\n\n). В BINARY файлы режима отправляются как есть.