【问题标题】:In PHP, I need to make a POST request, but one of the variables must be a text file. How do I do it?在 PHP 中,我需要发出 POST 请求,但其中一个变量必须是文本文件。我该怎么做?
【发布时间】:2010-08-03 21:12:17
【问题描述】:

这是我需要做的。在我的 PHP 脚本中,我需要发出一个 POST 请求,但其中一个参数必须作为名为 data.txt 的文本文件发送。我已经编写了一个小脚本,它将发送 POST 请求并发送参数。服务器需要一个参数,它是一个包含两个元素 arg0 和 arg1 的数组。 arg0 是常规字符串,但 arg1 必须是文本文件。该文件的内容是变量中的序列化数据。我能够将此变量的内容保存到本地文本文件,但是如何将此文件加载为数组的 arg1 项?

任何帮助将不胜感激。

【问题讨论】:

  • 究竟是什么意思,但我如何将此文件加载为数组的 arg1 项?
  • 在这个 POST 请求中,我需要发送一个参数,它是一个包含两个元素的数组,名为 arg0 和 arg1。 arg0 可以是任何字符串,但 arg1 必须是名为 data.txt 的文件。: $arguments = array("arg0" => "foobar", "arg1" => ??data.txt??);
  • 我不认为我完全理解你想要做什么。一定要发文件吗?或者,发送文件是否可以解决您尝试通过 POST 发送数组的问题?在接收端,需要发生什么?他们需要接收文件吗?序列化数组?

标签: php file post arguments


【解决方案1】:

如果您使用的是 HttpRequest (PHP 5.3),则可以使用一种名为 addPostFile 的方法。请参阅此处的文档:http://us2.php.net/manual/en/function.httprequest-addpostfile.php

【讨论】:

  • 谢谢,但我没有在这台服务器上安装那个 PECL 扩展,也没有安装它的权限。 :-(
【解决方案2】:

您没有指定如何发出 POST 请求,但如果您想在请求中使用文件的内容作为参数,那么在构造数据时,您可以使用如下内容:

$filecontents = file_get_contents('/path/to/your_file.txt');
$data = "arg0=foo&arg1=$filecontents";

【讨论】:

  • 我其实根本没有文件。我需要发送的信息是变量中的序列化数据,但是服务器不会接受它,它只会接受一个名为 data.txt 的文本文件,其中包含序列化数据。所以我需要将此变量的内容转换为一个名为 data.txt 的文本文件,然后将文本文件作为 POST 请求的一部分发送。我已经创建了本地文本文件 data.txt,但我不确定如何将它包含在 POST 请求中。
  • @Daniel 你能把文件名发送过去(见我的回答)然后在那里阅读内容吗?
  • Daniel,您是说它的工作方式必须与表单中文件上传的工作方式类似吗?
【解决方案3】:

您可以将文件名作为arg1传递,然后在接收端用

打开它
$contents = file_get_contents($_POST['filename']);

【讨论】:

  • 我无法从其他服务器读取原始文件的内容,文件本身必须作为 POST 请求的一部分发送。
【解决方案4】:

您可以访问此服务器上的 CURL 吗?

$c = curl_init();
curl_setopt($c, CURLOPT_POST, TRUE);
curl_setopt($c, CURLOPT_URL, 'http://server.you/want/to/upload/to');
curl_setopt($c, CURLOPT_POSTFIELDS, "arg0=some+data+in+urlencoded+format&arg1=@name_of_file_with_full_path");

$res = curl_exec($c);
if($res === FALSE) {
   die("CURL failed: " . curl_error());
}

如果这是不可能的,但您仍然可以通过其他方法构建和 POST 查询,您始终可以自己构建完整的“multipart/form-data”消息并将文件内容粘贴到正确的位置。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2010-12-20
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多