質問するログイン新規登録

回答編集履歴

2

書式の改善

2018/09/13 05:56

投稿

taka-saan
taka-saan

スコア665

answer CHANGED
@@ -37,9 +37,10 @@
37
37
  ```
38
38
 
39
39
  $retに127が返った場合は、コマンド(この場合java)が見つからなかったことを
40
- 表しているので、webサーバの実行ユーザの環境でjavaへのPATHが通って
40
+ 表しているので、**webサーバの実行ユーザの環境で**javaへのPATHが通って
41
41
  いないということが考えられます。
42
42
 
43
+ 対処としては
43
- 対処としてはPATHやCLASSPATHなど実行したいコマンドの実行に必要な
44
+ PATHやCLASSPATHなど実行したいコマンドの実行に必要な
44
- 環境変数をセットした上で目的のコマンドを実行するようなシェルスクリプトを作成し、
45
+ 環境変数をセットした上で目的のコマンドを実行するようなシェルスクリプト
45
- それをexecするのが一般的です。
46
+ を作成し、それをexecするのが一般的です。

1

やり取りを元に追記

2018/09/13 05:56

投稿

taka-saan
taka-saan

スコア665

answer CHANGED
@@ -9,4 +9,37 @@
9
9
  それをexecしてみるとどうでしょうか。
10
10
 
11
11
  コマンドがどういった情報を返すのか、画像をどこかに作るだけなのか、画像を返したいのかは
12
- 質問からは読み取れないので、とりあえず置いときます。
12
+ 質問からは読み取れないので、とりあえず置いときます。
13
+
14
+ ### 追記
15
+ 私の回答1行目の仮定があっていたということですので追記します。
16
+ (質問内容を編集しておいて頂けると回答者とあとで見る人が助かります)
17
+
18
+ コマンドラインでPHPを実行する際は実行者の権限および環境で実行されますが、
19
+ webから実行される場合、実行者はwebサーバの実行権限(nobodyなど)になるので
20
+ 環境変数などの環境や権限が異なります。
21
+
22
+ 上と下で差異が出るのはそれが原因です。
23
+
24
+ また、下記の例の様に
25
+ execの戻り値を確認すると実行できなかった原因が推定できますので、
26
+ あらかじめそのようにすべきでしょう。
27
+
28
+ ```php
29
+ <?php
30
+ header('Content-Type: text/plain; charset=UTF-8');
31
+
32
+ exec("java Hello 2>&1", $output, $ret );
33
+
34
+ print_r($output);
35
+ print_r($ret);
36
+
37
+ ```
38
+
39
+ $retに127が返った場合は、コマンド(この場合java)が見つからなかったことを
40
+ 表しているので、webサーバの実行ユーザの環境でjavaへのPATHが通って
41
+ いないということが考えられます。
42
+
43
+ 対処としてはPATHやCLASSPATHなど実行したいコマンドの実行に必要な
44
+ 環境変数をセットした上で目的のコマンドを実行するようなシェルスクリプトを作成し、
45
+ それをexecするのが一般的です。