回答編集履歴

2

書式の改善

2018/09/13 05:56

投稿

taka-saan
taka-saan

スコア665

test CHANGED
@@ -76,14 +76,16 @@
76
76
 
77
77
  $retに127が返った場合は、コマンド(この場合java)が見つからなかったことを
78
78
 
79
- 表しているので、webサーバの実行ユーザの環境でjavaへのPATHが通って
79
+ 表しているので、**webサーバの実行ユーザの環境で**javaへのPATHが通って
80
80
 
81
81
  いないということが考えられます。
82
82
 
83
83
 
84
84
 
85
- 対処としてはPATHやCLASSPATHなど実行したいコマンドの実行に必要な
85
+ 対処としては
86
86
 
87
- 環境変数をセットした上で目的のコマンド実行するようシェルスクリプトを作成し、
87
+ 「PATHやCLASSPATHなど実行したコマンド実行に必要
88
88
 
89
+ 環境変数をセットした上で目的のコマンドを実行するようなシェルスクリプト」
90
+
89
- それをexecするのが一般的です。
91
+ を作成し、それをexecするのが一般的です。

1

やり取りを元に追記

2018/09/13 05:56

投稿

taka-saan
taka-saan

スコア665

test CHANGED
@@ -21,3 +21,69 @@
21
21
  コマンドがどういった情報を返すのか、画像をどこかに作るだけなのか、画像を返したいのかは
22
22
 
23
23
  質問からは読み取れないので、とりあえず置いときます。
24
+
25
+
26
+
27
+ ### 追記
28
+
29
+ 私の回答1行目の仮定があっていたということですので追記します。
30
+
31
+ (質問内容を編集しておいて頂けると回答者とあとで見る人が助かります)
32
+
33
+
34
+
35
+ コマンドラインでPHPを実行する際は実行者の権限および環境で実行されますが、
36
+
37
+ webから実行される場合、実行者はwebサーバの実行権限(nobodyなど)になるので
38
+
39
+ 環境変数などの環境や権限が異なります。
40
+
41
+
42
+
43
+ 上と下で差異が出るのはそれが原因です。
44
+
45
+
46
+
47
+ また、下記の例の様に
48
+
49
+ execの戻り値を確認すると実行できなかった原因が推定できますので、
50
+
51
+ あらかじめそのようにすべきでしょう。
52
+
53
+
54
+
55
+ ```php
56
+
57
+ <?php
58
+
59
+ header('Content-Type: text/plain; charset=UTF-8');
60
+
61
+
62
+
63
+ exec("java Hello 2>&1", $output, $ret );
64
+
65
+
66
+
67
+ print_r($output);
68
+
69
+ print_r($ret);
70
+
71
+
72
+
73
+ ```
74
+
75
+
76
+
77
+ $retに127が返った場合は、コマンド(この場合java)が見つからなかったことを
78
+
79
+ 表しているので、webサーバの実行ユーザの環境でjavaへのPATHが通って
80
+
81
+ いないということが考えられます。
82
+
83
+
84
+
85
+ 対処としてはPATHやCLASSPATHなど実行したいコマンドの実行に必要な
86
+
87
+ 環境変数をセットした上で目的のコマンドを実行するようなシェルスクリプトを作成し、
88
+
89
+ それをexecするのが一般的です。