2015-11-05 138 views
1

我正在一个项目中使用两个独立的服务器,一个用于开发,另一个用于可见的版本。这是流程的工作原理以及我遇到麻烦的地方:每天早上,我运行一些收集数据的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文件没有得到任何文件,有人知道如何解决这个问题吗?

如果我想要做的事是不可能的,有人知道任何其他方式,我可以尝试将文件从开发服务器发送到可见的?

谢谢并对不完美的英语感到抱歉,我不是母语的人。

祝您有美好的一天!

+1

你可以选择使用'rsync'或'SCP '如果可能,将文件从一台机器复制到另一台机器 –

+0

查看[this](http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and -php /)博客文章。 – cfreear

+0

您使用的是什么版本的PHP? – Machavity

回答

0

今天我有类似的东西,当我们的服务器突然没有发送一个文件过卷曲了。 我发现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'); 
)); 
+0

'CurlFile'建议''文件',所以你应该先尝试一下。 – Rudie

相关问题