Gdzie mogę znaleźć php.ini?


881

Kilka lat temu zainstalowałem Apache 2.2x i PHP 5.3.1 na serwerze Linux, który utrzymuję. Użyłem .tar.gz i zbudowałem je zgodnie z instrukcją (zamiast rpms i what-have-you). I wszystko było w porządku.

Dzisiaj muszę zainstalować to, co wygląda jak biblioteka PHP. Przeszedłem wszystkie kroki, aby zainstalować, i znajduję ibm_db2.so w$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so

Świetnym chwytem jest ostatni krok to konfiguracja php.ini, ale w moim systemie NIE ma php.ini. Horror okropności. PHP działa dobrze, z wyjątkiem oczywiście tego nowomodnego ibm_db2, którego chcę użyć, aby ktoś mógł użyć GUI do majsterkowania DB2. (Próbowałem małego skryptu php, który zawodzi i wskazuje, że funkcje ibm_db2 nie są dostępne).

Mam do czynienia z PHP raz na kilka lat, więc proszę wyjaśnij mi na bardzo podstawowym poziomie, co mogę zrobić, aby umożliwić dostęp do GUI przez Internet DB2.


120
90% czasu to /etc/php5/apache2/php.ini
Adam


6
Głosowanie w dół, ponieważ przesłanka pytania jest błędna. „W moim systemie NIE ma php.ini” Nie, po prostu nie udało się go zlokalizować. Mówiąc o tym, locate php.inidowiesz się w kilku chwilach, gdzie plik znajduje się w twoim systemie.
Wyścigi lekkości na orbicie

1
@Adam: chyba że nie jest to PHP5;)
Linia

2
@line tak, mój komentarz nie jest już zbyt trafny, chociaż nie zdawałem sobie sprawy z liczby głosów pozytywnych!
Adam

Odpowiedzi:


466

Najlepszym sposobem na znalezienie tego jest: utwórz plik php i dodaj następujący kod:

<?php phpinfo(); ?>

i otwórz go w przeglądarce, pokaże plik, który jest aktualnie czytany!

Aktualizacje OP:

  1. Poprzednio zaakceptowana odpowiedź może być dla Ciebie szybsza i wygodniejsza, ale nie zawsze jest poprawna. Zobacz komentarze do tej odpowiedzi.
  2. Zwróć także uwagę na wygodniejszą alternatywę <?php echo php_ini_loaded_file(); ?>wymienioną w tej odpowiedzi .

11
To powinna być zaakceptowana odpowiedź. Jeśli masz zainstalowany interfejs CLI i uruchomiony jest apache, może on mieć własny plik ini (tak jak mój system). Użycie zaakceptowanej odpowiedzi zwraca raczej to, czego używa CLI niż apache.
Dan

2
@ Dan Tak, masz rację. Zmieniam przyjętą odpowiedź na tę, ponieważ problem, o którym wspomniałeś, spotkał się również z kimś w praktyce (który skomentował wcześniej zaakceptowaną odpowiedź). (Nawiasem mówiąc, jeśli skomentowałbyś to pytanie, rozwiązałbym ten problem wcześniej.)
nekromanta,

2
To nie działa w mojej instalacji. Literówka? Powinien być<?php phpinfo(); ?>
svenyonson

9
php -r \@phpinfo\(\)\;pracuje dla mnie, php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1aby pobrać określone informacje
jgraup

@zylstra Try:<?php echo php_ini_loaded_file(); ?>
Ates Goral

834

W wierszu polecenia wykonaj:

php --ini

Otrzymasz coś takiego:

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_sqlite.ini,
/etc/php5/cli/conf.d/sqlite.ini,
/etc/php5/cli/conf.d/sqlite3.ini,
/etc/php5/cli/conf.d/xdebug.ini,
/etc/php5/cli/conf.d/xsl.ini

To z mojej lokalnej maszyny deweloperskiej. Jednak druga linia jest interesująca. Jeśli nic nie wspomniano, spójrz na pierwszy. To jest ścieżka, na której PHP szuka php.ini.

Możesz grepować te same informacje za phpinfo()pomocą skryptu i wywoływać je za pomocą przeglądarki. Jest wspomniany w pierwszym bloku wyniku. php -irobi to samo z wierszem poleceń, ale jest dość niewygodne.


5
przyjmowanie najstarszej i poprzednio najprostszej odpowiedzi (SO zmusza mnie do poczekania chwilę przed zaakceptowaniem). dzięki za rozszerzenie, które prawdopodobnie pomoże następnej osobie szukającej informacji. dla mnie druga linia powiedziała (brak) i wszystko działało dobrze po umieszczeniu pliku php.ini w ścieżce w pierwszym wierszu. dzięki!
nekromanta

12
Użyłem tego polecenia i zredagowałem plik php.ini, który mnie również skierował, a moje ustawienia PHP się nie zmieniły i zdałem sobie sprawę, że nie daje mi poprawnego pliku php.ini. Próbowałem użyć funkcji phpinfo () PHP, która podała mi prawidłową lokalizację pliku php.ini, którego potrzebowałem do edycji. Myślę, że to bardzo ważne i mam nadzieję, że to komuś pomoże.
thereadont

3
/etc/php5/apache2/php.ini
Adam

@ thecommonthread Dziękujemy za wskazanie problemu napotkanego w praktyce. Zmieniłem zaakceptowaną odpowiedź na jedną, która wyróżnia tworzenie .phppliku. Nawiasem mówiąc, jeśli skomentujesz pytanie, otrzymam powiadomienie i będę mógł rozwiązać problem wcześniej.
nekromanta

5
@Pacerier Nie ma to nic wspólnego z różnymi instalacjami PHP, ale różne SAPI mogą używać różnych plików ini. Nie używam modułu apache, ale o ile pamiętam myślę, że nie ma sposobu na obejście phpinfo.phppliku podobnego do. Z FPM możesz przynajmniej użyć php5-fpm -i | grep '\.ini'. Zwykle używasz tego dwa lub trzy razy, a na koniec wiesz, gdzie są pliki;)
KingCrunch

133

To działa dla mnie:

php -i | grep 'php.ini'

Powinieneś zobaczyć coś takiego:

Loaded Configuration File => /usr/local/lib/php.ini

ps Aby pobrać tylko ścieżkę php.inin

php -i | grep /.+/php.ini -oE

5
To działa tylko wtedy, jeśli nie jestphp.ini , który jest dokładnie problem: Jeśli nie ma, nadal nie wiem gdzie patrzeć, czy gdzie umieścić nowy.
KingCrunch,

Nigdy nie spotkałem się z sytuacją, w której nie ma pliku php.ini.
coderama

Uruchomienie tego polecenia daje mi Configuration File (php.ini) Path => /usr/lib, ale uruchomienie <?php phpinfo(); ?>daje mi Loaded Configuration File: /etc/php.ini. Więc phpinfo()w moim przypadku był bardziej niezawodny.
Leo Galleguillos

2
To nie jest do końca poprawne. Każda platforma korzystająca z języka PHP ma swój własny plik php.ini. Jeśli wywołasz ten wiersz z linii poleceń, prawdopodobnie otrzymasz coś takiego jak /var/php5/cli/php.ini, który nie jest plikiem używanym podczas uruchamiania PHP w środowisku internetowym. W przypadku tego pliku należy zajrzeć do folderu apache2.
Andrea Moro

63

W oknie poleceń wpisz

php --ini

To pokaże ci ścieżkę

Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File:         /usr/local/lib/php.ini

Jeśli powyższe polecenie nie działa, użyj tego

echo phpinfo();

33

To polecenie powinno ci pomóc je znaleźć

php -r "phpinfo();" | grep php.ini

1
Lubię to bardziej niż niektóre inne odpowiedzi. Nie wymaga tworzenia, lokalizowania pliku php z tymi treściami i ładowania strony w przeglądarce.
Andrew Allbright,

29

Użyj następujących poleceń, aby znaleźć php.iniścieżkę do pliku w systemie Linux.

[root@AnyDirectory ~]# locate php.ini
/etc/php.ini
/etc/php.ini.rpmnew
/usr/share/doc/php-common-5.4.45/php.ini-development
/usr/share/doc/php-common-5.4.45/php.ini-production


lub spróbuj w inny sposób

[root@AnyDirectory ~]# php --ini
pokazuje wynik ścieżki


11
Jest to gorsze od metod takich jak php -i | grep 'php.ini', ponieważ znajduje dowolny plik php.ini i nie mówi ci, którego używa Twoja instalacja PHP. Może również dawać błędne wyniki, gdy locateDB jest nieaktualny.
lxg


22

PHP zawiera dwie funkcje rodzime, które pokazują, który plik konfiguracyjny jest ładowany:

W zależności od konfiguracji Apache i CLI mogą używać różnych plików ini. Oto dwa rozwiązania:

Apache:

Po prostu dodaj poniższe w pliku php i otwórz go w przeglądarce

print php_ini_loaded_file();
print_r(php_ini_scanned_files());

CLI:

Skopiuj i wklej w swoim terminalu:

php -r 'print php_ini_loaded_file(); print_r(php_ini_scanned_files());'

Niedoceniona, dokładna i (prawie) poprawna odpowiedź. Prawie zmieniłem to na poprawną odpowiedź, ale martwię się, że php_ini_loaded_filenie zawsze będzie dostępna.
nekromanta

@zylstra jaka była twoja wersja php? dokumenty dla php_ini_loaded_filepowiedzmy wersji php> = 5.2.4
nekromanta

@necromancer Nie jestem pewien. Zapomniałem, który system sprawdzam. : /
zylstra

8
find / -name php.ini

Hej ... to zadziałało dla mnie!


3
po pierwsze zajmuje to trochę czasu; dla dwóch osób, jeśli masz więcej niż jeden, skąd wiesz, który jest aktualnie używany?
nekromanta

1
To prawda, php --inidziała, ale to tylko kolejna opcja :) Zwykle jest taka /etc/php5/cli/php.ini /etc/php5/apache2/php.ini /etc/php5/cgi/php.inii zwykle ta, którą chcesz, jest dość oczywista. (cli, apache, cgi)
Banned_User

To nie jest dobre rozwiązanie, ponieważ nie chcemy znaleźć całego pliku php.ini na dysku.

4

Możesz uzyskać więcej informacji o swoich plikach konfiguracyjnych, używając czegoś takiego:

$ -> php -i | ack config # Use fgrep -i if you don't have ack

Configure Command =>  './configure'  ...
Loaded Configuration File => /path/to/php.ini


2

Wypróbuj jedno z tych rozwiązań

  1. W swoim typie terminala find / -name "php.ini"

  2. W swoim typie terminala php -i | grep php.ini. Powinien pokazywać ścieżkę do pliku jakoConfiguration File (php.ini) Path => /etc

  3. Jeśli możesz uzyskać dostęp do jednego z plików php, otwórz go w edytorze (notatniku) i wstaw poniższy kod po <?php w nowym wierszu phpinfo();To powie ci lokalizację php.ini
  4. Możesz także porozmawiać z php w trybie interaktywnym. Po prostu wpisz php -aterminal i wpisz phpinfo (); po zainicjowaniu php.

punkty 1, 2 i 4 są podatne na wiele problemów instalacyjnych; są już świetne odpowiedzi. nie trzeba dodawać odpowiedzi, która nic tutaj nie dodaje.
nekromanta

@necromancer szczegółowo wyjaśni swoje problemy, aby był dla kogoś przydatny. Głosujemy za negatywnymi i bezużytecznymi odpowiedziami, a społeczność zdecyduje.
cherankrish

-1

Istnieje już kilka ważnych sposobów na zlokalizowanie pliku php.ini, ale jeśli natknąłeś się na tę stronę, ponieważ chcesz coś z tym zrobić w skrypcie bash:

path_php_ini="$(php -i | grep 'Configuration File (php.ini) Path' | grep -oP '(?<=\=\>\s).*')" echo ${path_php_ini}


1
zobacz zamiast tego: stackoverflow.com/a/24342463/621338 zamiast grepowania go, co jest kruche, jeśli tekst się zmieni, możesz mieć php drukujący tylko nazwę pliku i używać go w skrypcie bash bez skomplikowanych rzeczy, takich jak powyższe.
nekromanta
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.