2011-11-10 3 views
0

私はshell_execとコマンドを試していましたが、私はこの作業をすることができません。私はphpのshell_exec()関数を使い、スクリーンキャプチャコマンドを実行してデスクトップのスナップショットを撮る。コーダを使用してスクリプトをローカルで実行すると、正常に動作します。それから、htdocsを使ってApacheをインストールしたところで走ったが、それでもどこにも画像を保存しない?ブラウザでは、ディレクトリを変更する必要がありますか?これは私の超シンプルなスクリプトのようです。これも可能ですか?php shell_execとmac osx terminalコマンドの画面キャプチャを使用すると画像が保存されますか?

<? 
    $command = "screencapture -iWP ~/Random/test.png"; 
    shell_exec($command); 
    ?> 

答えて

1

私は現在、テストするためにMacにアクセスすることはできませんが、動作していれば、私は非常に驚くばかりです。

サーバーでは、では、ログインしたユーザーとは異なるユーザーIDでapacheを実行する必要があります。つまり、フレームバッファーを取得しようとすると失敗するはずです。

少なくとも画像を書き込んだり(書き込もうとした場合)〜/ Random/test.pngになります。例えばapacheがapacheというユーザとして実行されている場合、対象のファイル名は〜apache/Random/test.pngです。

OSXは基本的にUNIXであり、UNIXライクなオペレーティングシステムの重要な機能はセキュリティです。ビデオフレームバッファは、ログインしているユーザ(またはルート)のUIDで実行されているプロセスにのみアクセス可能でなければなりません。 apache httpdのようなデーモンプロセスは、ルートではない独自のUIDの下で動作しているはずです。

+0

明らかに、これはユーザー側で作業していた場合には厄介なセキュリティ問題になりますが、コマンドはまだ実行されるため、ファイルがどこに保存されているかわかりません。私はApacheのXAAMPインストールを使用しているので、rootのlocalhostフォルダはhtdocsにありますが、それでも気づきます。しかし、私は、Macサーバーを実行していた場合、これは実際に動作することができますか?それは、ユーザーではなく、サーバーの画面をスクリーンショットするだろうか? – roozbubu

+0

答えを編集します。サーバー上では、httpdとデスクトップセッションは異なるUIDでなければなりません。 –

0

おそらく、実行可能ファイルのフルパスを指定する必要があります。また、出力PNGのフルパスを指定すると、ユーザーが違うので役立ちます。

を実行し、実行が置かれているパスを調べるには、Command

which screencapture 

。出力ファイルは、Apacheは(通常のapache)の下で実行しているユーザーのための書き込み可能なディレクトリにある必要があります。 apacheの設定を調べるか、(topとして)(rootとして)実行することで、apacheが実行されているかどうかを確認することができます。

希望に役立ちます。

+0

申し訳ありませんが、私はちょっとした騒ぎですが、設定ファイルを開いたところで、どこにユーザーを見つけることができますか? – roozbubu

+0

すべての配布が異なります... "grep -rin" user "。"を実行すると、 Ubuntuでは設定ファイルは実際には多くのファイルに分かれています... "User"ディレクティブを探してみてください。 .. – Homer6

関連する問題