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 / 100 Continue 响应。在发送较小的数据集时一切正常,但我假设由于文件大小很大,.Net Framework 会自动放入 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

好的,我自己解决了这个问题。通过将服务器更改为使用 IIS Express 而不是内置的 Visual Studio 模拟器,一切正常。那好吧!

于 2012-05-14T14:17:30.790 回答