Uruchamianie skryptu PHP z wiersza poleceń

85

Jak uruchomić skrypt PHP z wiersza poleceń za pomocą interpretera PHP, który jest używany do analizowania skryptów internetowych?

Mam phpinfo.phpplik, do którego można uzyskać dostęp z programów internetowych, który Germanjest zainstalowany. Jeśli jednak uruchomię phpinfo.phppolecenie z wiersza poleceń za pomocą - php phpinfo.phpi grepdla German, nie znajdę go. Więc oba pliki phps są różne. Muszę uruchomić skrypt, phpna którym Germanjest zainstalowany.

Jak mogę to zrobić?

Siddharth
źródło
1
po prostu zrób to php -ii przeanalizuj
Lawrence Cherone,
1
Co to znaczy? Zrobiłem to mimo wszystko, ale nic
Siddharth
1
Dodaj więcej szczegółów na temat zainstalowanego oprogramowania serwera WWW , na przykład dodaj wynik z phpinfo();do pytania. Zaktualizowałem także moją odpowiedź.
Sampo Sarrala - codidact.org

Odpowiedzi:

166

AKTUALIZACJA:

Po nieporozumieniu w końcu zrozumiałem, co próbujesz zrobić. Powinieneś sprawdzić pliki konfiguracyjne serwera; używasz apache2 lub innego oprogramowania serwera?

Poszukaj wierszy zaczynających się od LoadModule php... Prawdopodobnie istnieją pliki / katalogi konfiguracyjne o nazwach modslub czymś podobnym, zacznij od tego.

Możesz również sprawdzić dane wyjściowe php -r 'phpinfo();' | grep phpi porównać wiersze phpinfo();z serwera WWW.

Aby uruchomić phpinteraktywnie:

(więc możesz wkleić / napisać kod w konsoli)

php -a

Aby przeanalizować plik i przesłać do konsoli:

php -f file.php

Przeanalizuj plik i wyślij do innego pliku:

php -f file.php > results.html

Potrzebujesz czegoś innego?

Aby uruchomić tylko małą część, jedną linię lub podobną, możesz użyć:

php -r '$x = "Hello World"; echo "$x\n";'

Jeśli używasz Linuksa, zrób to man phpw konsoli.

jeśli potrzebujesz / chcesz uruchomić php przez fpm, użyj cli fcgi

SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock"

gdzie /var/run/php-fpm/php-fpm.sock to plik gniazda php-fpm.

Sampo Sarrala - codidact.org
źródło
4
Nie. Problem polega na tym, że w systemie jest wiele phpsów. Muszę dowiedzieć się, które php jest używane do analizowania skryptów internetowych. Jeśli uruchomię php z konsoli, nie mogę znaleźć klasy - ale jeśli wywołam ten skrypt z sieci, problem nie istnieje. Oznacza to, że używane PHP jest inne, prawda?
Siddharth,
2
@Siddharth Powinieneś to sprawdzić w konfiguracji serwera. Dodaj dane swojego serwera do pytania.
Sampo Sarrala - codidact.org
2
Tak. Jak mogę to sprawdzić? Krótko mówiąc, jak mogę użyć prawidłowego php z wiersza poleceń?
Siddharth,
2
W Linuksie możesz użyć, which phpaby powiedzieć, który plik wykonywalny jest używany domyślnie. Aby użyć innego pliku wykonywalnego, musisz określić pełną ścieżkę do pliku wykonywalnego, którego chcesz użyć:/path/to/specific/php -f file.php > results.html
Emilio P.
1
ładny szczegół, +1 za wyjaśnienie. Tylko tutaj, aby skomentować, uważaj na zmienne środowiskowe, być może musisz użyć pełnej ścieżki katalogu, nawet jeśli skrypt znajduje się w tym samym katalogu, w którym znajduje się php.exe
Leandro,
3

Na SuSE istnieją dwa różne pliki konfiguracyjne dla PHP: jeden dla Apache, a drugi dla CLI (interfejs wiersza poleceń). W katalogu / etc / php5 / znajdziesz katalog "apache2" i katalog "cli". Każdy ma plik „php.ini”. Pliki mają ten sam cel (konfiguracja php), ale mają zastosowanie do dwóch różnych sposobów uruchamiania PHP. Pliki te między innymi ładują moduły używane przez PHP.

Jeśli Twój system operacyjny jest podobny, prawdopodobnie te dwa pliki nie są takie same. Twój Apache php.ini prawdopodobnie ładuje moduł gearman, podczas gdy cli php.ini nie. Gdy moduł został zainstalowany (automatycznie lub ręcznie), prawdopodobnie zaktualizował tylko plik php.ini Apache.

Możesz po prostu skopiować plik Apache php.ini do katalogu cli, aby środowisko CLI było dokładnie takie, jak środowisko Apache.

Lub możesz znaleźć wiersz, który ładuje moduł Gearman w pliku Apache i skopiować / wkleić go do pliku CLI.

Shannon White
źródło
3

Szukałem rozwiązania tego problemu w systemie Windows i wydaje się, że jeśli nie masz środowiska vars w porządku, musisz umieścić pełny katalog. Np. z plikiem w tym samym katalogu co PHP:

F:\myfolder\php\php.exe -f F:\myfolder\php\script.php
Leandro
źródło
Jeśli uruchomisz to dosłownie z wiersza polecenia, >na początku prawdopodobnie przekieruje wyjście -f ...(prawdopodobnie błąd) do pliku php.exe i wyczyści zawartość.
mwfearnley