Как подключиться к удаленному FTP-серверу и загрузить на него файл изображения в определенном месте с помощью PHP?

Я новичок в продвинутом PHP. я использую PHP 5.5.18 для моего сайта.

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

Я успешно написал код для загрузки файла изображения на тот же сервер, с которого я выполняю скрипт PHP. Это работает абсолютно нормально для меня.

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

Может кто-нибудь, пожалуйста, помогите мне в этом отношении?

Ниже приведен рабочий код PHP, который я написал для загрузки файла на тот же сервер, с которого я запускаю сценарий PHP.

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>

Ниже приведены примерные учетные данные моего FTP-сервера:

IP: 54.220.3.82
Username: myservercreds
Password: MyServerCreds

Я пытался подключиться к этому серверу, используя FTP-клиент FileZilla введя эти кредиты и указав номер порта как 21. Теперь я должен сделать то же самое, используя код PHP.

Я хочу сохранить этот загруженный файл изображения в папку с именем «Изображения». Эта папка должна иметь все разрешения (чтение, запись и удаление). Если папка уже есть, не создавайте ее заново.

1

Решение

Одним из возможных решений является загрузка файла на удаленный FTP-сервер после того, как вы сохранили его локально.

Скажем, вы сохранили файл локально с указанием пути $target_file, как в вашем коде. Теперь вы можете сделать что-то вроде этого:

<?php

$remote_file = "images/" . $target_file;  // since you want to upload to a directory called "images".

$conn_id = ftp_connect("ftp.foo.bar") or die("Error in FTP connection");  // the FTP server you want to connect to.
$login_status = ftp_login($conn_id, "Username", "PaSswoRd") or die("Error in FTP login");  // Login to the FTP server.

// Now go ahead, and upload the file.
$upload_status = ftp_put($conn_id, $remote_file, $target_file, FTP_BINARY);

if (!$upload_status)
{
// do whatever it is that you want to do when you are unable to upload the file.
}

// Close the FTP connection after you are done.
ftp_close($conn_id);

?>

Это, конечно, при условии, что у вас есть каталог с именем images/ в вашем FTP-сервере. Если вы этого не сделаете, вы можете создать его с помощью FTP-клиента или с помощью самого PHP, используя

ftp_mkdir($conn_id, "images");

Заметки:

  • Вы можете установить разрешения, используя ftp_chmod() метод.

  • Если вы не хотите, чтобы файлы на вашем сервере после их загрузки, вы можете удалить их с помощью unlink().

    Лучшее решение может быть просто загрузить без сохранения локально. Просто используйте $_FILES['fileToUpload']['tmp_name'] где вы используете $target_file в приведенном выше примере. И не сохраняйте загруженный файл, используя move_uploaded_file(), как в вашем коде.

  • Все, что вам, вероятно, нужно, возможно, есть в документации. Посмотри. Документы не так страшно, как кажется. Пун намеревался 🙂.

    Документация для функций FTP: http://php.net/manual/en/ref.ftp.php

надеюсь, это поможет :-)


Редактировать: Спасибо @halfer за его комментарии к вопросу.

0

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

Других решений пока нет …

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