2009-05-22 9 views
2

APIは、実装しようとしていますが、コマンドを含むXMLファイルのアップロードが必要です。 これを行うための簡単な方法は、ファイルの内容を生成し、ファイルシステムに書き込んで、curlでWebサーバーにアップロードすることです。PHPを使ってPOST(マルチパート/フォームデータ)を使ってテキストをアップロードします。

私が達成しようとしているのは、phpの一時プロトコルハンドラを使用して書き込み部分をスキップすることです。サンプルコードは次のとおりです。

<?php 
    $fp = fopen("php://temp", "r+"); 

    $request = 'some xml here'; 
    fwrite($fp, $request); 

    rewind($fp); 

    $input_stat = fstat($fp); 
    $size = $input_stat['size']; 

    $url = "http://example.com/script.php"; 
    $ch = curl_init(); 

    $filename = $_POST[cert_file] ; 
    $data['file'] = "@xml.xml"; 

    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST,1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data); 
    curl_setopt($ch,CURLOPT_INFILESIZE,$size); 
    curl_setopt($ch,CURLOPT_INFILE,$fp); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
    $result = curl_exec($ch); 
    $error = curl_error($ch); 

    echo 'result:'.$result."\n"; 
    echo 'error:'.$error."\n"; 

    curl_close($ch); 
?> 

残念ながら、これは動作しません。 Tcpdumpは、要求が送信されていないことを示します。 更新:私が得る結果は次のとおりです。

result:

error:failed creating formpost data

誰でもPHPでオンザフライでのファイルとしてテキストをアップロードする方法、手掛かりを持っていますか?

+0

解決方法をお探しですか?私はまったく同じ問題を抱えています。すでにバッファーに入っているファイルの内容をアップロードしようとしています。私はまたファイルとしてアップロードするためにファイルに書き戻したくない。 –

+0

私は同じ問題を抱えています:( – Geltrude

+0

私はまだこれのための解決策がありません。 – AquilaX

答えて

1

fwriteを呼び出した後、rewind($fp)に電話をかけます。 fwriteの後、ファイルポインタは一時ストリームの最後にあります。 rewindに電話すると、最初にリセットされます。

 
php > $fp = fopen("php://temp", "r+"); 
php > fputs($fp, "<xml>some xml</xml>\n"); 
php > echo stream_get_contents($fp); 
php > rewind($fp); 
php > echo stream_get_contents($fp); 
<xml>some xml</xml> 
php > exit 

最初のエコーstream_get_contentsは、何もエコーされなかった後:ここではPHPのセッションからの迅速な証拠です。 rewindの後には、stream_get_contentsの2番目のエコーがXMLを示しました。

1

おそらくそれは、ファイルハンドルのポインタがファイルの最後を指しているためです。に書き込んだ後である可能性があります。最初に巻き戻してみましたか?

fseek($fp, 0, SEEK_SET); 
関連する問題