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