php以及前端的一些小小的技术要点
1. php提供界面,从HBase服务端下载二进制文件。
方案:为了降低系统之前的耦合,前台与后台采取rpc交互方式。采用Thrift封装一个服务,提供下载接口。由于从HBase中读出来就是二进制流,所以php端的Thrift client可以直接接收二进制然后定通过http直接传输到浏览器端。
具体实现方式:
Thrift中有个类型叫做binary,所以这是个突破口。
binary dk_downLoadFileBytes(1:string id)//接口定义
HBase端是byte[] 类型作为该接口的返回值(Java)。php端直接可以将接收的二进制定向到网页,代码如下:
$client = new MyClient; //这个客户端封装了Thrift接口。 $client ->connect(); $file = $client ->download( $docid ); //下载文件,接收二进制 $client ->close(); //下载配置代码 header( "Content-Encoding: none" ); header( "Content-type: application/octet-stream" ); header( "Accept-Ranges: bytes" ); header( "Content-Transfer-Encoding: binary" ); //这里需要注意,如果不加上双引号的转义符号,firefox浏览器会不支持包含空格的文件名,会造成下载文件名的切断。 header( "Content-Disposition: attachment; filename=\"" . $filename . "\"" ); header( 'Pragma: no-cache' ); header( 'Expires: 0' ); //这里要注意,如果不加后面这两句,下载word文件时,打开会出现乱码。需要清空并刷新输出缓冲区。 ob_clean(); flush (); echo $file ; //这时就可以下载了,浏览器会弹出窗口。 |
2. 文本框以及URL(地址栏中)显示特殊某些符号
文本框这个没什么好说的,文本框显示一些特殊符号需要做一些转义处理。比如双引号是quot;
在地址栏中,我们有时候可能会把一些特殊的符号传到下一个页面,然后期望在下一个页面中显示。比如'+'号。这个符号在地址栏中会被转义为%B,而字符串中的空格在地址栏中会显示成+号。比如我们有两个网页a.php和b.php。a.php中有个a标签想要连接到b.php,其中有个参数为str,值为“+” 。我们希望在网页B中正常的显示“+”。所以就要这样一下:str_replace('"','"',str_replace('+','%2B',$myString));。
3. jquery 传递中文字符串出现乱码的问题。
js ajax端: encodeURI(‘your val’);
php端: urldecode($val);
关注分布式存储技术以及分布式计算方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?