2012-10-09 58 views
1

我試圖通過POST將XML文件發送到遠程服務器上的窗體。我正在生成XML數據,並將其作爲字符串存儲在名爲$ XmlData的變量中。這是一個以我的開始標記開始的字符串(請參見下面的示例)...所以在此字符串中沒有「標題」。我可以很容易地將它作爲XML文件寫入臨時目錄中的服務器......但理想情況下,我只想將它發佈爲好像它是文件,但沒有創建文件的額外步驟(然後我必須後記刪除)...以下是我認爲應該讓我上傳我的XML文件,如果我確實創造了它第一個代碼...使用PHP通過cURL發佈XML而不首先生成XML文件

$url = 'http://www.mydomain.com/path/to/form/process.php'; 

    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); 
    curl_setopt($ch, CURLOPT_URL, _VIRUS_SCAN_URL); 
    curl_setopt($ch, CURLOPT_POST, true); 
    // same as <input type="file" name="xmlfileresource"> 
    $post = array(
     "xmlfileresource"=>"@/path/to/myfile.xml", 
     "action"=>"incomingXml", 
     "user"=>"JohnSmith", 
    ); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    $response = curl_exec($ch); 
    curl_close($ch); 

我的問題是:如何流/ BLOB /什麼我的$ XmlData字符串的內容放入這個cURL執行中,以至於遠程服務器認爲它只是一個正常的POST文件?

並不真正相關,但在情況下,它可以幫助...我的$ XMLDATA字符串可能是這個樣子:

<clientversion> 
    <component> 
    <type>module</type> 
    <name>resources</name> 
    <version>2.7.3</version> 
    <date>2012-09-01 02:18:33</date> 
    </component> 
    <component> 
    <type>module</type> 
    <name>staff</name> 
    <version>3.1</version> 
    <date>2011-04-01 07:12:48</date> 
    </component> 
</clientversion> 
+2

http://stackoverflow.com/questions/3085990/post-a-file-string-using-curl-in-php是我見過的唯一解決方案。但不幸的是,我覺得將它寫入文件仍然很乾淨。 –

+0

@Brenton Alker我同意這種方法比僅使用臨時文件更awk。太糟糕了......我真的想在記憶中做到這一切,但我找不到真正的方法來實現它。我只會將它寫入文件,發佈該文件,然後刪除該文件。謝謝。 – techtheatre

回答

0

最後不得不寫的臨時文件,帖子說,然後刪除臨時文件。沒有我期望的那麼優雅,但它工作正常。感謝Brenton Alker提供的鏈接......但按照其他文章所述做它似乎不切實際。