2011-06-27 14 views
1

私は最近、Linux環境で以下のように動作するはずのCプログラムを書いています。Linux環境でPHPスクリプトからアプリケーションを実行する際の問題

#include <stdio.h> 
#include <stdlib.h> 

void main() 
{ 
    system("notify-send -u normal -t 200 'You Have received a new message'"); 
    system("cvlc /home/ashenafis/Music/BabyMessage.mp3"); 
    return 0; 
} 

「/ usr/sbin/play」に実行ファイルを保存しました。

私はそれが正常に動作し、端末からそれを実行すると、しかし、それは動作しません私は

<?php exec("/usr/sbin/play"); ?> 

を使用してPHPスクリプトから、それを実行しようとすると、私が行方不明です何かがありますか?助けてください。

+1

エラーメッセージが表示されますか? – Tim

+2

'notify-send'への完全なパスを指定すると動作しますか? –

+3

また、明確にするために、PHPスクリプトはコマンドライン経由で実行されているのですか、またはWebサーバーによって提供されていますか? –

答えて

0

プログラムを直接呼び出すのではなく、プログラムを呼び出すシェルを実行するbacktick operatorを試してみることができます。コードはこのようになります:

<?php echo `/usr/sbin/play`; ?> 
+0

私はこれを試しました。これまでと同じです。ブラウザは "Waiting for localhost ..."の状態に留まります。 –

0

私は、これはやり過ぎであるかわからないが、あなたはSWIG、試すことができます:ハイレベルのプログラミングの様々なCやC++で書かれたプログラムを接続するソフトウェア開発ツールを言語。

ここでサポートされている言語http://www.swig.org/compat.html#SupportedLanguagesから、PHPがサポートされていることがわかります。私はこれがあなたが探しているものだと思います。

0

notify-sendおよびcvlcは、PHPが認識できるパスにない可能性があります。 Cプログラムが完全なファイル名でそれらを参照するようにしてください。また、関連するものにo + xの許可があることを確認してください。

0

これは、Webサーバーが実行されているどのユーザーでも実行しようとしていることに注意してください。セキュリティ上の理由から制限されている可能性が最も高いです。たとえば、Apacheを使用している私のマシン(Ubuntu)では、www-dataというユーザです。 'su'コマンドを使用して、このユーザーとしてプログラムを実行し、問題の内容を確認することができます。このユーザーのパスワードがわからない場合は、rootとしてsuコマンドを実行してください。そういえば

su -c /path/your/program www-data 

、私は非常に多くのWebサーバのユーザが、「システム」のバイナリ/usr/sbinで、すなわち何でもへのアクセス権を持っている疑い。おそらく/var/www/cgi-binなどの方が良いでしょう。

関連する問題