PHP: <? $ip=getenv("REMOTE_ADDR"); #айпишник компа с которого пришел отчет $dirname = "logs/"; #папка куда будут складываться отчеты if(!file_exists($dirname)){ #если нету паки, создаем mkdir($dirname, 0777, true); #ставим права доступа } $name =$dirname.$_FILES['myfile']['name']; #составляем имя файла папка/время/[айпишник]/имя файла которое было на компе $filegate=@$_FILES['myfile']['tmp_name']; #пока идет закачка дается временное имя if (!empty($filegate)) { move_uploaded_file($filegate,$name); #все складваем в лог папку echo "okkk"; } ?> Code: procedure sendpost(host,pathscript,filename:string); var hOpenHandle, hConnectHandle, hResourceHandle: Pointer; boundary:string; header, data:string; fhand: THandle; fBuffer: pchar; fhFileSize,BytesRead: dword; bound:string; namefile:string; begin fhand := CreateFile(pchar(filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); fhFileSize:= GetFileSize(fhand,nil); GetMem(fBuffer, fhFileSize); ReadFile(fhand, fBuffer^, fhFileSize, BytesRead, nil); closehandle(fhand); bound:= chr(65+random(25))+chr(97+random(25))+chr(48+random(9)) +chr(97+random(25))+chr(65+random(25))+chr(48+random(9)) +chr(97+random(25))+chr(97+random(25))+chr(48+random(9)) +chr(65+random(25))+chr(48+random(9))+chr(97+random(25)) +chr(65+random(25))+chr(48+random(9))+chr(97+random(25)) +chr(48+random(9))+chr(97+random(25))+chr(48+random(9)) +chr(65+random(25))+chr(97+random(25))+chr(65+random(25))+chr(97+random(25)); namefile:=extractfilename(filename); hOpenHandle := InternetOpen(nil, 0, nil, nil, 0); if hOpenHandle <> nil then begin hConnectHandle := InternetConnect(hOpenHandle, pchar(host), 80, nil, nil, 3, 0, 0); if hConnectHandle <> nil then begin hResourceHandle := HttpOpenRequest(hConnectHandle, 'POST', pchar(pathscript), nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0); if hResourceHandle <> nil then begin boundary := inttostr(random(65355))+inttostr(random(65355))+inttostr(random(65355)); header := 'Content-Type: multipart/form-data; boundary=----------'+bound; data := '------------'+bound+#13#10+ 'Content-Disposition: form-data; name="info"'#13#10#13#10+'dfgdfgdfgdfg'+#13#10+ '------------'+bound+#13#10+ 'Content-Disposition: form-data; name="myfile"; filename="'+namefile+'"'#13#10+ 'Content-Type: text/plain'#13#10#13#10+fBuffer+#13#10+ '------------'+bound+'--'; HttpSendRequest(hResourceHandle, @header[1], length(header), @data[1], length(data)); InternetCloseHandle(hResourceHandle); end; InternetCloseHandle(hConnectHandle); end; InternetCloseHandle(hOpenHandle); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if opendialog1.execute then sendpost('test.ru', '/test.php',opendialog1.FileName); end;
чтото я не вкурил, это к чему код? Склеен кое как из моего куска и еще чегото. Куча левых, неиспользуемых строк. + комменты для php файла чуть неправильны )
отправляет текстовый файл на сервак)) как бинарный кидать через вининет не разобрался... а php не обращай внимания, главное работает, принимает и ладно))...
2 Nightmarе Код под загрузке бинарника в буфер - это просто ужас. 1) Читает по 1 байту. 2) EOF - это эля текстовых файлов. более правильнее былобы такая последовательность функций CreateFile (... GENERIC_READ ....) size := GetFileSize(...) setlength(buf, size); ReadFile(... @buf[1], size, ....) CloseFile(); т.е. ты открываешь файл на чтение. Получаешь его размер. Под этот размер расширяешь строку, и сразу весь файл считываешь в неё.
Ты не установил компоненты. 1) Качаешь отсюда http://www.raize.com/DevTools/RzComps/RC5Trial.zip 2) Ставишь все по дефолту 3) Открываешь Delphi 4) Component -> Install Packages, Кнопка Add 5) Выбираешь C:\Program Files\Raize\RC5\Bin\RaizeComponentsTrialVcl_Design70.bpl 6) Жмешь ОК, компоненты добавляются, радуешься жизни
по-моему, сообщает, что RaizeComponentsVd70 уже установлен (и возникает конфликт) попробуй удалить установленную версию (удалить все пути и файлы), а потом установить эту
Code: var proxy_info: PInternetProxyInfo; begin New(proxy_info); proxy_info^.dwAccessType := INTERNET_OPEN_TYPE_DIRECT; UrlMkSetSessionOption(INTERNET_OPTION_PROXY, proxy_info, SizeOf(Internet_Proxy_Info), 0); //здесь идет твой код Dispose(proxy_info); end;
Вообще эти настройки делаются сразу при открытии сесии InternetOpen('BROWSER ID', INTERNET_OPEN_TYPE_PROXY, 'hostort', nil, 0); INTERNET_OPEN_TYPE_DIRECT – обрабатывает все имена хостов локально. INTERNET_OPEN_TYPE_PRECONFIG – берет установки из реестра. INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY - берет установки из реестра и предотвращает запуск Jscript или Internet Setup (INS) файлов. INTERNET_OPEN_TYPE_PROXY – использование прокси-сервера. В случае неудачи использует INTERNET_OPEN_TYPE_DIRECT.
Использую компонент: IdHTTP Для передачи POST запроса При ошибки 404 появляется масага с текстом об 404 ошибки и завершение обработки кода (Не выход из программы), как монжно сделать чтобы при 404 ошибки выполнялись определенные действия из обработчика?