![„php -f“ führt keinen Code aus, sondern zeigt nur Dateiinhalte an](https://rvso.com/image/1592548/%E2%80%9Ephp%20-f%E2%80%9C%20f%C3%BChrt%20keinen%20Code%20aus%2C%20sondern%20zeigt%20nur%20Dateiinhalte%20an.png)
Unter Debian 9 und PHP 7.3 wird versucht, eine Datei mit dem Befehl auszuführen php -f hello.php
. Anstatt ein Echo auszugeben, hello
wird der Quellcode ausgegeben. Der vollständige Code lautet
#!/usr/bin/php
<?
echo 'hello';
?>
Was ich getan habe:
- Bestätigt, dass die Datei über Lese- und Ausführungsberechtigungen verfügt.
- Bestätigte die PHPsiebangZeile ist korrekt.
- Bestätigt, dass PHP-CLI-Tools installiert sind.
Was ist falsch? Wie kann es funktionieren?
Antwort1
Wenn PHP eine Datei analysiert, sucht es nach öffnenden und schließenden Tags, die
<?php
PHP?>
anweisen, den Code zwischen ihnen zu interpretieren und zu beenden. Durch diese Art der Analyse kann PHP in alle möglichen Dokumente eingebettet werden, da alles außerhalb eines Paars öffnender und schließender Tags vom PHP-Parser ignoriert wird.PHP ermöglicht auch kurze öffnende Tags
<?
(wovon abgeraten wird, da sie nur verfügbar sind, wenn sie mit dershort_open_tag
php.ini
Konfigurationsdatei-Direktive aktiviert werden oder wenn PHP mit der--enable-short-tags
Option konfiguriert wurde).
(Quelle)
Daher besteht die zuverlässigste Lösung darin, in Ihrem Code <?php
anstelle von zu verwenden.<?
Antwort2
Dieser „Kram“ wird nicht benötigt:
#!/usr/bin/php
Machen Sie Ihr Skript einfach wie folgt; beachten Sie, dass Sie php
dem öffnenden Kurztag ( <?
) Folgendes hinzufügen sollten:
<?php
echo 'hello';
?>
Führen Sie es dann wie folgt aus:
php -f hello.php
Oder lassen Sie das einfach weg -f
und führen Sie es so aus:
php ./hello.php
Und dann wäre die Ausgabe diese:
hello
Und wenn Sie Folgendes sagen:
- Bestätigt, dass die Datei über Lese- und Ausführungsberechtigungen verfügt.
PHP-Dateien müssen keine Ausführungsberechtigung haben; nur Leseberechtigungen, da die Datei vom PHP-Interpreter gelesen und analysiert wird. Dasselbe gilt für die Befehlszeile sowie den PHP-Interpreter des Apache-Moduls.