![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつも皆様、回答をありがとうございます。
PHPからsystem()でjavaを呼び出した時の動作について質問があります。
[現状]
phpファイルで
$system = "java TestHello";
system($system);
とすると、結果のメッセージが出力されません。
TestHello.javaは
public class TestHello {
public static void main(String[] args) {
System.out.println("Hello.");
}
}
です。コマンドプロンプトからjava TestHelloとするとHello.と出力されます。
[質問]
メッセージを出力させるためには何か設定が必要なのでしょうか?
それともphpからjavaを呼び出すことはできないのでしょうか?
[環境]
windows XP home
java 1.5.0_11
php 5.2.2
[その他 試したこと]
・linuxで試しましたが同じ結果でした。
・system("java -verbose TestHello"); とするとクラス名などのデバッグ情報は出力されましたが、"Hello."は出力されませんでした。
・ファイル生成をするjavaのコードをsystem()から実行しましたが、ファイルは生成されていませんでした。コマンドプロンプトから実行したところ、生成されていました。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
Webではなく、コマンドラインでPHPを実行してみると、
(ご存知かもしれませんが、コマンドラインでPHPを使うこともできます。)
>php test.php
おそらくphpo.iniで、safe_mode=onにしていなければ、普通にHello.と出力できると思います。
でも普通Webではできません。なぜWebではできないのか。
注意すべきなのは、コマンドを誰が実行しているかということです。
PHPがApacheのモジュールであれば、Apacheのプロセスが実行するわけですから、その権限以上のコマンドは実行できません。
普通、Apacheは、すごく弱い権限しかあたえられていませんので、
自分のドキュメントルートのファイルを作ったり、消したりする程度のことはできますが。Apacheのプロセスが、Javaコマンドを実行することはおそらく出来ないと思います。
ではもっと強い権限を与えればよいかというと、それもノーです。実験する分にはよいかもしれませんが、公開サーバでやるとセキュリティ上非常に危険なことになってしまいます。
本来、system()関数が用意されている意図としては、Webからコマンドを実行するというより、バッチ処理をPHPで書いて、OSのスケジューラに登録しておきたいときに使うのではないかと思います。
すみません、windowsの再起動でメッセージ出力がされるようになりました。
PATHやCLASSPATHの変更をしてjavaだけを実行する分にはその変更が反映されていたものですから、windowsの再起動は必要がないと思い込んでいました。。
apacheには権限が少ししか与えられていないのですね。
メッセージは出力されるようにはなりましたが、最終的にやりたいことはファイル生成なので、権限の問題があって生成できなければphpをコマンドラインで使う方法を探ることにします。
考えられる原因を提示して下さり、そして権限についても詳しく説明してくださって本当にありがとうございました。
No.1
- 回答日時:
コマンドのパスや実行したいファイルの置き場所の話ではないかと思います。
javaコマンドにパスが通っていて、"TestHello.class"が
PHPスクリプトと同じディレクトリにあれば、
system("java TestHello");
で所定の結果を得るのではないでしょうか。
この回答への補足
早速の回答ありがとうございます。
javaコマンドには既にパスが通っていることを確認しました。
"TestHello.class"をPHPスクリプトと同じディレクトリに移動し、CLASSPATHにそのディレクトリを追加しました。
ところがまだメッセージは出力されません。
javaコマンドを絶対パスにし、"C:\Program Files\Java\jre1.5.0_11\bin\java"や"C:\\Program Files\\Java\jre1.5.0_11\\bin\\java"でも試しましたが、これでも出力されませんでした。
やはり、他に考えられる可能性などは無いでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
httpdのプロセスが自動で消えな...
-
phpでアクセス権の設定
-
PHPからバッチファイルの実行
-
php実行中に実行中のphpファイ...
-
PHPでサーバーにインストールさ...
-
PHPで、C#のプログラムを実行す...
-
phpからエクセルのマクロを実行...
-
system()でssh命令文の実行結果...
-
PHPのコマンドをnobodyオーナで...
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
Pear::QuickFormの代わりにな...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
Subversionのリポジトリの削除
-
透過PNGが透過されない!!
-
受け取ったパラメータを次のphp...
-
zip圧縮の種類について
-
WordPressでテーマのヘッダー画...
-
XAMMPのインストールについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヒアドキュメントの中で演算子...
-
PHPからバッチファイルの実行
-
mysql複数レコードをまとめて削...
-
PHPでサーバーにインストールさ...
-
Switch文における、returnとbre...
-
PHPでコマンドプロンプトを実行...
-
phpからエクセルのマクロを実行...
-
【PHP】命令は記述順に処理...
-
PHPで、C#のプログラムを実行す...
-
別サーバのプログラムを起動
-
JSのWINOW.CONFI...
-
htmlでsubmitで指定したAction...
-
require_onceが動いていない
-
systemをrootで実行したい
-
PHPで外部プログラムのバックグ...
-
PHPからlhaコマンドを使いたい
-
phpスクリプトのみで定期実行
-
PHPでUNIXシステムコマンド...
-
PHPからexecを使ってGnuPGを実...
-
PHPスクリプトからサービスの再...
おすすめ情報