2017-07-05 2 views
0

J'essaie d'utiliser "googler" de jarun dans un script PHP afin de rechercher sur YouTube et trouver l'URL du premier résultat. La commande que j'exécute est googler --np --json -C -n 1 -w youtube.com -x <name of youtube video> et fonctionne parfaitement sur ma machine locale. Voici mon code:PHP exec() fonctionne en ligne de commande mais pas en web

<?php 
exec("googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine", $results); 
var_dump($results); 
?> 

Lorsque j'exécute ceci dans la ligne de commande, il fonctionne parfaitement comme il se doit, mais quand je le fais via un navigateur Web ou une requête GET, cela ne fonctionne pas. Je suis conscient qu'il est exécuté en tant qu'autre utilisateur. Dans mon cas, il est l'utilisateur www-data, donc je donné que l'utilisateur complet autorisations sudo sans mot de passe, et a fait les commandes suivantes:

sudo -u pi googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine 

ainsi que

su - pi -c 'googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine' 

aucune de ces travaillé. Cela a-t-il un rapport avec googler? Qu'est-ce que je fais mal?

Lors de l'ajout 2>&1 à la commande, je reçois le message d'erreur suivant:

stdout encoding 'ascii' détecté. googler nécessite utf-8 pour fonctionner correctement. Un mauvais encodage peut être dû à un environnement local non UTF-8 ou à un mauvais PYTHONIOENCODING. (Pour l'enregistrement, la langue de vos paramètres régionaux est le codage des paramètres régionaux, votre PYTHONIOENCODING n'est pas défini.) Veuillez définir un paramètre régional UTF-8 (par exemple, en_US.UTF-8) ou définissez PYTHONIOENCODING sur utf-8.

+0

Peut-être 'googler' n'est pas dans son' $ PATH', essayez d'utiliser le chemin complet. – Barmar

+1

Capturez la sortie d'erreur avec '2> & 1' à la fin de la commande envoyée à' exec() '. – Barmar

+0

Quelle est l'erreur réelle que PHP vous donne? – Mike

Répondre

1

Essayez de mettre:

putenv("PYTHONIOENCODING=utf-8"); 

dans le script avant d'appeler exec(). googler nécessite apparemment l'environnement local ou cette variable d'environnement à définir.

+0

Merci, cela a fonctionné parfaitement! :) –

0

Vous devez supprimer exec du paramètre disable_functions dans le fichier php.ini pour votre installation du module de serveur de PHP (qui est séparé de votre installation CLI). Il est généralement désactivé par défaut pour le module serveur.

+0

J'ai été capable de faire 'exec (" whoami ")' avec succès, donc ce n'est pas le problème. –

+0

Je m'excuse pour la réponse incorrecte. J'ai donné ma meilleure estimation sur la base des informations fournies. –