Почему я не могу загрузить файл изображения на удаленный FTP-сервер даже после успешного установления соединения с ним в PHP?

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

Каждый раз, когда функция ftp_put() возвращает ложь. Я много отлаживал код, но я не понимаю, где я делаю ошибку.

Ниже приведен мой код:

HTML код:

<form method="post" enctype="multipart/form-data" action="xyz.php">
<input type="file" name="student_image" id="student_image" />
</form>

PHP-код (xyz.php):

  $t = time();
$allowed_image_extension = array("jpg","jpeg","gif","png","JPG","JPEG","GIF","PNG");
if(!empty($_FILES['student_image']['name'])) {
$ext = pathinfo($_FILES['student_image']['name'], PATHINFO_EXTENSION);
$student_image_name = 'student_'.$t.'.'.$ext;
$_POST['student_name'] = $student_image_name;

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

$file = $_FILES['student_image']['name'];//tobe uploaded
$remote_file = "/Students/".$_POST['student_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);// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
echo "successfully uploaded $file\n";
exit;
} else {
echo "There was a problem while uploading $file\n";
exit;
}
// close the connection
ftp_close($conn_id);
}

Во время отладки я получил True и ресурс везде, кроме одного места в функции ftp_put(),

0

Решение

Вы используете неправильное имя файла:

$file = $_FILES['student_image']['name'];//tobe uploaded
^^^^^^^^

Это имя файла на компьютере пользователя. PHP не использует это. Он помещает загрузку в произвольное имя файла и сохраняет его в ['tmp_name'], Ты хочешь

$file = $_FILES['student_image']['tmp_name'];

вместо. Так как вы используете неправильное имя файла, файл, который НЕ существует на сервере, ftp_put правильно возвращает false, поскольку этот несуществующий файл не может быть прочитан.

1

Другие решения

Я полагаю, что это, вероятно, из-за того, что вы передали абсолютный путь как $ remote_file. Ошибка на ftp_put должна означать, что вы не можете писать в это место по какой-либо причине. Я полагаю, что изменение этого так, чтобы у него не было /, прежде чем путь должен решить проблему (обратите внимание, что файл будет относиться к домашнему каталогу пользователя ftp, который обычно является каталогом, который вы впервые отображаете при подключении через ftp) ,

Это должно выглядеть так:

$file = $_FILES['student_image']['tmp_name'];
$remote_file = "Students/".$_POST['student_name'];

РЕДАКТИРОВАТЬ: Отредактированный ответ, чтобы включить имя tmp_name вместо имени, это с двумя разделителями.

2

также, почему бы вам не попытаться получить ошибки ftp:

$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);
if (!@ftp_put($my_ftp_conn_id, $tmpRemoteFileName, $localFileName, FTP_BINARY)) {
// error message is now in $php_errormsg
$msg = $php_errormsg;
ini_set('track_errors', $trackErrors);
throw new Exception($msg);
}

@ref: Как получить ошибку FTP при использовании PHP

0
По вопросам рекламы [email protected]