问题:PHP脚本没有正确读取(写?flush?)文件。
以下是显示问题的最小示例。
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是否有“复活节彩蛋”或者我遗失了什么? 感谢。