Проблема: 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 или я что-то упустил?
Благодарю.
Задача ещё не решена.
Других решений пока нет …