2015-11-05 58 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

相關問題