php-fpm ne fonctionne pas exec, système, shell_exec, seulement CLI
php-fpm
, nginx
exec lors de l'utilisation .phpfiles()
shell_exec()
system()
fonctionne très bien à partir de la ligne de commande.
Exemple quand fonctionne bien:
#php myphp.php
myphp.php
contient:
<?php
exec('ping -c 3 google.com', $output);
print_r($output);
?>
Mais si je l'ai mis sur mon navigateur http://localhost/myphp.php
, il ne fonctionne plus.
Des idées?
- Je modifier
J'ai fait un fichier avec le contenu suivant:
#cat info.php
<?php
if(function_exists('exec')) {
echo "exec is enabled";
}
phpinfo();
?>
Dans mon navigateur, imprimer
exec est activé, y php info..
J'ai fait un fichier avec le contenu suivant:
#cat info.php
<?php
//Check for safe mode
if( ini_get('safe_mode') ){
//Do it the safe mode way
echo "Do it the safe mode way";
}else{
//Do it the regular way
echo "Do it the regular way";
}
?>
Dans mon navigateur, imprimer
Le faire de la façon habituelle
N'ai-je pas voudrais savoir si je suis en prison?
Dans mon php ini
#cat /etc/php-5.5.ini
safe_mode pas montré, ou SUR on ou OFF.
n'existe tout simplement pas
Vérifier
et aussi le "safe_mode", si elle est activée, les appels système sont désactivés
Les appels système ont à être activé dans PHP.ini pour les non cli
C'est derrière
J'ai modifier avec plus de détails, espérons-le, de servir plus de guides
phpinfo
pour la configuration de l'environnement, des Chemins, si exec est désactivé, ou FPM s'exécute dans un chroot.et aussi le "safe_mode", si elle est activée, les appels système sont désactivés
Les appels système ont à être activé dans PHP.ini pour les non cli
C'est derrière
nginx
avec des inconnus, la configuration, la réponse est assez confus:) Veuillez préciser si nginx
partie qui fonctionne bien ou pas.J'ai modifier avec plus de détails, espérons-le, de servir plus de guides
OriginalL'auteur laur | 2015-03-26
Vous devez vous connecter pour publier un commentaire.
Je pense que exec et de ce type de fonctions sont désactivées dans votre php.ini . Vous pouvez le vérifier en
Ouvrir votre php.ini et accédez à la section disable_functions
Si exec est répertorié sous , supprimez-la.
Puis redémarrez
php-fpm
.Également Si le Safe Mode est activé, cette fonction ne sera pas disponible. Vous devez le désactiver.
Modifier
utilisation du chemin d'accès complet pour le ping. Vous pouvez le trouver en tapant cette commande dans le shell
which ping
Modifier
# ping /sbin/ping, changue chemin dans mon fichier dans le navigateur Array ( ), dans la ligne de commande, beau travail!!
Afficher uniquement les Array ( )
qu'en est
exec('ls', $output); print_r($output);
Afficher uniquement les Array ( ) , en ligne de commande, beau travail php myfile.php
OriginalL'auteur Harikrishnan
Php-fpm est chrooté par défaut sur OpenBSD. C'est probablement la cause, vous le voyez de travail sur les cli et pas sur le web.
Vous avez deux solutions. Désactiver chroot (commentaire de la ligne
chroot = /var/www
sur/etc/php-fpm.conf
) ou de résoudre les problèmes que vous pouvez rencontrer.Statique version compilée de ping réside, dans
/bin/ping
(de l'intérieur du chroot). Vous aurez besoin de copier/etc/hosts
et/etc/resolv.conf
à l'intérieur du chroot dans le but de résoudre des hôtes (les noms que vous essayez de faire une requête ping à google).Toutes les autres commandes du système que vous envisagez d'appeler doit être copié à l'intérieur du chroot aussi (ainsi que leurs bibliothèques partagées ou compilé statiquement).
Utilisation
ldd(1)
pour trouver des bibliothèques que vous aurez besoin.En fonction de ce que vous essayez d'atteindre ce pourrait être un travail fastidieux.
Exec, système et shell_exec sont probablement désactivé, que d'autres utilisateurs ont signalé.
OriginalL'auteur Paco Esteban
Il a travaillé 4me!
Juste un conseil: en général, les réponses sont beaucoup plus utiles que s'ils incluent une explication de ce que le code est destiné à faire, et pourquoi cela résout le problème sans introduire d'autres.
OriginalL'auteur Michael mltefive