php的escapeshellarg和escapeshellcmd受locale的影响会导致意外结果

2470阅读 0评论2016-11-25 lsstarboy
分类:PHP

环境:
1、ftp,上传受windows影响,编码是GBK或GB2312
2、PHP,受WEB系统影响,用UTF-8;
3、主机系统:utf-8

问题:
  用php来读FTP上传的文件列表:
  shell_exec( 'ls -l' .escapeshellarg( $path) );
    经常读不到文件。
  经调试,发现shell_exec很多时候输出: ls -l ''
  也就是空文件。

原因及解决:
  escapeshellarg受locale的影响,在有汉字的时候,错误的编码会导致它的返回结果为空。
  
  所以一定要用setlocale()函数来设置locale:

  setlocale('GBK');

  另外提醒:由于web系统 是utf-8,为了防止其他意外,最好在escapeshellarg后再setlocale('utf-8');
  

     lsstarboy.blog.chinaunix.net,转载请注明出处.......




--end--
上一篇:Nginx反向代理导致大文件下载失败
下一篇:SSH转发-L -R -D的区别与联系