1

phpでfopenを実行しようとして問題が発生しました。約300kbのデータセットをジェネリックハンドラー(.ashxファイル)に送信しています。.NetまたはPHP側のソリューションを歓迎します。送信に使用しているコード:

function DoPostRequest($url, $data, $optional_headers = null)
{
    $params = array('http' => array('method' => 'POST', 'content' => $data, 'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                    "Content-Length: " . strlen ( $data ) . "\r\n"));
    if($optional_headers != null) {
        $params['http']['header'] = $optional_headers;
    }
    $ctx = stream_context_create($params);
    try {
        ini_set ('user_agent', $_SERVER['HTTP_USER_AGENT']);
        $fp = fopen($url, 'rb', false, $ctx);
        $response = stream_get_contents($fp);
    } catch (Exception $e) {
      echo 'Exception: '.$e->getMessage();
    }
    return $response;
}

これは、.Netを実行しているWebサーバーに接続します。問題は、リクエストが開始されると、.NetサーバーがHTTP 1.1 /100Continue応答を送信することです。送信されるデータセットが小さい場合はすべて正常に機能しますが、ファイルサイズが大きいため、.NetFrameworkによってContinueが自動的に挿入されると思います。

でC#コードを設定してみました

System.Net.ServicePointManager.Expect100Continue = false;

また、Web.configファイルを次のように変更しました。

<system.net>
  <settings>
    <servicePointManager expect100Continue="false" />
  </settings>
</system.net>

しかし、これはどれもうまくいきませんでした。したがって、PHP側で実行したいと思います。バニラPHPインストール(cURLがインストールされていない)を使用していますが、fopenに100の継続を無視または期待させる方法はありますか?

編集:与えられた完全なエラーコード:

警告:fopen(http:// localhost:59396 / Testing.ashx)[function.fopen]:ストリームを開くことができませんでした:HTTPリクエストが失敗しました!HTTP / 1.1 100 72行目のC:\ xampp \ htdocs \ Prototype\Testing.phpに進みます

4

1 に答える 1

0

OK、これは自分で修正しました。組み込みのVisualStudioエミュレーターではなくIISExpressを使用するようにサーバーを変更することで、すべてが正常に機能しました。しかたがない!

于 2012-05-14T14:17:30.790 に答える