4

C++実行可能ファイル「skypeforwarder」があります。Macのターミナルでコマンドラインを使用するとskypeforwarderが機能します:henry $ /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder

sh: /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder: Permission denied

ただし、php exec()で呼び出された場合は、常に「permissiondenied」が発行されます。

<?php 
echo exec('whoami');

$output = null;

$execBuild = '/Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/';
$execBuild .= 'skypeForwarder';

$n  = exec($execBuild, $output); 

たくさん検索しました。問題は、Webサーバーでのphp/browser権限の問題であるはずです。また、ファイルの所有者を次の場所から変更しようとしました。

-rwxr-xr-x  1 henry  staff  1212716 19 Apr 11:23 skypeForwarder

-rwxr-xr-x  1 _www  staff  1212716 19 Apr 11:23 skypeForwarder

それでも動作しません。

http://foundationphp.com/tutorials/php_leopard.phpに従ってMacにapacheを設定しました

4

2 に答える 2

6

ファイル自体はWebサーバーで読み取り可能ですが、Desktopフォルダーは読み取り可能ではない可能性が高いため、Webサーバーはファイルをトラバースして実行可能ファイルを見つけることができません。skypeforwarder バイナリファイルは、このPHPスクリプトを提供しようとしている場所と並行するディレクトリなど、Webサーバーで読み取り可能な場所に移動する必要があります。ただし、そのディレクトリはWebアクセス可能であってはなりません。.htaccessで保護するか、Web DocumentRootの上に配置しますが、Webサーバーで読み取り可能である必要があります。

デフォルトではDesktop、OSXではそうですが、そのディレクトリの権限を変更する-rwxr------ことはお勧めできません。

さらに、ファイルを変更してWebサーバーユーザーが所有および書き込みできるようにすることはお勧めできません。_www代わりに、Webサーバーで読み取りおよび実行可能である必要がありますが、書き込みはできません。

chown henry skypeforwarder
chmod 755 skypeforwarder

標準の免責事項:いつものように、Web上でアクセス可能なPHPスクリプトからシステムコールを実行するときは、非常に注意してください。

于 2012-04-19T20:22:41.577 に答える
0

php.iniの無効化機能を見てみてください

disable_functions = exec
于 2012-04-19T20:22:38.113 に答える