0

javajarファイルを実行するphpからバッチファイルを実行しています。コマンドを実行すると、通常は正常に実行されますが、phpを使用して実行すると正常に実行されます。上記のエラーが発生します。

誰か助けてもらえますか?

Java:

        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プログラムで同じロケールを使用する必要があります。これは、英語ロケールでの3月Marの省略形です(たとえばイタリア語ですが、この文字列は間違いなくロケールに依存します)。オブジェクトをJava側のコンストラクターに渡し、PHPのcouterpartとして渡します。LocaleSimpleDateFormat setlocale()

ちなみに、外部プログラムを呼び出すときは、空白やその他の特殊文字を避けるために、常に入力をエスケープすることを忘れないでください(これはあなたの場合ではないかもしれませんが、忘れられがちで予期しないバグにつながるため、一般的なアドバイスとして役立ちます)

于 2013-03-20T14:53:18.217 に答える