質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

3回答

1709閲覧

コマンドプロンプトで直叩きで結果が得られるコマンドをPHPから実行するとエラーになる

ms5025

総合スコア292

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2018/10/29 00:58

編集2018/10/29 01:30

前提・実現したいこと

コマンドプロンプトで叩いて結果が得られるコマンドをPHP側から実行すると結果が得られません。
何が間違っているかわからず困っています。

現在バーコード読み取り用Zxfingのjavaのライブラリを使ってPHPからバーコード読み取りのバッチを作っています。
今回以下のコマンドをwindowsコマンドプロンプトで叩くと結果がえられることを
確認しました

//コマンド C:\>java -cp C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\javase-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\core-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\jcommander-1.72.jar com.google.zxing.client.j2se.CommandLineRunner file:/C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/images/test.png (format: EAN_8, type: PRODUCT): //結果(画像のバーコードの数値、座標が取得できました) Raw result: 12345670 Parsed result: 12345670 Found 2 result points. Point 0: (51.0,92.0) Point 1: (307.0,92.0)

発生している問題・エラーメッセージ

PHP側で以下のようにプログラミングしました

PHP

1//実行したいコマンド(コマンドプロンプトで叩いたものと同じ) 2$command = 'java -cp C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\javase-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\core-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\jcommander-1.72.jar com.google.zxing.client.j2se.CommandLineRunner file:/C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/images/test.png 3 4 5//コマンド実行 6$ret = exec($command, $out,$res);

var_dumpで結果を吐き出すと以下でした

$ret=”” $out=空のarray $res=1

が帰ってきてしまいます。

試したこと

コマンドで直叩きだと結果は得られるのですが、
PHP側から実行すると結果としてほしい情報

Raw result: 12345670 Parsed result: 12345670 Found 2 result points. Point 0: (51.0,92.0) Point 1: (307.0,92.0)

が得られません。
$outのarrayの中に入ってきてくれるとばかり思っていたのですが。

ちなみに
$command = 'dir';

等と簡単なwindowsコマンドをいれてみると
$ret、$out共に正しく結果が得られます。

書き方に不備等があるのでしょうか?
javaの設定なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

最初のC:\>プロンプトであって、実行時に入力するものではないので不要です。java以降を実行してください。

投稿2018/10/29 01:00

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/10/29 01:01

そして、「file://」以降もコマンドの出力結果ですので、入力してはいけません。
ms5025

2018/10/29 01:05

すいません「C:\>」はタイプミスです。 実際はjava以降を実行しました。 file://は、はずしてもやはり結果はえられません。。
ms5025

2018/10/29 01:08

java -cp C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\javase-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\core-3.3.3.jar;C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\bin\jcommander-1.72.jar com.google.zxing.client.j2se.CommandLineRunner C:\xampp\htdocs\localhost\vendor\php-zxing-master\src\images\Code128Barcode.jpg --try_harder --multi としてみましたがやはり結果は得られず同じでした・・・
ms5025

2018/10/29 01:14

すいません、file://以降もコマンドの出力結果?とはどういうことでしょうか。 私javaはよくわからないのですが、3つのjarと com.google.zxing.client.j2se.CommandLineRunner というdllを使って Code128Barcode.jpgを処理するようなコマンドだと思うので コマンドの出力結果というより、処理対象jpgという位置づけだと思うのですが。。 実はこのコマンド、PHP用のXZingのdllの中のコードなのです。 どうしてもうまくいかないので内部をデバッグしている状態なので コマンド内容自体はそこまで大きくはずしてないはずです・・
maisumakun

2018/10/29 01:17

すみません、コメントは間違いです(途中改行されていたので、少し見誤っていました)。
ms5025

2018/10/29 01:19

わかりにくくてすいませんでした>< 何か引っかかるポイントでもいいんで、指摘いただけるとありがたいです
maisumakun

2018/10/29 01:20

PHPから実行した場合、パスが違って「java」でコマンドが見つからない、ということも考えられます。
ms5025

2018/10/29 01:29

そのあたりをもう少しみてみます!set javaで JAVA_HOMEはちゃんと通ってるようなのですがjavaのパスまわりをみてみます!
ms5025

2018/10/29 02:00

$command = str_replace('\', '/', $command); で¥を/にすれば実行できました! ありがとうございます!
guest

0

決定的な原因はわかりませんが、少なくとも実行したいコマンド($command)にあるC:\>は不要かと。

投稿2018/10/29 01:08

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2018/10/29 01:09

あぁ、書いている間に同じ回答が。 そして質問の訂正と。 この回答はスルーしてください。
ms5025

2018/10/29 01:11

すいません、修正しました><
guest

0

phpファイルからの相対パスで指定してみては。

投稿2018/10/29 01:40

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/10/29 01:56

すいません! 以下だとうまくいきました!  java -cp C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/bin/javase-3.3.3.jar;C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/bin/core-3.3.3.jar;C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/bin/jcommander-1.72.jar com.google.zxing.client.j2se.CommandLineRunner file:/C:/xampp/htdocs/localhost/vendor/php-zxing-master/src/images/test.png /と\の違い!? こういうのも関係ありますか? $command = str_replace('\', '/', $command); でリプレースかけようとしたら ↑自体が構文エラーになってしまいました。 どのようにすればリプレースできるのでしょうか?
m.ts10806

2018/10/29 01:58

¥は「エスケープストリング」です。 'がエスケープされているためエラーになるのかと。 それ自体を文字列として扱いたければ¥¥のように重ねる必要があります。
ms5025

2018/10/29 01:59

すいません$command = str_replace('\', '/', $command); にすればいいんですね!しょうもないこときいてすいませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問