Я загружаю изображение на 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:[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 после завершения загрузки.
Вы должны установить режим с ftp_put
быть FTP_BINARY
:
ftp_put($conn_id, $remote_file, $file, FTP_BINARY);
Это обязательно, так как ASCII
mode проверяет, отличаются ли окончания строк на клиенте / сервере (в вашем случае, поскольку вы, скорее всего, используете windows, а сервер работает под управлением unix) и пытается преобразовать их (\r\n
⇒ \n
). В BINARY
Файлы режима отправляются как есть.
Других решений пока нет …