我正在从php执行批处理文件,执行java jar文件。当我正常运行命令它运行正常,但当我通过PHP执行它。它给出了上述错误。
任何人都可以帮忙吗?
爪哇:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
//get current date time
//tdt = new java.util.Date();
Calendar c = Calendar.getInstance();
try {
tdt= sdf.parse(startdate);
} catch (ParseException ex) {
Logger.getLogger(ReportExporter.class.getName()).log(Level.SEVERE, null, ex);
}
PHP:
$command ="cmd /c ".EXPORT_BATCH_PATH." ".$fromdate." ".$todate." &";
echo $command;
$result = system($command, $output);
OR:
$command ="cmd /c ".EXPORT_BATCH_PATH." ".$fromdate." ".$todate." &";
echo $command;
$result = exec($command, $output);
当我手动运行上面的echo $命令值时,它会正常运行。但是通过php执行给出错误。
我的PHP脚本包含这一行;
<?php header('Content-type: text/html; charset=utf-8');
setlocale(LC_ALL, 'en_US');?>
文本编码有问题吗?
请查看接受的答复..下面的一行解决了我的问题;
java -Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8 -jar c:\Progra~1\MyApplication\MyApplication.jar -exportfromto %1 %2
答案 0 :(得分:0)
您构建的SimpleDateFormat
使用dd-MMM-yyyy
作为日期格式。这需要$fromdate
和$todate
成为以相同约定格式化的文本字符串。
如果以某种可识别语言环境的方式打印它们,则解析可能会失败。您的PHP脚本应通过strftime("%d-%b-%Y")
明确地格式化日期。您还希望PHP和Java程序使用相同的语言环境,因为Mar
是 March 的缩写形式,在英语语言环境中(例如也是意大利语,但这个字符串肯定是区域设置依赖)。您将Locale
对象传递给Java端的SimpleDateFormat
constructor,并将setlocale()
传递给PHP couterpart。
顺便说一句,在调用外部程序时,请记住to escape input以避免空格和其他特殊字符(这可能不是你的情况,但它是一个有用的一般建议,因为它经常被遗忘并导致意外的错误)