【Linux】phpにてexec()が使えない


apache2.x+php4.3.x+ffmpeg0.4.9-0.3にて簡単な
Webアプリケーションを製作し、正常に使っていました。
ffmpegはhttp://dag.wieers.com/packages/ffmpeg/
より取得したものをリビルドして使っていました。

今回phpを5.14に、ffmpegもsvnより最新のものに
バージョンを上げたところ、exec()にて戻り値に127が返され、
今までシェルに渡せていたffmpegコマンドが、うまく実行
できなくなりました。

現在の環境は
CentOS4.3+php5.14+Apache2.0.52+ffmpeg SVN-r5876です。

wgetやmkdirなど他のコマンドは正常にシェルに渡され(実行され)、
戻り値にも0が返るので、ffmpegコマンドだけがうまく渡っていない
ようなのですが、何が原因となりそうでしょうか?

ご存じの方がいらっしゃいましたら、何卒ご教授下さい。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2006/08/01 18:56:59
  • 終了:2006/08/08 19:00:02

回答(3件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/08/01 19:12:20

ポイント27pt

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/execl.3.ht...

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/errno.3.ht...

http://www.geekpage.jp/programming/linux-network/perror.php

まずどういうエラーが起きているか確認してください。

大域変数errnoに<error.h>で定義された値が入っているので、perror()でエラー種類を表示させてログに吐くとか。

単純に最新のffmpegがこけているんじゃないかと思いますが…(単品で(コマンドラインから起動して)うごきますか?>ffmpeg)

id:extrea

ありがとうございます。

記載し忘れて恐縮ですが、コマンドラインから同じコマンドを投げると

無事動作します。(root,一般ユーザー変わらず)

また、topにて監視してみましたが、exec経由で投げた場合は

ffmpegのプロセス自体も起動していないようです。

実行権限?みたいなものがあるのでしょうか?

2006/08/01 19:30:38
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/08/01 19:56:16

ポイント27pt

ffmpegを直接起動しない方法にてみては?

ffmpeg.shを作成何かエラーが出ていないか

確認してみては?

#!/bin/bash

set >stdout.log

export >>stdout.log

echo $*>>stdout.log

ffmpeg $* >>stdout.log 2>stderr.log

RC=$?

echo "RC=$?" >>stdout.log

exit $RC

--------------------------

id:extrea

ありがとうございます。

早速、頂いたコードで実行権限を700とした

ffmpeg.shなるファイルを作成してみました。

結果ですが、

exec("sh ffmpeg.sh",$arr,$ret);

で、戻り値が126、動作しませんでした。

ちなみにコマンドラインではちゃんと

stderr.log、stdout.logの作成が行われました。

php、ffmpegどちらが原因かだけでもわかれば

多少気が楽なのですが・・・

2006/08/01 20:24:51
id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/08/01 20:54:50

ポイント26pt

stdout.log / stderr.logが作成されたと

言う事は、PHPは無実ですね。

stdout.logの環境変数

PATH

LD_LIBRARY_PATH

等の環境変数は問題ありませんか?

パラメータは意図したとうり渡されてますか?

stderr.log/stdout.logに何かエラーらしい

文字は出ていませんか?


何もエラーがないばあい

以下のようにとりあえず成功

echo ffmpeg $* >>stdout.log 2>stderr.log

するように変更して実行してみて

OKであればffmpegが原因です。



===============================

UNIXのエラーコード確認

コマンドラインで

egrep 12[0-9] /usr/include/*/errno.h

でエラー内容をみてください。

#define ENOKEY 126

/* Required key not available */

#define EKEYEXPIRED 127

 /* Key has expired */

であれば

Kernelエラーコードだと

KERNEL KEY RETENTION SERVICE

が返すよう。

が多分違うだろうし。

http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/D...

id:extrea

ありがとうございます。

教えて頂いた情報は、初めて見るものなので

今のスキルでは少し解決に時間がかかりそうです。

提示頂いたURLにて勉強してみます。


あと、関係ないかもしれないのですが

セットアップしたPHPはcli版なので

文末の様なコードをバッシュにて

$php test.php

とすれば通ります。(root、一般ユーザーともに)


httpd経由だと上述の通りエラーコードを

吐くのですが、cliでの挙動との違いは

何が関係しそうでしょうか?


どなたかお気づきの方いらっしゃいませんでしょうか?


#test.php

<?

exec("ffmpeg -y -i test.flv -s 320X240 -r 15 -b 64 -ac 1 -ar 24000 -f 3gp -vcodec mpeg4 -acodec aac -ab 16 test.3gp",$arr,$ret);

echo $ret;

?>

2006/08/01 23:39:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません