Я хочу загрузить изображение на страницу PHP. Я пробовал кодирование base64. Тогда я попробовал WinHTTP. Код ниже. В чем проблема? Или есть другой метод?
AutoIt код:
#include <ScreenCapture.au3>
$sScreenShotFile = @TempDir & "\ScreenShot.png"$hScreenShot = _ScreenCapture_Capture($sScreenShotFile)
$hfile = FileOpen($sScreenShotFile, 16)
$sData = FileRead($hfile)
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('POST', 'http://example.com/index.php', 0)
$oRequest.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oRequest.Send('screenshot=' & $sData)
Код PHP:
<?php
if(isset($_POST['screenshot']) && !empty($_POST['screenshot'])){
$file = fopen(dirname(__FILE__) . "/screenshot.png", "w+b");
fwrite($file, pack("H*" ,$_POST['screenshot']));
fclose($file);
}
?>
Изображение загружается, но содержимое не совпадает. Я думаю, что есть проблема с двоичным преобразованием. Я открываю двоичный файл, используя этот код AutoIt:
$hfile = FileOpen($sScreenShotFile, 16)
После отправки я конвертирую в строку и сохраняю в файл на PHP:
$file = fopen(dirname(__FILE__) . "/screenshot.png", "w+b");
Код выполняется, и файлы создаются, но содержимое передается неправильно.
AutoIt: согласно W3C HTML 4.01 Спецификация:
Тип контента «
application/x-www-form-urlencoded
«неэффективно
для отправки большого количества двоичных данных или текста, содержащего
не-ASCII символы. Тип контента «multipart/form-data
» должно быть
используется для отправки форм, содержащих файлы, данные, не входящие в ASCII, и
двоичные данные.
PHP: Не конвертировать (попытка использования pack()
) поскольку fopen()
называется с помощью 'b'
(форсируя бинарный режим).
Других решений пока нет …