2010-06-08 61 views
1

我正在嘗試使用cURL轉發來自正在開發的Web應用程序中的窗體的http請求。基本上我需要在不同的服務器上兩次提交相同的表單,對於第二個服務器,我將一些安全措施添加到發佈數據中。

我可以在第二張表格上收到$ _POST信息,但是我的$ _FILES有很大的麻煩 - 我已經嘗試將這兩個分開,所以還有一個對帖子和文件數據的單獨請求,但仍然沒有運氣。

這可能嗎?

+0

你可以嘗試base64編碼圖像數據併發送它作爲一個post請求,但我不知道它會按照你的要求完全工作。 – Sam152 2010-06-08 01:02:15

回答

2
<?php 
$filename = '/foo/bar'; 
$postargs = array(
    'foo' =>'bar', //normal postfield 
    'fileentry' => '@'.$filename //be sure to give it as an absolute path!, $_FILES['fileentry']['tmp_name'] usually has this 
); 

$ch = curl_init(); 
//other stuff with curl 
curl_setopt($ch,CURL_POSTFIELDS, $postargs);//give as array for proper encoding. 
curl_exec(); 
?> 
+0

不,不會,否則這個問題會是一個非常奇怪的答案,不是嗎?該手冊是你的朋友:http://www.php.net/curl_setopt – Wrikken 2010-06-08 01:16:28

+0

對不起,我查閱了手冊並在你的回答之前刪除了評論。我現在看到它沒有。仍然是奇怪的語法。我想知道我是否希望我的字段值以「@」開頭...... – Artefacto 2010-06-08 01:18:51

+0

總是想知道我自己。我懷疑php curl的實現有點古老,他們認爲magic_quotes是個好主意等等:)。並且,只要它進入,你不能在不破壞代碼的情況下將其取出。 – Wrikken 2010-06-08 01:21:54

0

您可以:

  • 力PHP不處理的文件(見this question瞭解詳細信息);
  • 使用curl提交file_get_contents('php://input')作爲原始發佈數據(有關詳細信息,請參見this question)。您還需要轉發一些HTTP頭文件CURLOPT_HTTPHEADER,即Content-LengthContent-type

這樣可以避免碰到文件系統。

+0

據我所知,php://輸入不是在enctype multipart/form-data請求上填充的,這是對fileuploads的要求,所以您不能以這種方式發送文件。請參閱:http://nl2.php.net/manual/en/wrappers.php.php – Wrikken 2010-06-08 01:18:43

+0

@Wrikken:因此,第一部分「強制PHP不處理文件」 – Artefacto 2010-06-08 01:19:21

+0

@Wrikken PHP不會將請求視爲存在'multipart/form-data',如果你按照鏈接問題的答案。 – Artefacto 2010-06-08 01:27:58