web-dev-qa-db-fra.com

Comment ajouter Shebang #! avec un script php sur linux?

J'ai un petit problème avec l'ajout de Shebang #! avec mon script php sur RedHat linux. J'ai un petit morceau de code de test avec Shebang ajouté (j'ai également essayé différentes variantes), mais je reçois le message d'erreur suivant chaque fois que j'essaie d'exécuter le script.

Message d'erreur:

-bash: script.php: command not found

Script de test:

#!/bin/env php    
<?php echo "test"; ?>

Shebang #! variations:

#!/usr/bin/php
#!/usr/bin/env php
24
user2799603

Il devrait (pour la plupart des systèmes) être #!/usr/bin/env php, mais votre erreur n'est pas liée à cela.

-bash: script.php: command not found

Il indique que script.php est introuvable.

Si le problème était la ligne Shebang, l'erreur dirait quelque chose comme:

bash: script.php: /usr/env: bad interpreter: No such file or directory

Vraisemblablement, vous tapez script.php et le fichier ne se trouve pas dans un répertoire sur votre $PATH ou n'est pas exécutable.

  1. Rendez-le exécutable: chmod +x script.php.
  2. Tapez le chemin d'accès au lieu de simplement le nom de fichier, s'il se trouve dans le répertoire courant, alors: ./script.php.

Au lieu de 2, vous pouvez déplacer/copier/créer un lien symbolique vers le fichier répertorié dans $PATH ou modifiez le $PATH pour inclure le répertoire contenant le script.

38
Quentin

Si votre script ne se trouve pas dans votre /usr/local/bin et est exécutable, vous devez préfixer votre script avec php comme ceci:

php myscrip.php

Pour les shebangs, voici ce que j'utilise:

Comme ça:

#!/usr/bin/php

ou ca:

#!/usr/bin/env php
14
Banago

En réponse au commentaire de @ NVRM concernant l'utilisation unique de -d, ce n'est pas vrai.

Commencez par un chmod +x script as

#!/usr/bin/php
<?php
phpinfo();

et courir script | grep -E 'memory_limit|error_reporting', et vous verrez

error_reporting => no value => no value
memory_limit => 128M => 128M

Ajoutez maintenant quelques -d entrées pour avoir

#!/usr/bin/php -d memory_limit=2G -d error_reporting=-1
<?php
phpinfo();

et relancez script | grep -E 'memory_limit|error_reporting', et vous verrez maintenant

error_reporting => -1 => -1
memory_limit => 2G => 2G

Démontrant ainsi que vous pouvez définir plusieurs options.

En fait, c'est toute la ligne de commande avec laquelle vous travaillez ici. Vous pouvez donc charger des extensions, utiliser une configuration différente, etc., tout ce que vous pouvez faire sur la ligne de commande.

1
Richard A Quadling

Laissant ici quelques petites notes:


Pour utiliser un binaire php situé dans le même dossier.

Par exemple, un exécutable php7.2 copié à partir de /usr/bin est dans le même chemin le long d'un script hello.

#!./php7.2
<?php

echo "Hello!"; 

Pour l'exécuter:

./hello

Qui se comportent tout autant que:

./php7.2 hello

Cela donne la portabilité, mais méfiez-vous des architectures système, le binaire php peut ne pas correspondre à la plate-forme cible.


Définition de la mémoire autorisée à partir du hashbang:

Nous pouvons définir n INI entrée à partir de la ligne de hachage:

#!/usr/bin/php -d memory_limit=2048M
<?php
phpinfo();
exit;

Ensuite pour voir si php avait compris, en utilisant phpinfo ():

./myphpProg | grep memory

La sortie Shell correcte doit contenir:

memory_limit => 2048M => 2048M

Faire ce qui précède est similaire à cette ligne de commande:

php -d memory_limit=2048M myphpProg.**php**

C'est pourquoi nous ne pouvons définir qu'une seule valeur ini dans les hashbangs, car php n'accepte qu'un seul paramètre - d à la fois.

0
NVRM