通过PHP curl发布文件

通过PHP curl发布文件,php,curl,Php,Curl,可能重复: 我能够在命令行上成功运行此命令: curl-v-H“a-token:myTokenValue”-H“内容类型:application/xml”-X POST--数据二进制@/tmp/myfile_2_3.xml-一个“我的奇妙代理”http://example.com/url 如何在PHP中获取此信息?将其传递给。将其传递给。更新:使用POST和文件上载:-) 更新:使用POST上载文件:-) 查看如何使用它而不增加发布的文件内容的额外开销。查看如何使用它而不增加发布的文件内容的额

可能重复:

我能够在命令行上成功运行此命令:

curl-v-H“a-token:myTokenValue”-H“内容类型:application/xml”-X POST--数据二进制@/tmp/myfile_2_3.xml-一个“我的奇妙代理”http://example.com/url


如何在PHP中获取此信息?

将其传递给。

将其传递给。

更新:使用POST和文件上载:-)


更新:使用POST上载文件:-)


查看如何使用它而不增加发布的文件内容的额外开销。

查看如何使用它而不增加发布的文件内容的额外开销。

因为您的示例只执行get。它不上传文件,这是OP想要的。你基本上是说“通过解决你的问题来解决你的问题”。(不,我没有投反对票,但我很受诱惑)我修正了它。它现在使用cURL将文件直接发布到URL,包括所有的标题和内容。谢谢,穆罕默德,我会试试。@Mohamed Nuur它很管用,谢谢。技巧是将
file\u get\u contents()
作为
CURLOPT\u POSTFIELDS
的参数,而不是在数组中<在我的例子中,不需要code>CURLOPT\u FRESH\u CONNET、
CURLOPT\u bird\u REUSE
CURLOPT\u TIMEOUT
。因为您的示例只执行GET。它不上传文件,这是OP想要的。你基本上是说“通过解决你的问题来解决你的问题”。(不,我没有投反对票,但我很受诱惑)我修正了它。它现在使用cURL将文件直接发布到URL,包括所有的标题和内容。谢谢,穆罕默德,我会试试。@Mohamed Nuur它很管用,谢谢。技巧是将
file\u get\u contents()
作为
CURLOPT\u POSTFIELDS
的参数,而不是在数组中<在我的情况下,不需要使用code>CURLOPT\u FRESH\u CONNET、
CURLOPT\u bird\u REUSE
CURLOPT\u TIMEOUT
。这是我想要避免的。还有其他选择吗?这有什么问题,你为什么不在你的问题中这样说?对不起,你是对的,我解释得不够。我有一个框架中的请求系统,在这个框架中我可以设置cURL选项和ovverride请求方法,它已经给了我请求的响应。因为我必须处理来自请求的响应,所以我必须找到正确的方法将cURL命令转换为PHP的cURL选项。还有其他选择吗?这有什么问题,你为什么不在你的问题中这样说?对不起,你是对的,我解释得不够。我有一个框架中的请求系统,在这个框架中我可以设置cURL选项和ovverride请求方法,它已经给了我请求的响应。由于我必须处理来自请求的响应,因此我必须找到正确的方法将cURL命令转换为PHP的cURL选项。
file\u get\u contents
函数可能是解决方案,因为
cURL\u POSTFIELDS
的数组可以访问
-F
cURL选项,这不是我在查询中想要的。在
CURL\u POSTFIELDS
数组中提交文件名的
@
字符需要索引;不允许以数组形式传递
@myFileName.ext
(来自PHP手册:“从PHP 5.2.0开始,传递到此选项的带有@prefix的文件必须以数组形式才能工作。”)。
file\u get\u contents
函数可能是解决方案,因为
CURL\u POSTFIELDS
的数组到达
-F
CURL选项,这不是我在查询中想要的。在
CURL\u POSTFIELDS
数组中提交文件名的
@
字符需要索引;不允许以数组形式传递
@myFileName.ext
(来自PHP手册:“从PHP 5.2.0开始,传递给此选项并带有@prefix的文件必须以数组形式才能工作。”)。
$fileContents = file_get_contents("/tmp/myfile_2_3.xml");
$defaults = array(
    CURLOPT_CUSTOMREQUEST => "post",
    CURLOPT_HEADER => 1,
    CURLOPT_URL => "http://example.com/url",
    CURLOPT_FRESH_CONNECT => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FORBID_REUSE => 1,
    CURLOPT_TIMEOUT => 4,
    CURLOPT_POSTFIELDS => $fileContents,
    CURLOPT_HTTPHEADER => array("a-token" => "myTokenValue", "Content-Type" => "application/xml"),
);

$ch = curl_init();
curl_setopt_array($ch, ($options + $defaults));
if( ! $result = curl_exec($ch))
{
    trigger_error(curl_error($ch));
}
curl_close($ch);