Ist #!/usr/bin/env erforderlich, um PHP über die Befehlszeile auszuführen?

Lesezeit: 3 Minuten

Wenn ich PHP sehe, das von der Befehlszeile aus ausgeführt werden soll, wird es oft diese Zeile haben #!/usr/bin/env php am Anfang der Datei so …

#!/usr/bin/env php
<?php
    // code
?>

Ich wollte wissen, ob dies nur für die Ausführung der Datei auf einem Linux/Unix-System gedacht ist oder auch für die Ausführung unter Windows erforderlich ist.

  • Übrigens: Es ist eine gute Übung zu überspringen ?> in Ihrem PHP-Code, wenn es am Ende der Datei erscheint.

    – Tadeck

    5. Januar 2012 um 5:26 Uhr

  • @Tadeck ja ist es. niemals hinzufügen ?> es sei denn, Sie haben einen guten Grund dazu.

    – Hansenrik

    7. November 2017 um 14:18 Uhr

Benutzer-Avatar
Patrick Fischer

Die Shebang-Zeile wird für die automatische Erkennung des Skripttyps benötigt. Es ermöglicht diese Art der Verwendung:

[pfisher ~]$ chmod +x run-me.php
[pfisher ~]$ run-me.php

Diese Zeile wird nicht benötigt, wenn Sie den Dateinamen wie folgt als Argument an den PHP-Interpreter übergeben:

[pfisher ~]$ php run-me.php

Bearbeiten: ersetzen “Hashbang” mit Kram.

  • Das funktioniert natürlich nur auf *nix. Unter Windows müssen Sie verwenden > php run-me.php von der Kommandozeile.

    – Diese andere Person

    5. Januar 2012 um 5:09 Uhr

  • Erwähnenswert ist auch, dass Sie dank dieser Zeile die Skriptdatei so umbenennen können, dass sie keine Erweiterung enthält. Auf diese Weise können Sie es ausführen, ohne zu wissen, um welche Sprache es sich handelt: ./run-me.

    – Tadeck

    5. Januar 2012 um 5:24 Uhr

  • @ThatOtherPerson, Windows hat eine eigene Version: stackoverflow.com/a/6818266/632951

    – Schrittmacher

    11. August 2015 um 12:12 Uhr

  • Krabbe | Hashbang ? Hashbang habe ich noch nie gehört. aber ich bin kein uk | wir gebürtig

    – fb

    28. Mai 2021 um 23:03 Uhr

  • @fb: Stimmt. Hashbang ist eine Regression.

    Benutzer2849202

    28. Mai 2021 um 23:32 Uhr

Nein, ist es nicht, Sie können es direkt verwenden

#!/path/to/php

Das Ausführen von php (oder irgendetwas anderem) über das Dienstprogramm env ist eine schwache Sicherheitsmaßnahme. Abhängig von der Plattform werden PATH, LIB und andere Umgebungsvariablen gemäß verschiedener Konfigurationsdateien “repariert” und möglicherweise einige der darin enthaltenen gefährlichen Werte entfernt (z. B. env auf HPUX).

Es dient auch dazu, den Umfang von Shell-Erweiterungen auf bestimmte Umgebungen einzuschränken. (Siehe man 1 env unter Linux).

  • #!/usr/bin/env php wird auch da verwendet #!/path/to/php ist auf verschiedenen Systemen unterschiedlich, nicht wahr?

    – Tadeck

    5. Januar 2012 um 5:25 Uhr

  • Nein, /usr/bin/env tut nichts dergleichen – alles, was es in einem Shebang tut, ist die Suche nach php (oder was auch immer) auf Ihrem $PATHum mit Systemen fertig zu werden, bei denen der Interpreter irgendwo seltsam ist /usr/local/bin.

    Benutzer149341

    5. Januar 2012 um 7:07 Uhr

  • eigentlich tut es genau das, was ich in meiner Antwort gesagt habe. Lesen Sie die Manpages auf diesen Systemen.

    – Ahmed Masud

    5. Januar 2012 um 7:41 Uhr

  • Ich habe einen Alias ​​für php7.4, aber usr/bin/env php -v ergibt 5.4.16. Wie verändere ich mich das php-Version auf 7.4?

    – zweimal derselbe Fluss

    4. Oktober 2020 um 12:41 Uhr

  • @samerivertwice welches Betriebssystem? Auf Debian-Systemen (Debian, Unbuntu, Kubuntu …): update-alternatives --config php aber das gehört nur cli!

    – fb

    28. Mai 2021 um 23:05 Uhr


  1. die Magie gehört zum ausführbaren Flag (chmod +x FILE)
  2. the shebang: und wenn es mit dieser Version existiert, können Sie erwarten
    • /usr/bin/env cliVersion -> /usr/bin/env php
    • php -v # sagt Ihnen, welche Version Sie standardmäßig haben als: ‘cli’ in einer Shell

alternativ zB verwenden:

php8.0 /to/php/script.php

um es ohne a auszuführen shebang in der ersten Zeile des Skripts. (Es funktioniert auch, wenn es dort bleibt, aber überprüfen Sie die echte PHP-Version bei der Ausführung, wenn dies für Sie wichtig ist.)

“Standard”? in den letzten 10 Jahren ist /usr/bin/env je nachdem, welche Version Sie als Standard auf Ihrem System festgelegt haben:

Debian-Systeme (debian,unbuntu,kubuntu…): #root: update-alternatives --config php wird dich leiten

1142960cookie-checkIst #!/usr/bin/env erforderlich, um PHP über die Befehlszeile auszuführen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy