Я хочу подключиться к одному удаленному 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()
,
Вы используете неправильное имя файла:
$file = $_FILES['student_image']['name'];//tobe uploaded
^^^^^^^^
Это имя файла на компьютере пользователя. PHP не использует это. Он помещает загрузку в произвольное имя файла и сохраняет его в ['tmp_name']
, Ты хочешь
$file = $_FILES['student_image']['tmp_name'];
вместо. Так как вы используете неправильное имя файла, файл, который НЕ существует на сервере, ftp_put правильно возвращает false, поскольку этот несуществующий файл не может быть прочитан.
Я полагаю, что это, вероятно, из-за того, что вы передали абсолютный путь как $ remote_file. Ошибка на ftp_put должна означать, что вы не можете писать в это место по какой-либо причине. Я полагаю, что изменение этого так, чтобы у него не было /, прежде чем путь должен решить проблему (обратите внимание, что файл будет относиться к домашнему каталогу пользователя ftp, который обычно является каталогом, который вы впервые отображаете при подключении через ftp) ,
Это должно выглядеть так:
$file = $_FILES['student_image']['tmp_name'];
$remote_file = "Students/".$_POST['student_name'];
РЕДАКТИРОВАТЬ: Отредактированный ответ, чтобы включить имя tmp_name вместо имени, это с двумя разделителями.
также, почему бы вам не попытаться получить ошибки 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);
}