Jaka jest różnica między wykonywaniem php z wiersza poleceń i HTTP? Czy używają tego samego pliku wykonywalnego, takiego jak (php.exe lub php-cgi.exe (Apache lub IIS))? Czy wyniki różnią się, gdy są wykonywane z wiersza poleceń lub HTTP?Różnica między wykonywaniem php z linii poleceń i strony Http
Odpowiedz
Niezależnie od tego, czy PHP jest wywoływane przez moduł serwera WWW, czy CLI, używana jest ta sama baza binarna (ale czasami można skonfigurować tak, aby używała różnych ini, które mogą wpływać na skrypt). Jego otoczenie będzie się różnić, więc zmienne środowiskowe nie będą dokładne.
PHP ma również świadomość, że zostało inaczej wywołane i dostosuje jego wyjście do tego (tj., phpinfo();
dane wyjściowe będą inaczej sformatowane, gdy zostaną wywołane przez CLI).
Lub używają innego pliku binarnego. Większość wdrożonych przeze mnie wdrożeń miała zupełnie inną wersję dla modułu cli & apache, czasami nawet nie w tej samej wersji ... – Wrikken
@Wrikken. To musiało być zrobione celowo przez administratora z jakiegoś powodu. Tak czy siak, odniosłem się do tego teraz jako 'baza binarna' – webbiedave
Podczas wykonywania php z wiersza poleceń, serwer Apache lub IIS nie ma żadnej roli do odegrania. Po prostu użyj folderu php4 lub php5, aby wykonać swój kod. Mogą występować różnice w wykonaniu, zależnie od różnicy w dostępnych bibliotekach i ustawień php.ini w dwóch folderach. Podczas uruchamiania z apache używane jest php.ini w twoim apache/bin. Kiedy z linii poleceń jest używany php.ini z twojego folderu php5 lub php4.
W przeważającej części wszystko jest takie samo. Duże różnice polegają na tym, że superglofale mogą nie zostać wypełnione. Najlepszym miejscem na ich obejrzenie jest php.net http://php.net/manual/en/features.commandline.php
Główna różnica polega na przekazywaniu argumentów: uruchamianie z CLI, nie masz $ _GET, $ _POST, $ _SESSION, itp .; więc argumenty muszą być przekazane jako parametry wiersza poleceń i dostępne za pomocą, jeśli $ _SERVER ['argc'] i $ _SERVER ['argv'] Uważaj na katalog, w którym działa twój kod i ścieżkę dołączania; i upewnij się, że wiesz, co załadowałeś php.ini. Podczas wyprowadzania znaczniki HTML nie są renderowane jako znaczniki, ale wyświetlają się jako < h1> etc .... uważaj szczególnie na
(PHP_EOL jest niezwykle przydatny), a wiele spacji lub kart faktycznie pojawia się jako wiele spacji lub tabulacji pojedyncza przestrzeń. Zapomnij nagłówków() i innych funkcji specyficznych dla http
Poza tym, co już zostało powiedziane, najprawdopodobniej będą różnice w uprawnieniach do tego, jakie części systemu plików są dostępne: PHP za pośrednictwem serwera WWW jest uruchamiane jako użytkownik serwera WWW, PHP z linia poleceń działa jak Ty.
Nie znaczniki HTML błędy
Jest to ustawienie php.ini (html_errors), ale domyślnie wyłączone w wersji CLI.
Logowanie do stderr
Zazwyczaj błędy są rejestrowane w error.log serwerach, ale w wersji CLI błędy są zapisywane na stderr.
ta jest również dostępna jako ustawienie php.ini (error_log)
php.ini
Plik php.ini, który jest używany w wersji cli może być inny plik. Co może prowadzić do kilku nieprzyjemnych błędów (curl nagle niedostępne, itp.).
Różne wykonywalne
Jest możliwość zainstalowania wielu wersji PHP (php5 obok PHP4)
Zastosowanie which php
ustalić, która wersja używasz.
Wszystko jest pokazane jako tekst
var_dump() jest czytelny bez <pre>
żadnej różnicy pomiędzy header('Hello');
i echo('Hello');
Choć kwestia ta jest bardzo stara, chciałbym przedłużyć @ Bob Fanger użytkownika trochę.
Running pliki PHP z linii poleceń jest dość trywialne, trzeba tylko pamiętać, że istnieją pewne różnice pomiędzy uruchamiając plik na serwerze WWW lub w interfejsie serwery linii komend:
Brak dostępnych
Nie
$_GET
,$_POST
,$_SESSION
dostępny Cookies Ale można użyć uzyskać parametry przekazane jako argument do komendy. Pierwsza wartość jest zawsze nazwą pliku.Na przykład wzięty ten plik
<?php var_dump($argv); ?>
zwany tak:
[email protected]:$ /usr/bin/php /home/user/file.php foo bar
nie daje to wyjście:
array(4) { [0]=> string(8) "file.php" [1]=> string(3) "foo" [2]=> string(3) "bar" }
pełne ścieżki do plików z serwerów korzenia wymagane Musisz podać pełne ścieżki do plików (np. r
include()
,require()
,file_get_contents()
, ...), nawet jeśli mogą znajdować się w tym samym folderze.różne ustawienia użytkownika/uprawnień pliki nie są wykonywane przez użytkownika
www-data
użytkownika, ale przez użytkownika jesteś zalogowany na komputerze. Wpływa to na wszystkie wywołania funkcji pliku, które wpływają na system plików maszyn (np.mkdir()
,include()
, ...), więc musisz się upewnić, że dany użytkownik ma odpowiednie uprawnienia.
Dodając do tego przydatnego kompendium odpowiedzi, zmienne' $ _SERVER' są również niedostępne dla skryptu w CLI, na przykład '$ _SERVER ['DOCUMENT_ROOT']' for dostęp obejmuje skrypt. – Martin
- 1. Różnica między http i www
- 2. jak wysłać żądanie http z linii poleceń
- 3. PHP Różnica między tablicami() i []
- 4. Jaka jest różnica między używaniem obiektu instantiateViewControllerWithIdentifier a wykonywaniem identyfikatora?
- 5. Jaka jest różnica między $ http i $ q?
- 6. Różnica między importem http = require ("http"); i importować * jako http z "http";
- 7. Różnica między XML przez HTTP i SOAP przez HTTP
- 8. Różnica między sieci/http i net/http/fcgi w Golang
- 9. Różnica między odświeżaniem strony a oddzieraniem strony
- 10. Otwarcie Chrome z linii poleceń
- 11. PHP MYSQL - Różnica między 127.0.0.1 i localhost
- 12. Różnica między :: i -> w PHP?
- 13. Wykonywanie poleceń git przez php przez http
- 14. Różnica między systemem() i powłoką()
- 15. Jaka jest różnica między 'i "w PHP
- 16. php cUrl do linii poleceń curl wywołanie
- 17. php uzyskać ustawienia ini w linii poleceń
- 18. Wersja PHP na linii poleceń Windows
- 19. Jaka jest różnica między wykonywaniem ExecutorService i thread.run w uruchomionych wątkach jednocześnie w Javie?
- 20. Instalacja vimball z linii poleceń
- 21. Crashlytics NDK symbol budynku z linii poleceń
- 22. Pobierz zmienione pliki z linii poleceń svn między dwiema datami
- 23. Różnica między | = i^= css
- 24. Przekaż zmienną do skryptu php działającego z linii poleceń
- 25. PHP czekać na dane wejściowe z linii poleceń
- 26. Używanie sendmaila z linii poleceń
- 27. Debugowanie Glassfish z linii poleceń
- 28. Instrukcja sqlplus z linii poleceń
- 29. argumenty linii poleceń z leiningen
- 30. Jaka jest różnica między MIME, typem mediów internetowych i HTTP?
To brzmi jak zadanie domowe lub pytanie testowe do mnie. Nie żeby to było złe, czy coś. – Nathan
Naprawdę powinieneś przeczytać instrukcję (http://www.php.net/manual/en/features.commandline.php). Pokaże Ci różnice i funkcje dodatkowe, takie jak interaktywna powłoka, wykonywanie skryptów itp. –