質問編集履歴

3

exec関数によるlsの結果を修正

2021/07/06 11:23

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -176,7 +176,7 @@
176
176
 
177
177
  public function cmd(){
178
178
 
179
- if (!exec('ls /usr/bin/ffmpeg 2>&1', $array)) {
179
+ if (!exec('cd /usr/bin/ && ls 2>&1', $array)) {
180
180
 
181
181
  echo "NG";
182
182
 
@@ -192,11 +192,11 @@
192
192
 
193
193
  //ブラウザに表示された結果
194
194
 
195
- array(1) { [0]=> string(62) "ls: cannot access '/usr/bin/ffmpeg': No such file or directory" }
195
+ array(771) { [0]=> string(8) "411toppm" [1]=> string(9) "JxrDecApp" [2]=> string(9) "JxrEncApp" [3]=> string(3) "X11" [4]=> string(1) "[" [5]=> string(7) "aclocal" [6]=> string(12)~~(中略)
196
-
196
+
197
- ```
197
+ ```
198
-
198
+
199
- 見えいの、権限がないことになると思います。
199
+ たくさん表示されましたがffmpegはかったです。
200
200
 
201
201
 
202
202
 

2

顕現関連の調査事項を追記

2021/07/06 11:23

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -142,6 +142,88 @@
142
142
 
143
143
 
144
144
 
145
+ ④実行権限があるのか
146
+
147
+ まず、exec関数実行ユーザーを調べました。
148
+
149
+ ```
150
+
151
+ public function cmd(){
152
+
153
+ $user = exec('whoami');
154
+
155
+ dd($user);
156
+
157
+ }
158
+
159
+
160
+
161
+ // ブラウザに表示された結果
162
+
163
+ "www-data"
164
+
165
+ ```
166
+
167
+ ↑php実行ユーザーは「www-data」のようです。
168
+
169
+
170
+
171
+
172
+
173
+ www-dataがlsした場合ffmpegが存在するのか確認しました。
174
+
175
+ ```php
176
+
177
+ public function cmd(){
178
+
179
+ if (!exec('ls /usr/bin/ffmpeg 2>&1', $array)) {
180
+
181
+ echo "NG";
182
+
183
+ }
184
+
185
+ var_dump($array);
186
+
187
+ }
188
+
189
+ }
190
+
191
+
192
+
193
+ //ブラウザに表示された結果
194
+
195
+ array(1) { [0]=> string(62) "ls: cannot access '/usr/bin/ffmpeg': No such file or directory" }
196
+
197
+ ```
198
+
199
+ ↑見えないので、権限がないことになると思います。
200
+
201
+
202
+
203
+ ``root@90418f2ef79f:/usr/bin# chmod 755 ffmpeg``
204
+
205
+ を叩いて権限を変更してから再度試しましたが、結果は同じでlsしても見つからない状態です。
206
+
207
+
208
+
209
+ 試しに
210
+
211
+ ``root@90418f2ef79f:/usr/bin# chmod 777 ffmpeg``
212
+
213
+ にしてみても結果は同じでした。
214
+
215
+
216
+
217
+ 参考にしたサイト
218
+
219
+
220
+
221
+ [www-dataユーザーがバイナリファイルを実行するための権限](https://www.it-swarm-ja.com/ja/ubuntu/%60wwwdata%60%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%A8%A9%E9%99%90/959558859/)
222
+
223
+
224
+
225
+
226
+
145
227
 
146
228
 
147
229
  ### 補足情報(FW/ツールのバージョンなど)

1

セッション切れで内容が全て消えたので書き直し

2021/07/06 09:30

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- ffmpegというライブラリを使って、サイト上で2つの音源を合成(ミックス)できるようにしたいです。
5
+ - ffmpegというライブラリを使って、サイト上で2つの音源を合成(ミックス)できるようにしたい
6
6
 
7
- phpのexec関数を利用して処理を行おうとしています。
7
+ - phpのexec関数を利用して処理を行おうとしています。
8
+
9
+ - 開発環境はMac上のDocker
8
10
 
9
11
 
10
12
 
@@ -12,15 +14,19 @@
12
14
 
13
15
  何もおこりません。
14
16
 
15
- 特にエラーも表示されず困ってます。
17
+ 特にエラーらしきメッセージず困ってます。
16
18
 
17
19
 
18
20
 
21
+ ↓該当アクションにアクセスしたときのブラウザ上の表示
22
+
19
23
  ```
20
24
 
21
- エラーメッセージ
25
+ Array ( )
22
26
 
23
27
  ```
28
+
29
+ output.mp3は生成されません。
24
30
 
25
31
 
26
32
 
@@ -28,9 +34,17 @@
28
34
 
29
35
 
30
36
 
31
- ```ここに言語名を入力
37
+ ```php
32
38
 
39
+ public function cmd(){
40
+
41
+ $cmd = 'cd ../storage/app/private && /usr/bin/ffmpeg -i motoongen.wav -i ongen.m4a -filter_complex amix=inputs=2:duration=longest output.mp3';
42
+
43
+ exec($cmd,$opt);
44
+
33
- ソースコード
45
+ print_r($opt);
46
+
47
+ }
34
48
 
35
49
  ```
36
50
 
@@ -38,9 +52,95 @@
38
52
 
39
53
  ### 試したこと
40
54
 
55
+ ①コンテナ内で直接コマンドを実行すれば成功しました
56
+
57
+ ```
58
+
59
+ root@90418f2ef79f:/var/www/ecapp02/storage/app/private# /usr/bin/ffmpeg -i motoongen.wav -i ongen.m4a -filter_complex amix=inputs=2:duration=longest output.mp3
60
+
61
+ ```
62
+
63
+ output.mp3は生成されます。
41
64
 
42
65
 
66
+
67
+
68
+
69
+ ②exec関数が正常に動作すること確認
70
+
71
+ ffmpegの記述の部分をpwdに変えて動作確認しました。
72
+
73
+ ```php
74
+
75
+ public function cmd(){
76
+
77
+ $cmd = 'cd ../storage/app/private && pwd';
78
+
79
+ exec($cmd,$opt);
80
+
81
+ print_r($opt);
82
+
83
+ }
84
+
85
+
86
+
87
+ //ブラウザ上に表示される結果
88
+
89
+ Array ( [0] => /var/www/ecapp02/storage/app/private )
90
+
91
+ ```
92
+
93
+ 実行結果が表示されたので、exec関数自体は動いているように見えます。
94
+
95
+
96
+
97
+ ③ライブラリの参照先の調査
98
+
99
+ おそらくなのですが、
100
+
101
+ コマンドを叩いて実行するときに参照しているライブラリ保存先と
102
+
103
+ exec関数利用時に参照するライブラリの保存先が異なるのではないか?
104
+
105
+ と考えました。(的外れでしたら申し訳ありません)
106
+
107
+
108
+
43
- ここ問題に対し試したこを記載してください。
109
+ コンテナ内にてwhichコマンドで確認する
110
+
111
+ ```ここに言語を入力
112
+
113
+ root@90418f2ef79f:/var/www/ecapp02/storage/app/private# which ffmpeg
114
+
115
+ /usr/bin/ffmpeg
116
+
117
+ ```
118
+
119
+ と表示されることから、ライブラリffmpegは/use/binに保存されているようです。
120
+
121
+
122
+
123
+ exec関数利用時にもし別の場所が参照されているのであれば、
124
+
125
+ そのディレクトリにffmpegのライブラリをコピーすればいいのでは?
126
+
127
+ と考えています。
128
+
129
+
130
+
131
+ ですがexec関数がライブラリ実行時にどのディレクトリを参照しているか、
132
+
133
+ 調べ方がわかりません。
134
+
135
+
136
+
137
+ 参考にしたサイト
138
+
139
+ [ffmpegをphpのexecで動かそうとしてハマる
140
+
141
+ ](https://taupe.site/entry/ffmpeg/)
142
+
143
+
44
144
 
45
145
 
46
146
 
@@ -48,4 +148,8 @@
48
148
 
49
149
 
50
150
 
51
- ここにより詳細な情報を記載してください。
151
+ Laravel Framework 6.20.20
152
+
153
+ PHP 7.3.28-2+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Jun 4 2021 21:23:19) ( NTS )
154
+
155
+ Docker 20.10.6