首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

HttpQueryInfo报错,该怎么处理

2012-09-04 
HttpQueryInfo报错file1.phpPHP code$file D:\\ReadFileTo.txt$handle fopen($file, r)$sConten

HttpQueryInfo报错
file1.php

PHP code
    $file = "D:\\ReadFileTo.txt";    $handle = fopen($file, 'r');    $sContent = '';    while(false != ($a = fread($handle, 8080))){//返回false表示已经读取到文件末尾        $sContent .= $a;    }        fclose($handle);    echo "$sContent";


vc(输出file1.php):
C/C++ code
#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include<windows.h>  #include<wininet.h>  #include<iostream.h>  #pragma comment(lib,"wininet.lib")  #define DATA_CACHE_SIZE 1024*10int main(int argc, char* argv[]){    printf("Hello World!\n");    int i = 0;    char pulr[] = "file1.php";    HINTERNET hinternet=::InternetOpen(                 "http generic",                 INTERNET_OPEN_TYPE_PRECONFIG,                 NULL,                     NULL,                 0);    if (!hinternet)    {        printf("InternetOpen\n");        system("pause");        return 0;    }    i = 1;    HINTERNET hconnect= ::InternetConnect(                          hinternet,                          "144.20.80.27",                          8080,                          NULL,                                //lpszUsername                          NULL,                                //lpszPassword                          INTERNET_SERVICE_HTTP,                          0,                                //dwFlags                          0                                    //dwContext                          );    if (!hconnect)    {        printf("InternetConnect\n");        system("pause");        return 0;    }            HINTERNET hHttpOpenRequest=::HttpOpenRequest(                        hconnect,                        "POST",                        pulr,                        "HTTP/1.1",                        NULL,                        0,                        INTERNET_FLAG_RELOAD,                        0            );    if (!hHttpOpenRequest)    {        printf("HttpOpenRequest\n");        system("pause");        return 0;    }    char psHeader[] = "Content-Type: application/x-www-form-urlencoded \n\r";    if (!(HttpAddRequestHeaders(        hHttpOpenRequest,         psHeader,         strlen(psHeader),         HTTP_ADDREQ_FLAG_REPLACE|HTTP_ADDREQ_FLAG_ADD        )) )    {        printf("HttpAddRequestHeaders\n");        system("pause");        return 0;    }    char *strRet=""; //"Yjr|fc|zf|cym|wjf||role1|role2|role3|role4";    char pstrContent[] = "UserName=admin&Password=-1";    if (! (HttpSendRequest(        hHttpOpenRequest,        NULL,        0,        (LPVOID)(LPCSTR)pstrContent,        strlen(pstrContent)                    )) )    {        printf("HttpSendRequest\n");        system("pause");        return 0;    }    // Get the length of the file.                DWORD dwFileSize=0;    DWORD dwLengthBufQuery = sizeof(dwFileSize);    DWORD dwIndex=0;        BOOL bQuery = ::HttpQueryInfo(hHttpOpenRequest,        HTTP_QUERY_CONTENT_LENGTH        |HTTP_QUERY_FLAG_NUMBER,         (LPVOID)&dwFileSize/*bufQuery*/,         &dwLengthBufQuery,        &dwIndex) ;    if (!bQuery)    {        printf("HttpQueryInfo\n");        system("pause");        return 0;    }    // Allocate a buffer for the file.       char* buffer = new char[dwFileSize+1] ;            //由于不允许HTTP写缓存,所以无需循环调用InternetReadFile    DWORD dwLength=0;    DWORD dwLengthOne=1;    BOOL bRead=TRUE;    char bufferOne[DATA_CACHE_SIZE+10];    strcpy(buffer,"");    while (bRead && dwLengthOne>0)    {        strcpy(bufferOne,"");        if (InternetReadFile(                hHttpOpenRequest,                bufferOne,                DATA_CACHE_SIZE+1,                &dwLengthOne                )            )         {            if (dwLengthOne>0)            {                memcpy(&buffer[dwLength],bufferOne,dwLengthOne);                dwLength+=dwLengthOne;                //接收数据包的大小和与总数据包大小比较                if (dwLength > dwFileSize)                {                    printf("while\n");                    system("pause");                    return 0;                }                buffer[dwLength]='\0';            }        }    }    buffer[dwLength]='\0';    //to widerchar    DWORD dwSize = MultiByteToWideChar (CP_ACP, 0, buffer, -1, NULL, 0);      WCHAR *wchr = new WCHAR [dwSize];    ::MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,buffer,-1,                 wchr,dwSize);    printf(buffer);//    wprintf(wchr);    delete [] wchr;    delete [] buffer;            ::InternetCloseHandle(hHttpOpenRequest);hHttpOpenRequest=NULL;    ::InternetCloseHandle(hconnect);hconnect=NULL;    ::InternetCloseHandle(hinternet);hinternet=NULL;    printf("\n");    system("pause");    return 0;} 



问题:
1、环境windows xp + php5 + apache2.2 + vc6.0。
2、当file1.php读取的文件大于8000kb时,输出就会失败。

[解决办法]
报什么错了呢
[解决办法]
不可能呀!
[解决办法]
分段trunk输出的情况下,也不能简单地把接收到的数据直接写到buffer里,具体自己debug看吧。。每一段都会先告诉你长度

热点排行