Que dois-je faire si exec php ne peut pas être exécuté ?

藏色散人
Libérer: 2023-03-08 11:06:02
original
2466 Les gens l'ont consulté

Solution au problème selon lequel exec php ne peut pas être exécuté : 1. Modifiez la première ligne du fichier yii pour spécifier directement l'interpréteur php ; 2. Modifiez la méthode d'appel exec pour spécifier directement l'interpréteur php.

Que dois-je faire si exec php ne peut pas être exécuté ?

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur Dell G3.

Pourquoi l'exécutable php ne peut-il pas être exécuté ?

Origin

Il y a une tâche planifiée sur laquelle je veux cliquer pour la démarrer sur la page de gestion en arrière-plan OSS, mais j'ai essayé plusieurs méthodes mais cela ne fonctionne pas, quel que soit le système ou ; exec (en l'exécutant manuellement sur la ligne de commande du shell, il n'y a pas de problème) ); Au départ, j'ai soupçonné un problème d'autorisation avec l'utilisateur nginx du serveur Web, mais j'ai découvert plus tard que la variable d'environnement ne pouvait pas trouver le fichier exécutable php (car le nginx l'utilisateur est un utilisateur restreint);

Emplacement du problème
exec("/home/app/example/api/app/yii demand/virtual {$id}", $output);
print_r($output);
Copier après la connexion

et supérieur Une fois le script exécuté, seul Array() est affiché, évidemment le code métier n'est pas exécuté (la première ligne du le code commercial est affiché);

// http://oss.example.com/index.php?r=demand/demand-ip/msg&id=1929 点击后执行
exec("/home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output);
print_r($output);
Copier après la connexion

Une fois le script ci-dessus exécuté, il y a des sorties d'erreur : Array ( [0] => /usr/bin/env: php: No such file or directory )

Cette phrase provient de la première ligne du fichier yii /usr/bin/env: php. Il est destiné à indiquer où se trouve l'interpréteur de script php qui exécute le fichier yii ; mais la sortie d'erreur #!/usr/bin/env php indique que php est introuvable ; Tutoriel/usr/bin/env: php: No such file or directory"]

Solution

Option 1 : Modifier la première ligne du fichier yii et spécifier directement l'interpréteur php ;
est changé de
à
    , ce qui signifie spécifier directement l'emplacement de l'interpréteur php (vous pouvez également le modifier lorsque le code est publié)

  • Option 2 : Modifier la méthode d'appel exec et spécifier directement l'interpréteur php#!/usr/bin/env php
    exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output);
    print_r($output);
    Copier après la connexion
    #!/usr/local/bin/php
  • Remarque : lors de l'exécution réelle, il y a encore quelques problèmes avec la commande exec, voir "Erreur 504" ci-dessous
Erreur 504
  • Lorsque le temps d'exécution est trop long (par exemple plus de 60 secondes), une erreur 504 (Gateway Timeout) apparaîtra sur la page
Vous devez rediriger la sortie standard et l'erreur standard, puis elle ; exécutera la commande dans le processus en arrière-plan et le numéro du processus de traitement sera affiché sur la page
$cmd = '/usr/local/bin/php /home/app/example/yapp/yii demand/finish 2057';
$pid_file = 'msgrepeat.pid';
$exec_cmd = sprintf("%s > /dev/null 2>&1 & echo $! > %s & cat %s", $cmd, $pid_file, $pid_file);
exec($exec_cmd);
Copier après la connexion
    À propos de /usr/bin/env (haute portabilité ?)
  • Pourquoi est-il préférable d'utiliser « #!/usr/bin/env NAME » au lieu de « #!/path/to/NAME » comme mon shebang ?
  • Comment /usr/bin/env le sait-il quel programme utiliser ?
utilisateur nginx
  • Pour des raisons de sécurité, le shell de l'utilisateur nginx est généralement défini sur /sbin/nologin
  • Quelle est la relation entre tâches planifiées et opérations Web ?
La relation entre les tâches planifiées et les opérations de clic sur la page de gestion en arrière-plan OSS n'a pas été bien gérée

Deux méthodes de traitement de la console du framework yii et du Web ; problème de savoir comment améliorer la testabilité de crontab;

Le problème de savoir comment améliorer l'expérience utilisateur de crontab;
Le problème de savoir comment réutiliser raisonnablement les tâches crontab et le code API (Contrôleur/Action);

Le front et le backend La manière de partager Controller/Action ;

Ou le problème du partage pratique des bibliothèques de code entre plusieurs projets

  1. Enlightenment

  2. php-fpm ; ne fonctionne pas exec, system, shell_exec, seulement CLI;

  3. PHP exec() n'exécute pas toutes les commandes ;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal