显示来自远程ftp服务器的最近上传的图像-PHP [英] Displaying recently uploaded images from remote ftp server - PHP

查看:69
本文介绍了显示来自远程ftp服务器的最近上传的图像-PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近,我创建了一个上传表单,用户可以在其中将其文件上传到远程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);
?>

我的GUI FTP客户端是Filezilla.我看过堆栈溢出和文章.但是没有任何结果.希望你们能帮助我.

问候,

Johan

解决方案

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

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

view.php中,使用示例中的代码从远程FTP服务器下载特定文件" .或参见列出并从FTP下载点击的文件.

请注意,为了使Location标头正常工作,您不能在此之前输出任何内容–因此,没有echo和HTML代码.


但是,由于您没有独立的PHP代码,而是在某些WordPress插件中执行的,因此WordPress甚至在代码开始之前就已经输出了一些HTML标头.因此重定向将无法正常工作.

在WordPress开发Stack Exchange上对此存在疑问:
wp_redirect()在WordPress的插入PHP插件中不起作用.
您又问了一个:
错误:无法修改标头信息"

或者作为la脚的黑客,您可以尝试元重定向:

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

Recently, I have created an upload form in which users can upload their files to a remote FTP server. Until now, everything is going well. However, I have a problem.

I want to make sure that when the user his image is uploaded to the remote FTP server, the image will be displayed immediately on the website. How can I do this? This question has been asked a lot on Stack Overflow. Yet there is a difference. In most cases, the individual wanted to download a specific file from the remote FTP server. This is not the case with me. I want to make sure that the user sees the file he uploaded displayed on the site.

My php code for uploading a file to the remote FTP server:

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

My GUI FTP client is Filezilla. I have looked at Stack Overflow and articles. But without any result. Hopefully, you guys can help me out.

Greetings,

Johan

解决方案

Once the FTP upload succeeds, you need to redirect user's browser to a viewer page.

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

In the view.php, use the code from your examples to "download a specific file from the remote FTP server". Or see List and download clicked file from FTP.

Note that for the Location header to work, you cannot output anything before – so no echo and no HTML code.


But as you do not have a standalone PHP code, but you executed it from within some WordPress plugin, the WordPress will have already outputted some HTML headers before your code even starts. So the redirect won't work.

There's a question on this on the WordPress development Stack Exchange:
wp_redirect() not working in Insert PHP plugin in WordPress.
And you have asked another one:
Error: "Cannot modify header information"

Or as a lame hack, you can try meta redirect:

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

这篇关于显示来自远程ftp服务器的最近上传的图像-PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆