我以字节为单位从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.....
我需要在服务器上保存图片,因为我需要在shell脚本中使用它。 我该怎么做? 以前我这样做过: 首先,我走错了路。我已将请求保存在文件中:
$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. jpg文件中只有fwrite
个内容。(当然使用参数wb
)
2. This func
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文件,但它仍然不可读。
答案 0 :(得分:0)
$file = fopen($filename, "w");
fputs($file, $query);
fclose($file);
完美无缺。