У меня есть исполняемый файл C ++ «skypeforwarder». skypeforwarder работает, если я использую командную строку в терминале в Mac: 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 ();
<?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);
Я много искал. Проблема должна заключаться в проблеме разрешения php / браузера на веб-сервере. Я также попытался изменить владельца файла:
-rwxr-xr-x 1 henry staff 1212716 19 Apr 11:23 skypeForwarder
в
-rwxr-xr-x 1 _www staff 1212716 19 Apr 11:23 skypeForwarder
Это все еще не работает.
Я установил apache в моем mac согласно http://foundationphp.com/tutorials/php_leopard.php
Хотя сам файл доступен для чтения веб-сервером, папка « Desktop
», скорее всего, отсутствует, и поэтому веб-сервер не может пересечь его, чтобы найти исполняемый файл. Вы должны переместить двоичный файл skypeforwarder
в место, которое читается веб-сервером, например каталог, параллельный тому, где вы пытаетесь служить этому скрипту PHP. Однако этот каталог не должен быть доступен для веб-доступа. Защитите его .htaccess или поместите его над веб-документом DocumentRoot, но он должен быть доступен для чтения веб-сервером.
По умолчанию Desktop
на OSX является -rwxr------
и не рекомендуется изменять разрешения для этого каталога.
Более того, нецелесообразно изменять файл, который будет доступен и доступен для записи пользователем веб-сервера. Вместо этого он должен быть читаемым и исполняемым веб-сервером, но не доступен для записи.
chown henry skypeforwarder chmod 755 skypeforwarder
Стандартная оговорка: как всегда, будьте предельно осторожны при выполнении системных вызовов из PHP-скриптов, доступных в Интернете.
Попробуйте посмотреть функцию отключения в php.ini
disable_functions = exec