Jak znaleźć plik php.ini używany przez wiersz poleceń?


389

Muszę włączyć pdo_mysql w moim środowisku EasyPhp, więc poszedłem do pliku php.ini i odkomentowałem następujący wiersz:

extension=php_pdo_mysql.dll

Niestety nadal mam ten sam problem. Korzystam z CLI, więc przypuszczam, że muszę zlokalizować plik php.ini używany przez CLI. Jak mogę to znaleźć?



@sjas To nie jest źle, jest poprawne i informuje o ścieżce załadowanego pliku php.ini w pliku cli.
SaidbakR

Odpowiedzi:


951

Po prostu uruchom php --inii poszukaj Loaded Configuration Filew danych wyjściowych lokalizacji php.iniużywanej przez Twój CLI


5
@Mchl Głosuję za tobą, ale myślę, że powinieneś zamieścić odpowiedź z grep w linii.
Jim W.

9
@BradFJacobs, po co używać grep, skoro jest on teraz wieloplatformowy?
Garet Claborn

Ale czy to nie pokazuje tylko tego, który jest ładowany podczas korzystania z PHP przez CLI (ponieważ uruchamiasz z tego polecenia).
Antony D'Andrea

1
@ AntonyD'Andrea: dokładnie o to chodzi w pytaniu. Widzieć? Mówi tak nawet w tytule: Jak znaleźć plik php.ini używany przez wiersz poleceń ?
Mchl,

to nie jest moja odpowiedź ... w moim przypadku piszę sudo find / -iname php.inii /etc/php/7.0/apache2/php.iniznajduje właściwe miejsce właściwego pliku konfiguracyjnego php.ini mojego komputera, którego nie znaleziono php --inilub php -i | grep php.ini(oba znaleziono /etc/php/7.0/cli/php.ini)
NineCattoRules

366

Możesz uzyskać pełny, phpinfo()używając:

php -i 

I tam jest php.iniużywany plik:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

W systemie Windows użyj findzamiast tego:

php -i|find/i"configuration file"

12
Następnie ta instancja php nie używała w ogóle php.ini, ale wartości domyślne. Configuration FileLinia phpinfo () pokazuje ostatnie miejsce gdzie php szukał pliku ini. Może to być albo miejsce, w którym znalazł taki plik, albo ostatnia opcja, którą jest% SYSTEMROOT% w systemie Windows.
VolkerK

2
@pascal: php -i | find "Configuration file"powinien działać w systemie Windows. Zdecydowanie nie tak potężny jak grep, ale findwykona podstawowe wyszukiwanie ciągów. Oczywiście, jeśli php -i zrzuci swoje wyjście do stderr, prawdopodobnie jesteś SOL.
Marc B

2
findrozróżnia małe i wielkie litery, więc musi być doskonały ( php -i | find "Configuration File") lub rozróżniać małe i wielkie litery ( php -i | find /i "Configuration file"- zwróć uwagę na /iflagę).
deizel

9
Rozważ dodanie php --inijako alternatywy; dostępne od PHP 5.2.3 :)
Ja͢ck

2
Nikt nie wspominał, że można pobrać tę wartość ze skryptu, wywołując plik php_ini_loaded_file, aw razie potrzeby php_ini_scanned_files
Radek Benkel

16

Możesz użyć get_cfg_var ('cfg_file_path') do tego:

Aby sprawdzić, czy system używa pliku konfiguracyjnego, spróbuj pobrać wartość ustawienia konfiguracyjnego ścieżka_pliku_fg. Jeśli jest dostępny, używany jest plik konfiguracyjny.
W przeciwieństwie do phpinfo () pokaże, czy w ogóle nie znalazł / nie użył php.ini.

var_dump( get_cfg_var('cfg_file_path') );

Możesz po prostu ustawić lokalizację pliku php.ini . Używasz wersji wiersza polecenia, więc używając -cparametru możesz określić lokalizację, np

php -c /home/me/php.ini -f /home/me/test.php

13

Uruchom php --iniw swoim terminalu, otrzymasz wszystkie szczegóły dotyczące plików INI

[root@tamilan src]# php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/apc.ini,
/etc/php.d/bcmath.ini,
/etc/php.d/curl.ini,
/etc/php.d/dba.ini,
/etc/php.d/dom.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/imap.ini,
/etc/php.d/json.ini,
/etc/php.d/mbstring.ini,
/etc/php.d/memcache.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/phar.ini,
/etc/php.d/posix.ini,
/etc/php.d/sqlite3.ini,
/etc/php.d/ssh2.ini,
/etc/php.d/sysvmsg.ini,
/etc/php.d/sysvsem.ini,
/etc/php.d/sysvshm.ini,
/etc/php.d/wddx.ini,
/etc/php.d/xmlreader.ini,
/etc/php.d/xmlwriter.ini,
/etc/php.d/xsl.ini,
/etc/php.d/zip.ini

Aby uzyskać więcej, użyj polecenia pomocy php --helpWyświetli wszystkie możliwe opcje.


8

Czasami rzeczy nie zawsze są takie, jakie się wydają, jeśli chodzi o pliki konfiguracyjne w ogóle. Więc tutaj stosuję moje zwykłe metody badania, które pliki są otwierane przez proces.

Używam bardzo wydajnego i przydatnego programu wiersza polecenia o nazwie strace, aby pokazać mi, co naprawdę dzieje się za moimi plecami!

$ strace -o strace.log php --version
$ grep php.ini strace.log

Strace wykopuje wywołania jądra (systemowe), które wykonuje twój program i zrzuca dane wyjściowe do pliku określonego przez -o

Łatwo jest używać grep do wyszukiwania wystąpień php.ini w tym dzienniku. To dość oczywiste, patrząc na typową odpowiedź, aby zobaczyć, co się dzieje.

open("/usr/bin/php.ini", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/etc/php.ini", O_RDONLY)          = 3
lstat("/etc/php.ini", {st_mode=S_IFREG|0644, st_size=69105, ...}) = 0

1
php -idało mi nieprawidłowe wyniki, ale ten jest w porządku. Dziękuję Ci!
Dmitry Ginzburg,

7

Jeśli chcesz załadować wszystkie pliki konfiguracyjne, powie ci to:

php -i | grep "\.ini"

Niektóre systemy ładują rzeczy z więcej niż jednego pliku ini. W moim systemie Ubuntu wygląda to tak:

$  php -i | grep "\.ini"
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
additional .ini files parsed => /etc/php5/cli/conf.d/apc.ini,
/etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/gd.ini,
/etc/php5/cli/conf.d/mcrypt.ini,
/etc/php5/cli/conf.d/memcache.ini,
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/mysqli.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini

6

W systemie OSX Mavericks uruchomione:

$ php -i | grep 'Configuration File'

Zwrócony:

Configuration File (php.ini) Path => /etc
Loaded Configuration File:         (none)

W /etc/katalogu było:

php.ini.default

(a także php-fpm.conf.default)

Udało mi się skopiować php.ini.defaultdo php.inidodaj date.timezone = "US/Central"do góry (po prawej poniżej [php]), a problem został rozwiązany.

(Przynajmniej komunikat o błędzie zniknął.)


5

Jeśli chcesz przekazać to do innej aplikacji, możesz zrobić coś takiego:

php --ini | grep Loaded | cut -d" " -f12

zwraca tylko ścieżkę. php -c $(php --ini | grep Loaded | cut -d" " -f12)przejdzie w pliku konfiguracyjnym (przydatne dla fpm)


3

Z tego, co pamiętam, kiedy korzystałem z EasyPHP, plik php.ini znajduje się w C:\Windows\lubC:\Windows\System32


2
Racja mówi mi C: \ WINDOWS. Ale nie znalazłem tego na poważnie!
Amokrane Chentir

2

Zrobić

find / -type f -name "php.ini" 

Spowoduje to wyświetlenie wszystkich nazwanych plików php.ini.

Dowiedz się, którego zazwyczaj używasz apache2/php.ini


To nie działa, jeśli nie ma pliku php.ini (niektóre kontenery dokerów). Dlatego lepiej przyjęta jest odpowiedź zaakceptowana.
Manuel Manhart

myyyyyyyyyy mężczyzna
doc wakacje

@emilioestevez * woman
willsmanley

1

W swoim pliku php.ini ustaw katalog rozszerzenia, np .:

extension_dir = "C:/php/ext/"

Zobaczysz w tobie folder PHP, jest folder ext ze wszystkimi bibliotekami DLL i rozszerzeniami.


0

Zapisz dane wyjściowe phpinfo CLI w pliku lokalnym:

php -i >> phpinfo-cli.txt

0

W kontenerze dokowanym phpmyadmin / phpmyadmin nie ma pliku php.ini. Ale są dwa pliki: php.ini-debug i php.ini-production

Aby rozwiązać problem, po prostu zmień nazwę jednego z plików na php.ini i zrestartuj kontener dokera.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.