Я новичок в продвинутом 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.
Я хочу сохранить этот загруженный файл изображения в папку с именем «Изображения». Эта папка должна иметь все разрешения (чтение, запись и удаление). Если папка уже есть, не создавайте ее заново.
Одним из возможных решений является загрузка файла на удаленный 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 за его комментарии к вопросу.
Других решений пока нет …