2012-01-05 10 views
20

Często, kiedy widzę, że PHP ma być prowadził z linii poleceń, będzie miał tę linię #!/usr/bin/env php na początku pliku jak to ...Czy #!/Usr/bin/env jest wymagane do uruchomienia PHP z linii poleceń?

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

ja chce wiedzieć, czy to ma na celu tylko wtedy, gdy plik jest uruchamiany w systemie Linux/Unix lub jest również potrzebny do działania w systemie Windows?

+10

Przy okazji: dobrze jest pominąć '?>' W kodzie PHP, jeśli pojawi się na końcu pliku. – Tadeck

+0

@Tadeck tak jest. nigdy nie dodawaj '?>', chyba że masz ku temu dobry powód. – hanshenrik

Odpowiedz

22

Linia "hashbang" jest wymagana do automatycznego wykrywania typu skryptu. Umożliwia to rodzaj wykorzystania:

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

Linia ta nie jest potrzebna, jeśli przekazać nazwę pliku jako argument do interpretera PHP, tak jak poniżej:

[pfisher ~]$ php run-me.php 
+3

Oczywiście działa to tylko na * nix. W systemie Windows musisz użyć '> php run-me.php' z linii poleceń. – ThatOtherPerson

+3

Warto również wspomnieć, że dzięki tej linii można zmienić nazwę pliku skryptu, tak aby nie zawierał rozszerzenia. W ten sposób będziesz mógł go uruchomić nawet nie wiedząc, jaki to jest język: './Run-me'. – Tadeck

+1

@ThatOtherPerson, Windows ma swoją własną wersję: http://stackoverflow.com/a/6818266/632951 – Pacerier

1

Nie, to nie można korzystać bezpośrednio

Uruchamianie php (lub cokolwiek innego) przez narzędzie env jest słabym środkiem bezpieczeństwa. Wychodząc z platformy, "naprawi" zmienną PATH, LIB i inne zmienne środowiskowe zgodnie z różnymi plikami konfiguracyjnymi i potencjalnie usunie niektóre niebezpieczne wartości (np. Env na HPUX).

Ma również ograniczyć zakres ekspansji powłoki w niektórych środowiskach. (Zobacz man 1 env na Linux).

+4

'#!/Usr/bin/env php' jest również używany, ponieważ' #!/Path/to/php' to różni się w różnych systemach, prawda? – Tadeck

+0

Nie, '/ usr/bin/env' nie robi nic w tym rodzaju - wszystko, co robi w shebangu, to poszukiwanie php (lub czegoś podobnego) na' $ PATH', aby poradzić sobie z systemami, w których interpreter jest gdzieś dziwne jak '/ usr/local/bin'. – duskwuff

+0

właściwie to robi dokładnie to, co powiedziałem w mojej odpowiedzi. idź przeczytać strony man na tych systemach. –

Powiązane problemy