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
Patrick Fischer
Die Shebang-Zeile wird für die automatische Erkennung des Skripttyps benötigt. Es ermöglicht diese Art der Verwendung:
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
die Magie gehört zum ausführbaren Flag (chmod +x FILE)
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
11429600cookie-checkIst #!/usr/bin/env erforderlich, um PHP über die Befehlszeile auszuführen?yes
Ü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