如何在不使用表单的情况下发送curl文件?

时间:2015-11-05 12:50:50

标签: php http curl

我正在开发一个项目,我使用两个独立的服务器,一个用于开发,一个用于可见版本。这是过程的工作方式,以及我遇到麻烦的地方:每天早上,我运行一些收集数据的VBA宏,编译数据(主要是.xlsx文件)并通过FTP将其发送到我的开发服务器。可见服务器应该使用该数据来显示某些信息等,但FTP在该服务器上被阻止。

因此,我必须每天早上将所有内容从我的开发服务器复制到可见服务器,以便更新可见服务器上的数据,并且我想将其自动化。

我尝试通过HTTP请求将数据从VBA宏直接发送到可见服务器(确切地说是WinHTTPRequest),但这不起作用。

我在网上搜索,发现cURL可以通过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时,我得到:

array(0) { } 

所以receive.php文件没有得到任何文件,有人知道如何修复它吗?

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

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

度过美好的一天!

1 个答案:

答案 0 :(得分:0)

今天,当我们的服务器突然没有通过卷曲发送文件时,我有类似的东西了。 我发现PHP版本已升级。 显然,在以前的版本中引入了一个新的卷曲设置(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');
));