0

我正在从执行 java jar 文件的 php 执行批处理文件。当我正常运行命令时它运行良好,但是当我通过 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);

或者:

    $command ="cmd /c ".EXPORT_BATCH_PATH." ".$fromdate." ".$todate." &";
    echo $command;
    $result = exec($command, $output);

当我手动运行上面的 echo $command 值时,它运行正常。但通过 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
4

1 回答 1

0

SimpleDateFormat您构造的dd-MMM-yyyy用作日期格式。这要求$fromdate$todate是以相同约定格式化的文本字符串。

如果您以某种可识别区域设置的方式打印它们,则解析可能会失败。您的 PHP 脚本应通过strftime("%d-%b-%Y"). 您还希望 PHP 和 Java 程序使用相同的语言环境,因为Mar它是March的缩写形式,英语语言环境(例如意大利语,但此字符串绝对取决于语言环境)。您将一个Locale对象传递给Java 端的SimpleDateFormat 构造函数setlocale(),并作为 PHP 的竞争对手。

顺便说一句,在调用外部程序时,请始终记住转义输入以避免空格和其他特殊字符(这可能不是您的情况,但这是一个有用的一般建议,因为它经常被遗忘并导致意外错误)

于 2013-03-20T14:53:18.217 回答