I'm having issues transferring a file from a WEB client running a C++ application to a PHP server script. I have debugged through the C++ side and no errors are reported, but the file does not appear on the server. My current environment is a Vista business system running IIS. I developed the C++ app using Microsoft's Visual Studio. I know the configuration is correct as the application does communicate with PHP scripts to transfer XML data back and forth. I cannot seem to get the file upload to work. I have attached both the C++ and PHP sides. Any assistance would be greatly appreciated.
C++ code
PHP code
C++ code
Code:
hFileXfer = InternetOpen("FileSession", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if(hFileXfer != 0)
hConnect = InternetConnect(hFileXfer, "localhost", 80, "", "", INTERNET_SERVICE_HTTP, 0,0);
if(hConnect != 0)
{
DWORD flags;
flags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE;
hReq = HttpOpenRequest(hConnect,"POST", "./TargetDir/ClientUpload.php", NULL, NULL, NULL, flags, 0);
if(hReq != 0)
{
if(HttpSendRequestEx(hReq, NULL, NULL,0, NULL))
{
do
{
if(bRead = (bool)ReadFile(hSrcFile,&pBuffer, sizeof(pBuffer), &dwBytesRead, NULL))
{
if(!(bRtn =(bool)InternetWriteFile(hReq, pBuffer, dwBytesRead, &dwBytesWritten)))
{
DWORD DwError = GetLastError();
*ErrStr = "Unable to write file to server";
break;
}
dwTotalWritten += dwBytesWritten;
}
else
{
DWORD DwError = GetLastError();
*ErrStr = "Error reading source file";
bRtn = false;
break;
}
} while(dwTotalWritten < dwFileSize);
CloseHandle(hSrcFile);
TCHAR RtnBuffer[1000];
DWORD ret;
bRtn = InternetReadFile(hReq, RtnBuffer, 1000, &ret);
InternetCloseHandle(hReq);
InternetCloseHandle(hConnect);
InternetCloseHandle(hFileXfer);
}
}
}
}
PHP code
Code:
<?php
$uploaddir = '/TargetDir/ClientUploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
Comment