2011-01-28 10 views
0

私はこの特定の機能でエラーがどこにあるのか把握しようとしています。 ポストされた機能とよく似ていますが、いくつかのマイナーな調整があります。とにかく、変数$ PAYMENTPAGE-> ipa_urlに特定のURLがあります。私はこれに投稿しようとしているだけで、接続が正常に行われているかどうかを確認するための戻りデータをdie( 'test')にします。 代わりに私は空白のページを取得し続けます。ストリームコンテキストでphp fopenを使用してポストからデータを受け取ることに問題がある

私はそれをカール拡張機能を使用して動作させることができましたが、任意の拡張子を持つボックスのままで動作するように単純にストリームを使用する方が好きです。私は、私が修正した例外エラーを受け取っていたので、接続が行われていることは分かっていますが、なぜ情報が投稿から返されていないのか分かりません。

function doPostRequest($url, $data, $optional_headers = null) 
{ 
    $params = array('http' => array(
       'method' => 'POST', 
       'content' => $data 
      )); 
    if ($optional_headers !== null) { 
     $params['http']['header'] = $optional_headers; 
    } 
    $ctx = stream_context_create($params); 
    $get_stream = true; 
    try{ 
     $fp = @fopen($url, 'rb', false, $ctx); 
     if (!$fp) { 
      throw new Exception("Problem creating stream from $url, \n\t".implode("\n\t", error_get_last())); 
     } 
     $response = @stream_get_contents($fp); 
     if ($response === false) { 
      throw new Exception("Problem reading data from $url, \n\t".implode("\n\t", error_get_last())); 
     } 
     $get_stream = false; 
    } catch(Exception $e){ 
     mcFatal("Error(".date('Y-m-d h:i:s').'):'.$e->getMessage()."\n"); 
    } 


    if($get_stream){ 
     return false; 
    } 

    return $response; 
} 
+0

'stream_get_contents'が警告を投げているのだろうかと思います。 '@'を抑制するエラーを取り除き、 'error_reporting'がそれを見るのに十分低い(' display_errors'または 'log_errors'と同様に)であることを確認してください。また、バイナリフラグを持つURLを 'fopen 'するのが期待される動作であるかどうかはわかりません。いずれにしても、 'fopen' +' stream_get_contents'を 'file_get_contents'で置き換えてみてください。 – Fanis

答えて

1

Ubuntuを使用している場合:これはUbuntuのPHPバージョンのバグです。詳細はhttps://bugs.launchpad.net/ubuntu/+source/php5/+bug/650779を参照してください。

+0

個人的なマシンはUbuntuですが、スクリプトはFreeBSD 8.0を実行しているネットワークサーバーから実行されています。私の推測では、そのOSで発生する同様のバグがあります。 – Aglystas

-1

httpプロトコルライブラリ(cURLなど)を使用していない理由はありますか?それはあなたのためのストリームを処理し、エラーの場合に情報を生成することができます。

function doPostRequest($url, $data, $optional_headers = null) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    //include array of additional headers 
    if (count($optional_headers)) { 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $optional_headers); 
    } 

    return curl_exec($ch); 
} 
+0

カールがインストールされていないか、アップグレードに問題がある場合は、カールに頼る必要がないのが良いでしょう。 – Aglystas

+0

私は部分的に同意しますが、私はcURLを本質的な拡張と見なします。それ以外の場合は、HTTPプロトコルを再実装して結果を解析します。それにもかかわらず、私はあなたのコードに特に間違ったものは見られないので、デバッグするのは難しいです(これが私が最初にそのような拡張を使う理由です)) –

+0

質問はcURLではなくfopenに関するものでした。他の簡単な選択肢に準拠させるのが難しいと感じる。 –

関連する問題