如何使用curl发送文件而不使用表单?
我正在一个项目中使用两个独立的服务器,一个用于开发,另一个用于可见的版本。这是流程的工作原理以及我遇到麻烦的地方:每天早上,我运行一些收集数据的VBA宏,编译这些数据(主要是.xlsx文件)并通过FTP将其发送到我的开发服务器。可见服务器应该使用该数据来显示一些信息等,但FTP在该服务器上被阻止。因此,我必须每天早上从我的开发服务器复制到可见服务器,以便更新可见服务器上的数据,并且我想自动完成这一操作。如何使用curl发送文件而不使用表单?
我试图通过HTTP请求(准确地说是WinHTTPRequest)将数据从VBA宏直接发送到可见服务器,但没有奏效。
我在网上搜索,发现卷曲可以通过PHP发送HTTP请求,我想使用该解决方案,如果可能的话,这里是我当前的代码:
send.php:
<?php
$request = curl_init('mysite/receive.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,
CURLOPT_POSTFIELDS,
array(
'file' => '@MyFileRealPath.xlsx;filename=file'
));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);
?>
receive.php:
<?php
var_dump($_FILES);
?>
当我运行send.php,我得到:
所以receive.php文件没有得到任何文件,有人知道如何解决这个问题吗?
如果我想要做的事是不可能的,有人知道任何其他方式,我可以尝试将文件从开发服务器发送到可见的?
谢谢并对不完美的英语感到抱歉,我不是母语的人。
祝您有美好的一天!
今天我有类似的东西,当我们的服务器突然没有发送一个文件过卷曲了。 我发现PHP版本已升级。 显然,在之前的版本中,引入了一个新的curl设置(CURLOPT_SAFE_UPLOAD),该设置禁止使用@符号进行文件上载,并且“PHP 5.6.0将默认值更改为TRUE”。
我认为你需要使用curl_setopt添加此设置并禁用它,如:
$request = curl_init('mysite/receive.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($request,
CURLOPT_POSTFIELDS,
array(
'file' => '@MyFileRealPath.xlsx;filename=file'
));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
或者,你可以使用CurlFile:
$request = curl_init('mysite/receive.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,
CURLOPT_POSTFIELDS,
array(
'file' => new CurlFile('MyFileRealPath.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
));
'CurlFile'建议''文件',所以你应该先尝试一下。 – Rudie
你可以选择使用'rsync'或'SCP '如果可能,将文件从一台机器复制到另一台机器 –
查看[this](http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and -php /)博客文章。 – cfreear
您使用的是什么版本的PHP? – Machavity