我以字節爲單位從Java編碼器接收圖片。它看起來像這樣的tcpdump(圖片不完全的,因爲隱私的內容):PHP:從服務器上的發佈請求中保存圖片
......JFIF.....`.`.....C......
..
......(.....1#%.(:3=<[email protected]\[email protected]_bghg>Mqypdx\egc...C......./../cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc........p.."......................................6......................!..1.A."Qa2q...B....#4Ccr......................................................A.1............?..j*i.}.+vE..s...d85..5.....K..`[email protected]|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.....
我需要做節省服務器的圖片,因爲我需要在shell腳本中使用它。 我該怎麼辦? 以前我是這樣做的: 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);
(它可以包含內容長度與否)。 但是,當Java編碼器發出請求時,創建的圖片只有一半尺寸,並且不可讀,但是,當我使用十六進制輸入運行此腳本時,它可以正常工作並創建他的圖像。所以如果我理解正確的話,我應該處理他在tcpdump中獲得的請求。 我嘗試了一些解決方案,如: 1.只需fwrite
在JPG文件內容(使用參數當然wb
)
2. This func
3.把我的包(C*
,c*
,a*
的其他一些參數應用, A*
)
所有我嘗試創建錯誤的圖片,但我敢肯定,有可能從他的字節創建和圖像,因爲我從十六進制數據創建它。 所以,請幫助我。如果我在正確的路上?我應該使用一些我嘗試過的功能,或者完全不同的東西?如果你需要我的東西問我,我會展示它。 Java編碼器不想顯示他的代碼,但無論如何我可以問他一些具體的東西,我想他會回答。
UPDATE 的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文件用的字節適量,但它仍然無法讀取。