Jak wykonać kod PHP z wiersza poleceń?

163

Chciałbym wykonać pojedynczą instrukcję php, jak if(function_exists("my_func")) echo 'function exists';bezpośrednio z wiersza poleceń, bez konieczności używania oddzielnego pliku php.

Jak to jest możliwe ?

Steve
źródło
1
wykonanie funkcji function_exists () bez używania innych plików zawierających funkcje zdefiniowane przez użytkownika nie będzie zbyt dobre, z wyjątkiem testowania wersji PHP, o czym możesz się dowiedzieć innymi sposobami. Jaką funkcję chcesz przetestować?
Matt Gibson
Szukam przetestowania tej funkcji: sg_load ()
Steve
2
Wygląda na to, że naprawdę chcesz się dowiedzieć, czy jest włączone rozszerzenie sourceguardian php?
Matt Gibson
2
wtedy phpinfo () powinno ci powiedzieć.
jpic

Odpowiedzi:

256

Jeśli zamierzasz robić PHP w wierszu poleceń, polecam zainstalowanie phpsh, przyzwoitej powłoki PHP . To dużo fajniejsze.

W każdym razie polecenie php oferuje dwa przełączniki do wykonywania kodu z wiersza poleceń :

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

Możesz użyć przełącznika -r php jako takiego:

php -r 'echo function_exists("foo") ? "yes" : "no";'

Powyższe polecenie PHP powinno wyświetlać no i zwracać, 0 jak widać:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

Kolejnym zabawnym przełącznikiem jest php -a :

-a               Run as interactive shell

To trochę kiepskie w porównaniu do phpsh , ale jeśli nie chcesz instalować niesamowitej interaktywnej powłoki dla php stworzonej przez Facebooka, aby uzyskać wypełnienie kart, historię itd. , Użyj -a jako takiego :

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

Jeśli to nie działa na twoim pudełku, tak jak na moim pudełku * es * ( testowane na Ubuntu i Arch), prawdopodobnie twoja konfiguracja PHP jest rozmyta lub zepsuta . Jeśli uruchomisz to polecenie:

php -i | grep 'API'

ty powinno zobaczyć:

Server API => Command Line Interface

Jeśli nie , oznacza to, że być może inna komenda zapewni CLI SAPI . Wypróbuj php-cli, może to pakiet lub polecenie dostępne w twoim systemie operacyjnym.

Jeśli zrobisz że twoje polecenie php używa CLI (interfejs wiersza poleceń) SAPI (API serwera), uruchom, php -h | grep codeaby dowiedzieć się, który szalony przełącznik - ponieważ nie zmienił się od roku - pozwala na uruchomienie kodu w twojej wersji / konfiguracji.

Kolejne kilka przykładów, aby upewnić się, że działa na moich pudełkach:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

Należy również zauważyć, że możliwe jest, że rozszerzenie jest ładowane w CLI, a nie w CGI lub Apache SAPI. Jest prawdopodobne, że kilka PHP SAPI używa różnych plików php.ini , np. /etc/php/cli/php.iniVs /etc/php/cgi/php.inivs /etc/php/apache/php.inina Gentoo box. Dowiedz się, który plik ini jest używany z php -i | grep ini.

jpic
źródło
Może twoja konfiguracja php jest zepsuta. Zaktualizowałem moją odpowiedź, uwzględniając wskazówki, jak to rozgryźć.
jpic
Dodano notatkę o php -a, która może być przydatna.
jpic
6
Zauważ, że phpsh nie jest już utrzymywany przez jego autora (Facebooka), a ktoś na stronie Grup dyskusyjnych Google powiedział w 2012 roku, że „phpsh nie jest już tak naprawdę obsługiwany ani przydatny” . Możesz zajrzeć do Boris REPL, aby znaleźć ulepszoną konsolę php.
Ben Creasy,
3

W wierszu poleceń:

php -i | grep sourceguardian

Jeśli tam jest, otrzymasz tekst. Jeśli nie, nic nie dostaniesz.

Matt Gibson
źródło
4
Albo jestem ślepy, albo ta odpowiedź nie ma nic wspólnego z pytaniem. Jak ta odpowiedź ma odpowiadać na pytanie „ Jak uruchomić kod PHP bezpośrednio z linii poleceń, bez zapisywania kodu PHP do .phppliku? ”?
trejder
15
@trejder Przez chwilę zastanawiałem się, czy odpowiedziałem na złe pytanie, ale potem spojrzałem na historię edycji i komentarze. Odpowiada to temu, czego OP wydawał się naprawdę potrzebować: dowiedzieć się, czy zostało załadowane określone rozszerzenie PHP. Od tego czasu pytanie zostało przeformułowane, więc teraz nie pasuje.
Matt Gibson,
3

Możesz użyć :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

Pomocny może być też krótki tag „ <? = ”:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

Tag zamykający „?>” Jest opcjonalny, ale nie zapomnij o ostatnim „;” !

fred727
źródło
2
Wydaje się, że jest to większy problem niż zaakceptowana odpowiedź 7-latka. Używając php -rnie musisz martwić się o otwieranie tagów PHP.
miken32
1

Używanie PHP z wiersza poleceń

użyj " zamiast " w oknach, gdy używasz wersji CLI z -r

php -r "echo 1"

- dobrze

php -r 'echo 1'

- niepoprawne

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
user1942505
źródło