Wie finde ich die von der Kommandozeile verwendete Datei php.ini?

389

Ich muss pdo_mysql in meiner EasyPhp-Umgebung aktivieren, also ging ich zur Datei php.ini und kommentierte die folgende Zeile aus:

extension=php_pdo_mysql.dll

Leider habe ich immer noch das gleiche Problem. Ich verwende die CLI, daher muss ich wahrscheinlich die von der CLI verwendete Datei php.ini suchen. Wie kann ich es finden?

Amokrane Chentir
quelle
@sjas Es ist nicht falsch, es ist richtig und lass dich den Pfad der geladenen php.ini in der CLI wissen.
SaidbakR

Antworten:

951

Führen Sie einfach aus php --iniund suchen Sie Loaded Configuration Filein der Ausgabe nach dem Speicherort php.ini, den Ihre CLI verwendet

Mchl
quelle
5
@Mchl Ich würde dich positiv bewerten, aber ich denke, du hättest die Antwort mit grep in der Zeile posten sollen.
Jim W.
9
@BradFJacobs warum grep verwenden, wenn dies jetzt plattformübergreifend ist?
Garet Claborn
Dies zeigt Ihnen jedoch nicht nur diejenige, die bei Verwendung von PHP über die CLI geladen wird (weil Sie den Befehl von dort aus ausführen).
Antony D'Andrea
1
@ AntonyD'Andrea: Genau darum geht es in der Frage. Sehen? Dies steht sogar im Titel: Wie finde ich die von der Befehlszeile verwendete Datei php.ini ?
Mchl
Dies ist nicht meine Antwort ... in meinem Fall tippe ich sudo find / -iname php.iniund es findet /etc/php/7.0/apache2/php.inidie richtige Stelle der richtigen php.ini-Konfigurationsdatei meines Computers, die von php --inioder php -i | grep php.ini(beide gefunden /etc/php/7.0/cli/php.ini) nicht gefunden wurde
NineCattoRules
366

Sie können eine vollständige phpinfo()Verwendung erhalten mit:

php -i 

Und dort drin ist die verwendete php.iniDatei:

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

Verwenden Sie unter Windows findstattdessen:

php -i|find/i"configuration file"
Pascal MARTIN
quelle
12
Dann verwendete diese PHP-Instanz überhaupt keine php.ini außer den Standardwerten. Die Configuration FileZeile von phpinfo () zeigt die letzte Stelle, an der php nach einer INI-Datei gesucht hat. Dies kann entweder der Ort sein, an dem eine solche Datei gefunden wurde, oder die letzte Option, die unter Windows% SYSTEMROOT% ist.
VolkerK
2
@pascal: php -i | find "Configuration file"sollte unter Windows funktionieren. Auf jeden Fall nicht so mächtig wie grep, aber es findwird eine einfache Zeichenfolgensuche für Sie durchführen. Wenn php -i seine Ausgabe an stderr ausgibt, sind Sie wahrscheinlich SOL.
Marc B
2
findBei der Groß- und Kleinschreibung wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden, daher muss zwischen php -i | find "Configuration File"Groß- und Kleinschreibung unterschieden () oder zwischen Groß- und Kleinschreibung unterschieden werden ( php -i | find /i "Configuration file"- /iFlag beachten ).
Deizel
9
Erwägen Sie das Hinzufügen php --inials Alternative. verfügbar seit PHP 5.2.3 :)
Ja͢ck
2
Niemand erwähnte, dass es möglich ist, diesen Wert aus dem Skript zu übernehmen, indem man php_ini_loaded_file und bei Bedarf php_ini_scanned_files aufruft
Radek Benkel
16

Sie können dafür get_cfg_var ('cfg_file_path') verwenden :

Versuchen Sie, den Wert der Konfigurationseinstellung cfg_file_path abzurufen, um zu überprüfen, ob das System eine Konfigurationsdatei verwendet. Wenn dies verfügbar ist, wird eine Konfigurationsdatei verwendet.
Im Gegensatz zu phpinfo () wird angezeigt, ob eine php.ini überhaupt nicht gefunden / verwendet wurde.

var_dump( get_cfg_var('cfg_file_path') );

Und Sie können einfach eingestellt den Standort der php.ini . Sie verwenden die Befehlszeilenversion. Mit dem -cParameter können Sie also den Speicherort angeben, z

php -c /home/me/php.ini -f /home/me/test.php
VolkerK
quelle
13

Wenn Sie es php --iniin Ihrem Terminal ausführen, erhalten Sie alle Details zu INI-Dateien

[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

Verwenden php --helpSie für weitere Informationen den Hilfebefehl. Es werden alle möglichen Optionen angezeigt.

Sathish
quelle
8

Manchmal sind die Dinge nicht immer so, wie sie scheinen, wenn es um Konfigurationsdateien im Allgemeinen geht. Hier wende ich meine üblichen Methoden an, um zu untersuchen, welche Dateien von einem Prozess geöffnet werden.

Ich benutze ein sehr leistungsfähiges und nützliches Kommandozeilenprogramm namens strace , um mir zu zeigen, was wirklich hinter meinem Rücken vor sich geht!

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

Strace gräbt Kernel- (System-) Aufrufe aus, die Ihr Programm ausführt, und speichert die Ausgabe in der durch -o angegebenen Datei

Es ist einfach, grep zu verwenden, um in diesem Protokoll nach Vorkommen von php.ini zu suchen. Es ist ziemlich offensichtlich, wenn man sich die folgende typische Antwort ansieht, um zu sehen, was los ist.

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
thomas-peter
quelle
1
php -igab mir falsche Ergebnisse, aber dieses ist vollkommen in Ordnung. Vielen Dank!
Dmitry Ginzburg
7

Wenn Sie möchten, dass alle Konfigurationsdateien geladen werden, erfahren Sie Folgendes:

php -i | grep "\.ini"

Einige Systeme laden Dinge aus mehr als einer INI-Datei. Auf meinem Ubuntu-System sieht es so aus:

$  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
Reece45
quelle
6

Unter OSX Mavericks wird Folgendes ausgeführt:

$ php -i | grep 'Configuration File'

Ist zurückgekommen:

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

Im /etc/Verzeichnis war:

php.ini.default

(sowie php-fpm.conf.default)

Ich war in der Lage zu kopieren php.ini.defaultzu php.ini, fügen Sie date.timezone = "US/Central"nach oben (rechts unten [php]), und das Problem ist gelöst.

(Zumindest die Fehlermeldung ist weg.)

MikeiLL
quelle
5

Wenn Sie es an eine andere App übergeben müssen, können Sie Folgendes tun:

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

gibt nur den Pfad zurück. php -c $(php --ini | grep Loaded | cut -d" " -f12)wird in der Konfigurationsdatei übergeben (nützlich für fpm)

Mike Mackintosh
quelle
3

Soweit ich mich erinnere, als ich EasyPHP verwendet habe, befindet sich die Datei php.ini entweder in C:\Windows\oderC:\Windows\System32

Tim Cooper
quelle
2
Richtig, es sagt mir C: \ WINDOWS. Aber ich habe es dort nicht ernsthaft gefunden!
Amokrane Chentir
2

Tun

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

Dadurch werden alle benannten Dateien ausgegeben php.ini.

Finden Sie heraus, welches Sie normalerweise verwenden apache2/php.ini

Han Van Pham
quelle
Dies funktioniert nicht, wenn keine php.ini-Datei vorhanden ist (einige Docker-Container). Daher ist die akzeptierte Antwort besser geeignet.
Manuel Manhart
myyyyyyyyyy Mann
doc Urlaub
@emilioestevez * Frau
Willsmanley
1

Legen Sie in Ihrer php.ini-Datei Ihr Erweiterungsverzeichnis fest, z.

extension_dir = "C:/php/ext/"

Sie werden sehen, dass sich in Ihrem PHP-Ordner ein ext-Ordner mit allen DLLs und Erweiterungen befindet.

Marc Uberstein
quelle
0

Speichern Sie die CLI-phpinfo-Ausgabe in einer lokalen Datei:

php -i >> phpinfo-cli.txt
lubosdz
quelle
0

Im Docker-Container phpmyadmin / phpmyadmin keine php.ini-Datei. Es gibt jedoch zwei Dateien: php.ini-debug und php.ini-Production

Um das Problem zu lösen, benennen Sie einfach eine der Dateien in php.ini um und starten Sie den Docker-Container neu.

Ivan Gusev
quelle
-4

Es gibt keine php.ini, die von der Befehlszeile verwendet wird. Sie haben die Datei von kopieren , ...EasyPHP-<<version>>\apache\php.ini um ...EasyPHP-<<version>>\php\php.inials bearbeiten , die einen in PHP - Verzeichnis

Referenz:

antitoxisch
quelle