php exec() de commande de refus d'autorisation
J'ai un C++ fichier exécutable 'skypeforwarder'. skypeforwarder fonctionne si j'utilise la ligne de commande dans le Terminal sous 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
Mais toujours, il a publié "autorisation refusée" s'il est appelé en 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);
J'ai beaucoup cherché. Le problème doit être le problème de l'php/navigateur de l'autorisation dans le serveur web. J'ai aussi essayé de changer le propriétaire du fichier à partir de:
-rwxr-xr-x 1 henry staff 1212716 19 Apr 11:23 skypeForwarder
à
-rwxr-xr-x 1 _www staff 1212716 19 Apr 11:23 skypeForwarder
Il ne fonctionne toujours pas.
- Je configurer apache dans mon mac selon http://foundationphp.com/tutorials/php_leopard.php
Quel est le résultat de exec("whoami");?
La sortie est _www.
La sortie est _www.
OriginalL'auteur droughtrain | 2012-04-19
Vous devez vous connecter pour publier un commentaire.
Bien que le fichier est lisible par le serveur web, le
Desktop
dossier n'est probablement pas, et le serveur web, par conséquent, ne peuvent pas parcourir pour localiser le fichier exécutable. Vous devez déplacer lesskypeforwarder
fichier binaire dans un emplacement lisible par le serveur web, par exemple un répertoire parallèle à l'endroit où vous êtes en essayant de servir ce script PHP. Ce répertoire ne doit pas, cependant, être accessible sur le web. Le protéger .htaccess ou le placer au-dessus de la web DocumentRoot, mais il doit être lisible par le serveur web.Par défaut,
Desktop
sur OSX est-rwxr------
et il est pas conseillé de changer les permissions sur le répertoire.En outre, il est très bien pas conseillé de modifier le fichier à la propriété et en écriture par
_www
l'utilisateur du serveur web. Au lieu de cela, il doit être lisible et exécutable par le serveur web, mais pas accessible en écriture.Standard avertissement: Comme toujours, être extrêmement prudent lors de l'exécution de système d'appels de scripts PHP accessible sur le web.
C'était probablement quelqu'un à la traîne parce qu'ils étaient dans une mauvaise humeur. J'ai voté que vous sauvegardez.
Il est aujourd'hui. Autorisation refusée parce que même si je chown _www skypeforwarder, henry est toujours le propriétaire de /Users/henry/Desktop/skypeForwarder/ répertoire. Un collègue m'a aidé à résolu le problème avec les 2 étapes. 1. vi /private/etc/sudoers, ajouter une ligne: _www ALL=(ALL) NOPASSWD: ALL 2. chown _www:personnel /Utilisateurs/henry/Desktop/skypeForwarder/ Merci Michael, beaucoup de vos suggestions sont bon pour moi. Je sais que c'est pas une bonne façon de définir le répertoire dans /Utilisateurs/henry/Desktop/. Je vais changer ça.
OriginalL'auteur Michael Berkowski
Essayer de regarder à l'désactiver la fonction en php.ini
Je vois de votre commentaire sur l'autre post la la
exec("whoami")
a une sortie de _www ce qui signifie que la fonction a été autorisé donc ce n'est pas ce que je suggère. Si elle a été désactivée, vous obtiendrez une erreur dans le serveur apache/PHP journal des erreurs.OriginalL'auteur PadraigD