PHP脚本以不同的方式为WinIten和浏览器请求工作

时间:2013-01-18 14:50:28

标签: php c++ wininet

问题:PHP脚本没有正确读取(写?flush?)文件。

  • platform:windows7
  • web服务器:apache with php-5.4.6
  • c ++工具集:msvc10
  • 浏览器:chrome,即

以下是显示问题的最小示例。

PHP脚本打开文件,读取数字,递增数据并保存回同一文件

 <?php
    ini_set('error_reporting', 'on'); error_reporting(E_ALL);
    $file = fopen("file.txt", "r+");
    if ( $file )
    {
        $line = fgets( $file );
        $list = sscanf( $line, "%d" );
        $x = $list[0];
        $x += 1;
        fseek( $file, 0 );
        fwrite( $file, $x );
        fflush( $file );
        fclose( $file );
        echo $x;
    }
?>

当我从浏览器调用此脚本时 http://localhost/test.php - 一切正常 - 我在每次刷新页面后看到增加的数字:1,2,3 ......

但是,当我尝试从C ++代码(WinInet)

执行相同操作时
while ( true )
{
    HINTERNET hInternet = ::InternetOpen( TEXT("WinInet"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL,0 );
    if ( hInternet != NULL )
    {
        HINTERNET hConnect = ::InternetConnect( hInternet, TEXT("127.0.0.1"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0,1u );
        if ( hConnect != NULL )
        {
            HINTERNET hRequest = ::HttpOpenRequest( hConnect, TEXT("GET"), TEXT("test.php"), NULL, NULL, 0, 0, 1 );
            if ( hRequest != NULL )
            {
                BOOL bSend = ::HttpSendRequest(hRequest, NULL,0, NULL,0);
                if ( bSend )
                {
                    for (;;)
                    {
                        char  szData[1024];
                        DWORD dwBytesRead;
                        BOOL bRead = ::InternetReadFile( hRequest, szData, sizeof(szData)-1, &dwBytesRead );
                        if ( bRead == FALSE  ||  dwBytesRead == 0 )
                            break;
                        szData[dwBytesRead] = 0;
                        log << szData;
                    }
                }
                ::InternetCloseHandle(hRequest);
            }
            ::InternetCloseHandle(hConnect);
        }
        ::InternetCloseHandle(hInternet);
    }
    Sleep( 1000 );
}

php脚本只增加一次数字,我看到下一个输出: 1,2,2,2,......

WinInet是否有“复活节彩蛋”或者我遗失了什么? 感谢。

0 个答案:

没有答案