PHP 调用 exec 执行中文命令的坑
来源:互联网 发布:停车场车牌识别算法 编辑:程序博客网 时间:2024/06/06 01:41
首先,我们的项目中有这么一个需求,就是需要在发送请求时,需要调用 java 写的一个加密库。所以不可避免的会使用到 php 的 exec 方法执行 shell 命令。
一切都很正常,直到,出现了中文。哎。具体的 case 如下:
样例代码:
<?php
$cmd = 'java -jar sign-maker.jar mike messi';
exec($cmd, $ret, $out);
var_dump($ret);
$cmd = 'java -jar sign-maker.jar 麦克 梅西';
exec($cmd, $ret, $out);
var_dump($ret);
其中,sign-maker.jar 就是我们按照第三方的加密协议的一个签名包(虽然也是我写的),执行这段代码,我们可以得到如下的结果:
php index.
php
array(1)
{
[0]=>
string(80) "495cc9e9269265cc0e7d58940367976571a1c4fdb90bf842ee4ba703fb1a554abf0772218e29d3d8"
}
array(2) {
[0]=>
string(80) "495cc9e9269265cc0e7d58940367976571a1c4fdb90bf842ee4ba703fb1a554abf0772218e29d3d8"
[1]=>
string(80) "e442a87d369a1a3c610bb2d18bd38fdad3b52644ab0ef86a21b57a5d0d75cb8dbf0772218e29d3d8"
}
可以看到,我们已经生成了两个 sign 值。但是,在传输过程中,对面居然报了 sign 无效的错误。觉得很奇怪,第一个 sign 是正确的,但是第二个就是败了。于是我们在终端中手动输入了这个命令:
└─[$]> java -jar sign-maker.jar 麦克 梅西
92144a18e9f75ec2e257c9bb15a05825a706064445b9492efd065dfd6c8b38d0bf0772218e29d3d8
发现 sign 果然不同。所以第一反应是字符编码的问题,尝试了 utf8encode,iconv 等等方法转换字符,但是都是无功而返。最后定为到环境变量的问题上。
解决办法
解决办法先上,在 exec 的命令前首先指定字符集:
<?php
$set_charset ='export LANG=en_US.UTF-8;';
$cmd = 'java -jar sign-maker.jar mike messi';
exec($set_charset.$cmd, $ret, $out);
var_dump($ret);
这样即可。
阅读全文
2 0
- PHP 调用 exec 执行中文命令的坑
- 用php 执行PhantomJS文件,php中使用exec,system等函数调用系统命令
- PHP中调用系统命令的system(),exec(),passthru()
- PHP中调用系统命令的system(),exec(),passthru()。。。。。。。。
- 怎样在php中执行exec命令
- PHP exec 函数 执行Linux命令
- php中exec函数执行linux命令
- php执行shell命令,system、exec、passthru
- php exec java -jar 不能执行命令
- PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
- 使用ant的exec命令来调用 make命令执行makefile文件
- iis php exec() system() 命令无法执行,通过cmd执行PHP可输出执行的cmd结果
- php的exec函数不执行
- shell 命令的执行—fork & exec
- PHP执行Linux命令的两个有用的函数exec和shell_exec
- PHP执行exec调用svn up时候失败问题
- Windows下php执行exec函数调用python
- java 利用Runtime.getRuntime().exec()代码调用服务器执行命令
- Tomcat----JVM调优和线程池优化
- java客户端与服务端建立连接 线程 ServerSocket
- fwrite与fprintf区别、printf与fprintf区别
- LeetCode-75. Sort Colors
- 精通CSS(9.3hasLayout&9.4solution)&R
- PHP 调用 exec 执行中文命令的坑
- Tomcat源码分析-JMX(下)
- Tomcat安装与环境变量的配置
- CentOS yum install Another app is currently holding the yum lock解决方法
- 初学者到编程高手
- To yourself
- 反编译apk出现Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec错误
- C语言中scanf(),sscanf(),fscanf()的用法和区别
- OpenCV颜色空间——HLS颜色空间