php 如何接受并转换http字节流
我做一个php服务端, java客户端以http post方式,把文件流转换为字节流,再setEntity给我, java代码片段如下:
HttpPost post = new HttpPost(postUrl);
ByteArrayEntity entity = new ByteArrayEntity(outputStream.toByteArray());
post.setEntity(entity);
if (httpClient == null) {
httpClient = new DefaultHttpClient();
}
HttpResponse response = httpClient.execute(post);
我这边需要接受http字节流,并且全部转字符串,然后做解析。
1.请问我这边应该如何去获取流?用什么接口?php://input
2.获取后字节流如何转字符串? chr?unpack?还是如何?
我感觉不是普通应用层的http方式, 是比较原始的接受http数据的方式,请大牛帮忙指点方向.
(目前我用file(php://input)获取字节流,然后chr() 转ASCII字符再写入文件查看,貌似都是乱码)
注:字节流里面只有ascii字符,没有中文字符.
回复讨论(解决方案)
补充下:
原始文件流里面的内容如下:
launch {"primary":"-1415673003223"} 1415673003223
controller {"model":"Test Controller","primary":"count"} 1415673003991
click {"click_name":"Test Button Name","primary":"count"} 1415673004598
view {"view_name":"Test Page Name","primary":"1415673005202"} 1415673005203
view {"view_name":"Test Page Name","primary":"-1415673005795"} 1415673005795
game {"package_name":"Test Game","primary":"1415673007231"} 1415673007231
game {"package_name":"Test Game","primary":"-1415673008047"} 1415673008051
如果只是存入文件 你可以
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
如果要进行处理 你需要
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
如果只是存入文件 你可以
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
如果要进行处理 你需要
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
我试了下您的方式, 取出来的content是乱码,这也是一直我卡住的地方。如您所见,java端在最初写入文件,到读取文件流,到转换字节流,到setEntity都没有做字符编码的特殊处理。所以接下来如何处理乱码的问题呢?
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==
你说的是base64_encode吧,请指教!
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
刚刚用mb_detect_encoding($s, "auto") 检测了下 返回的是UTF-8, 但是存到文件里用vim看是乱码。难道是vim的问题?
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
我把文件拷贝到本地用配置好UTF-8的vim 查看,还是乱码...
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
这个回答完全正确!确实是做了gzip压缩,交学费了!而且我之前也是知道他把文件流做了gzip压缩, 但是对这个不清楚所以也没有在提问中说道,自己也没有望着方面想。
另外请教一下, 你是如何得知做了gzip压缩的?小弟刚开始做php,希望不吝赐教!
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
感谢回答,另外也感谢orangeholic 这位朋友的帮助!
base64 解码后的是二进制串,而你在#1补充了原始文件的样式(显然不是二进制的)
所以尝试了可能的压缩算法,不想一下就对上了
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识
学习了!多谢! 100分已经给你了!赞!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...
