我正在开发一个项目,我使用两个独立的服务器,一个用于开发,一个用于可见版本。这是过程的工作方式,以及我遇到麻烦的地方:每天早上,我运行一些收集数据的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文件没有得到任何文件,有人知道如何修复它吗?
如果我想要做的事情是不可能的,有人知道我可以尝试将文件从开发服务器发送到可见的文件吗?
感谢并抱歉我的英语不完美,我不是母语人士。
度过美好的一天!
答案 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');
));