„php -f“ führt keinen Code aus, sondern zeigt nur Dateiinhalte an

„php -f“ führt keinen Code aus, sondern zeigt nur Dateiinhalte an

Unter Debian 9 und PHP 7.3 wird versucht, eine Datei mit dem Befehl auszuführen php -f hello.php. Anstatt ein Echo auszugeben, hellowird 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 <?phpPHP ?>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 der short_open_tag php.iniKonfigurationsdatei-Direktive aktiviert werden oder wenn PHP mit der --enable-short-tagsOption konfiguriert wurde).

(Quelle)

Daher besteht die zuverlässigste Lösung darin, in Ihrem Code <?phpanstelle von zu verwenden.<?

Antwort2

Dieser „Kram“ wird nicht benötigt:

#!/usr/bin/php

Machen Sie Ihr Skript einfach wie folgt; beachten Sie, dass Sie phpdem ö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 -fund 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.

verwandte Informationen