【问题标题】:Displaying recently uploaded images from remote FTP server in PHP在 PHP 中显示最近从远程 FTP 服务器上传的图像
【发布时间】:2020-03-03 08:44:29
【问题描述】:

最近,我创建了一个上传表单,用户可以在其中将他们的文件上传到远程 FTP 服务器。到现在为止,一切都很顺利。但是,我有一个问题。

我想确保当用户将他的图片上传到远程 FTP 服务器时,该图片将立即显示在网站上。我怎样才能做到这一点?这个问题在 Stack Overflow 上被问了很多。然而还是有区别的。在大多数情况下,个人希望从远程 FTP 服务器下载特定文件。我不是这种情况。我想确保用户看到他上传的文件显示在网站上。

我将文件上传到远程 FTP 服务器的 php 代码:

<?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);
?>

【问题讨论】:

    标签: php html wordpress ftp http-upload


    【解决方案1】:

    一旦 FTP 上传成功,您需要将用户的浏览器重定向到查看器页面。

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

    view.php 中,使用示例中的代码“从远程 FTP 服务器下载特定文件”。或查看List and download clicked file from FTP

    请注意,要使 Location 标头正常工作,您之前不能输出任何内容 - 因此没有 echo 也没有 HTML 代码。


    但是由于您没有独立的 PHP 代码,而是从某个 WordPress 插件中执行它,因此 WordPress 甚至在您的代码开始之前就已经输出了一些 HTML 标头。所以重定向不起作用。

    在 WordPress 开发 Stack Exchange 上有一个关于此的问题:
    wp_redirect() not working in Insert PHP plugin in WordPress.
    而你又问了另一个:
    Error: “Cannot modify header information”

    或者作为一个蹩脚的黑客,你可以尝试元重定向:

    <meta http-equiv="refresh" content="0; url=view.php?name=<?php echo urlencode(basename($_FILES['file']['name']));?>">
    

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 2016-03-29
      • 1970-01-01
      • 2016-03-16
      • 2013-04-04
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多