2011-01-09 13 views
4

OK、私はコマンドラインからコマンドを実行できる理由を考えていますが、PHPのexec()から

私はいくつかの創造的な検索を行い、ロードブロックを打っています。

私はLinuxプログラム "sox"を使用しようとしています。私はPHPスクリプトから呼び出そうとしています。コマンドラインを使用すると、スクリプトは機能しません。しかし、私はPHPのexecを使用すると、動作しません。

例:

sox file1.mp3 file2.mp3 tempfile.mp3 -V3 

(「V3」は冗長出力を指定します)

「ユーザX」として、またはrootとしてコマンドラインで実行し、私は新しいファイルを作成することができています。しかし、次のようにコマンドを実行した場合:

<?php 
exec('sox file1.mp3 file2.mp3 tempfile.mp3 -V3', $output); 
foreach($output as $line){ 
print $line; 
} 

新しいファイルは生成されません。さらに、コマンドの結果を返す配列は空白です。

私は

exec(ls,$output); 

で単純なテキストを行っていると私は、ルートディレクトリの内容を取得します。

私はPHPコマンドget_current_user()を使用し、ウェブサイトのルートであるディレクトリの所有者を返しました。

しかし、linuxコマンドwhoamiを使用すると、現在の人物が「apache」と表示されることがわかりました。私は、このプログラムを使用するための権利をApacheに与える必要がありますか?

私はオンラインで検索し、試行錯誤して私が間違っていることを理解しようと努力します。どんな助けもありがとうございます。

明確化

  • 私はセーフモードではないです(私は のphpinfo()ページ」をチェックする)
+0

OKでPHPを実行しているので、ここで大きな取引が1だった場合(Apache)は、出力フォルダへのアクセス権を持っている必要があります。 – Scott

答えて

3

Typこれはパスの問題です。呼び出ししようとしているアプリケーションは、おそらくWebサーバーのユーザーアカウントの検索パスにありません。私はフルパスでPHPからアプリケーションを呼び出すだけです。そのパスを設定ファイルに保存して、それが使用されているどのシステムでも動作します。

+0

ここでの修正は、ディレクトリ構造全体のプログラムのパスを見つけることになります。それを呼びますか? "通常の"コマンドラインは、プログラムの場所を検索するか、何とか知っていますか?私の質問がばかげて聞こえたら、私を許してください。私は必然的にLinuxを学んでいます。 – Scott

+0

これは "which"コマンドで行うことができるようです。私はそれを行っていきます。 – Scott

+1

linuxの各シェルアカウントには、一般的なコマンドラインアプリケーション(/ usr/binなど)の検索パスがあります。多くの場合、Webサーバーアカウントの検索パスは空です。私はPHPのアプリケーションを見つけることはありませんが、どこかのパスをハードコード(例えば、/ usr/local/sox/bin/sox file1 ... exec)。私のWebアプリケーションのために、私はサーバーごとに設定ファイルを使用し、 –

2

私はPHPがあなたのApacheを実行しているユーザーとして実行され、この確信しています(ディレクトリを作成する権限のないユーザ)誰もが書き込みを許可し、ユーザのApacheが実行されているかどうかを確認する出力を作成してください。

+0

whoamiが "apache"を返す最善の方法は何ですか?apacheにプログラムを使用する権限を与えるか、execコマンドを使用してより多くの権限を持つユーザーとして認証する権限を与えますか?それが可能ならば... – Scott

+0

Apacheが書き込める出力ディレクトリを使用します。通常、webappsにはこのような操作のために/ cache/folderが含まれています。 – Daniel

+0

OK、「tempfiles」という名前の新しいフォルダを作成しました。私は、所有者としてApacheを使ってこの新しいフォルダへの出力パスを指摘しました。私はコマンドラインから実行したが、PHPのexecではなかった場合、コマンドはうまくいった。 – Scott

0

チェックするのではなく、単に「ソックス」と入力し、2)ユーザがスクリプトを実行するよりも、SOX法へのフルパスを指定する必要があります)あなたが現在safe_mode

+0

私はセーフモードではない: "safe_mode - オフ - オフ" – Scott

関連する問題