Java — PHP: сохранение изображения из почтового запроса на сервере

Я получаю картинку от Java-кодера в байтах. В tcpdump это выглядит так (содержание картинки не полно из-за конфиденциальности):

......JFIF.....`.`.....C......
..
......(.....1#%.(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc...C......./../cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc........p.."......................................6......................!..1.A."Qa2q...B....#4Ccr......................................................A.1............?..j*i.}.+vE..s...d85..5.....K..`..hc..y..=@.3.|N.<...?.......h....Y.$.5....W%....?E..cm0..$.$...I$...s...... Z.P2.3.j9..I..w\..F.......1.c.{.?\~..>.m4.......E......{.).nm"B.|....u..........[.H..>..4.~...k.pl......KO..;z/K..S4./.6i.....OpEc...'.m..0k9Y.r.......e. n........>...8.........~.X.R...h...f.."...q...../..mmn.<..\NI?2..q...O.2nd!......A=...\7.qZ.YS..,.+q.....

Мне нужно сохранить изображение на сервере, потому что мне нужно использовать его в сценарии оболочки.
Как мне это сделать?
Ранее я сделал это:
1. Сначала я немного ошибся. Я сохранил запрос в файле:

$query = file_get_contents("php://input");
$queryFile= fopen("/var/www/9292/querylog.txt","wb");
fwrite($queryFile, $query);
fclose($queryFile);

И когда я открываю его в превосходном текстовом редакторе, я вижу его в шестнадцатеричной системе. Я решил, что должен использовать этот запрос, и поэтому я обрабатываю его следующим образом:

$query = preg_replace('/[\s\r\n]+/', '', $query);
$queryHex=pack("H*", $query);
if (preg_match("/Content-Length:[\s]+([0-9]+)([^|]*)\-\-\-\-[0-9]+boundary\-\-/", $queryHex))
{
preg_match_all("/Content-Length:[\s]+([0-9]+)([^|]*)\-\-\-\-[0-9]+boundary\-\-/", $queryHex, $matches);
$inputImage=$matches[2][0];
$inputImage=trim($inputImage);
$file=fopen("/var/www/9292/logs.tmp", "wb");
fwrite($file, $matches[1][0]);
fclose($file);
}
else
{
$inputImage=$queryHex;
$inputImage=trim($inputImage);
}
$imageFile=fopen("/var/www/9292/inputPhoto.jpg", 'wb');
fwrite($imageFile, $inputImage);
fclose($imageFile);

(Может содержать Content-length или нет).
Но там, где Java-кодер делает запрос, созданная картинка была в два раза меньше и не читалась, однако, когда я запускаю этот скрипт с шестнадцатеричным вводом, он отлично работает и создает его изображение. Так что, если я правильно понимаю, я должен работать с его запросом, который я получаю в tcpdump.
Я пробовал некоторые решения, такие как:
1. Просто fwrite содержимое в файле jpg. (используя параметр wb конечно)
2. Этот функционал
3. Попробовал сделать некоторые другие параметры пакета (C*,c*,a*,A*)
Все, что я пробовал, создавало неправильную картинку, но я уверен, что можно создать и изображение из его байтов, потому что я создаю его из шестнадцатеричных данных.
Так что, пожалуйста, помогите мне. Если бы я был на правильном пути? Я должен использовать некоторые функции, которые я пробовал, или что-то совершенно другое? Если тебе что-то понадобится с моей стороны, спроси меня, я покажу это. Java-кодировщик не хочет показывать свой код, но в любом случае я могу спросить его о чем-то конкретном, думаю, он ответит.

ОБНОВИТЬ
Java-кодер говорит, что он не кодирует изображение.
Update1
Пробовал base64 декодирование

$query = file_get_contents("php://input");
file_put_contents('/var/www/9292/querylog.txt', base64_decode($query));
file_put_contents('/var/www/9292/query.log', base64_decode($query));
file_put_contents('/var/www/9292/photo.jpg', base64_decode($query));

Таким образом, все файлы были созданы пустыми.
Если я попробую это просто без кодировки:

$query = file_get_contents("php://input");
file_put_contents('/var/www/9292/querylog.txt', $query);
file_put_contents('/var/www/9292/query.log', $query);
file_put_contents('/var/www/9292/photo.jpg', $query);

Он создает файл jpg с надлежащим количеством байтов, но он все еще не читается.

1

Решение

$file = fopen($filename, "w");
fputs($file, $query);
fclose($file);

Работает отлично.

0

Другие решения

Других решений пока нет …