【问题标题】:Upload a local file from application via web server with PHP code to FTP server通过带有 PHP 代码的 Web 服务器将本地文件从应用程序上传到 FTP 服务器
【发布时间】:2019-02-11 02:39:12
【问题描述】:

我想要一些关于如何使用 PHP 代码将本地文件从应用程序上传到 FTP 的帮助。 我是一个业余程序员,可以阅读非常基本的代码结构。所以请避免使用编程术语!

我正在开发一个简单的 Windows 应用程序(通过可视化编程)。该应用程序将通过网站(例如http://www.mysite/folder/ftp.php)将本地文件上传到我的 FTP 服务器。我这样做是为了避免在应用程序代码中包含我的 FTP 登录详细信息。

我找到了一个似乎可以工作的 PHP 代码,但我不明白如何在代码中包含我的本地文件路径(例如 C:\User\Desktop\myfile.txt)。我希望使用以下代码,我发现它很容易理解。我只是不知道如何指定本地文件的路径以及该文件将被上传的路径。最后会在链接中指定本地路径(例如http://www.mysite/folder/ftp.php?localpath=.....),所以我认为我应该使用$file=$_GET['file'];而不是$file = ".....";

<?php 
$ftp_server=""; 
$ftp_user_name=""; 
$ftp_user_pass=""; 
$file = "";//tobe uploaded 
$remote_file = ""; 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// upload a file 
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) { 
    echo "successfully uploaded $file\n"; 
    exit; 
} else { 
    echo "There was a problem while uploading $file\n"; 
    exit; 
    } 
// close the connection 
ftp_close($conn_id); 
?>

【问题讨论】:

  • PHP 是一种服务器端语言,您需要将文件上传到服务器。
  • “本地文件”是否与www.mysite在同一台计算机上?如果没有,那么您的 C 盘将无法使用。
  • 如果您想将文件从远程应用程序(您的 Windows 应用程序)发送到您的服务器,而不向远程应用程序提供您服务器的不必要凭据,那么最简单的方法是接受通过 http 请求文件。对于服务器端,您正在运行 php:php.net/manual/en/features.file-upload.php。应用程序是用什么写的,c#?
  • 德文!谢谢您的回答!我实际上希望应用程序上传文件。简而言之,我希望 php 代码以某种方式“抓取”本地文件(C:\.....\...\file.txt)并将其发送到服务器。这可能吗?
  • 昆汀!谢谢您的回答! C盘在我的电脑上,站点在与电脑无关的远程服务器上!

标签: php http file-upload ftp


【解决方案1】:

您的网络服务器上的 PHP 代码绝对无法访问您的本地文件。那将是一场安全噩梦。


您的应用程序必须使用 HTTP 文件上传 (Content-Type: multipart/form-data) 主动将您的本地文件(其内容,而不仅仅是文件名)上传到 Web 服务器。

然后,您的 PHP 代码可以使用 $_FILES 变量引用上传的文件。
请参阅 PHP 中的 POST method uploads

由于您似乎难以理解客户端和服务器端代码,也许您应该首先只实现(和调试)服务器端。对于客户端,使用简单的 HTTP/HTML 文件上传表单来测试服务器端部分。一旦你启动并运行,用你的应用程序中的代码替换 HTML 上传表单。

换句话说,如果您想使用 PHP 内置支持来上传文件,您需要让您的应用程序在提交带有文件的 HTML &lt;form&gt; 时执行与 Web 浏览器相同的 HTTP 请求( &lt;input type="file" name="..."/&gt;)。


如果您发现在您的(客户端)开发环境中难以实现 HTTP 文件上传(我们对此一无所知),您可以使用一些更简单的机制,例如带有文件内容的简单 HTTP POST 请求(不多部分,只是文件的二进制数据)。虽然我相信现在大多数桌面应用程序大多数框架都原生支持 HTTP 文件上传。

【讨论】:

  • 马丁!谢谢您的回答! “那将是一场安全噩梦。”我明白了...“您可以使用一些更简单的机制,例如简单的 HTTP POST”我会检查一下!感谢您的耐心等待并更正我的帖子!
  • 我添加了更多细节来解决您的问题,因为您仍然难以理解机制。
  • 马丁!我检查了你建议我的代码。该表单将我导航到我看到以下消息的 php 文件路径:可能的文件上传攻击!这是更多调试信息:Array ( [userfile] => Array ( [name] => license-temp.htm [type] => text/html [tmp_name] => /tmp/php5DspvW [error] => 0 [大小] => 9336 ) )
  • 这是我使用的代码: '; if (move_uploaded_file($_FILES['C:\Users\hp6300\Desktop\license-temp.htm']['license-temp.htm'], $uploadfile)) { echo "文件有效,上传成功。 \n"; } else { echo "可能的文件上传攻击!\n"; } echo '这里有更多调试信息:'; print_r($_FILES);打印“”; ?>
  • 第一个明显的错误是:$_FILES['C:\Users\hp6300\Desktop\license-temp.htm']$_FILES 数组的关键是文件输入控件的名称。 E.F.如果您有&lt;input type="file" name="userfile"/&gt;,则使用$_FILES['userfile']。实际上,您可以在调试信息中清楚地看到这一点!:Array ( [userfile] =&gt; Array。 - 您的 PHP 代码永远不会学习到本地文件的完整路径,因此在代码中使用完整路径是没有意义的。毕竟,即使知道路径,也不能强制用户从固定路径上传文件,对吧?
猜你喜欢
  • 2015-05-14
  • 1970-01-01
  • 2014-04-18
  • 2014-03-22
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多