Отображение недавно загруженных изображений с удаленного FTP-сервера - PHP - PullRequest
0 голосов
/ 03 марта 2020

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

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

Мой php код для загрузки файла на удаленный FTP-сервер:

<?php
if ( empty( $_FILES['file'] ) ) {
?>
<html>
<head>

</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
<input name="file" type="file"/>
<br>
<input name="submit" type="submit" value="Upload uw album" />
</form>
</body>
</html>
<?php
return;
} else {
?>
<html>
<head>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
<input name="file" type="file"/>
<br>
<input name="submit" type="submit" value="Upload uw album" />
</form>
</body>
</html>
<?php
}

$ftp_server = "myserver";
$ftp_user_name = "myuser";
$ftp_user_pass = "mypass";
$source_file = $_FILES['file']['tmp_name'];
$destination_folder = "/public_html/wp/wp-content/plugins/AbonneerProgrammas/Albums";
$destination_file = $destination_folder . "/" . basename($_FILES['file']['name']);
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
ftp_pasv($conn_id, true); 

// check connection
if ((!$conn_id) || (!$login_result)) { 
    echo "Het spijt ons, er is momenteel geen connectie met de server.";
    //echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
    exit; 
} else {
     //echo "upload is gelukt";
}

// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
// check upload status
if (!$upload) { 
//
} else {
?>
<meta http-equiv="refresh" content="0; url=https://radioprogrammabank.nl/wp/upload-album/?name=<?php echo urlencode(basename($_FILES['file']['name']));?>">
<?php
echo "<a href=\"$source_file?file=".urlencode($source_file)."\">".htmlspecialchars($source_file)."</a>";
header('Content-Type: application/octet-stream');
echo file_get_contents('ftp://username:password@ftp.example.com/path/' . $_GET["file"]);

echo "upload is gelukt";
}

// close the FTP stream 
ftp_close($conn_id);
?>

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

Привет,

Йохан

1 Ответ

1 голос
/ 03 марта 2020

После успешной загрузки по FTP вам необходимо перенаправить браузер пользователя на страницу просмотра.

header("Location: view.php?name=".urlencode(basename($_FILES['file']['name'])));

В view.php используйте код из ваших примеров, чтобы "загрузить спецификацию c файл с удаленного FTP-сервера ". Или посмотрите Перечислите и загрузите выбранный файл с FTP .

Обратите внимание, что для работы заголовка Location вы не можете ничего выводить раньше - поэтому нет кода echo и HTML .


Но так как у вас нет отдельного кода PHP, но вы выполнили его из какого-либо плагина WordPress, WordPress уже выведет несколько заголовков HTML, прежде чем ваш код даже запустится. Таким образом, перенаправление не будет работать.

По этому вопросу возникает вопрос о стеке разработки WordPress:
wp_redirect () не работает в плагине Insert PHP в WordPress .
И вы спросили другого:
Ошибка: «Невозможно изменить информацию заголовка»

Или, как неудачный взлом, вы можете попробовать перенаправить мета:

<meta http-equiv="refresh" content="0; url=view.php?name=<?php echo urlencode(basename($_FILES['file']['name']));?>">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...