2015-04-19 86 views
1

我以字節爲單位從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文件用的字節適量,但它仍然無法讀取。

回答

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

完美的作品。

相關問題