Comment trouver le fichier php.ini utilisé par la ligne de commande?

389

J'ai besoin d'activer pdo_mysql dans mon environnement EasyPhp, donc je suis allé dans le fichier php.ini et je n'ai pas commenté la ligne suivante:

extension=php_pdo_mysql.dll

Malheureusement, j'ai toujours le même problème. J'utilise la CLI, donc je suppose que je dois localiser le fichier php.ini utilisé par la CLI. Comment le trouver?

Amokrane Chentir
la source
@sjas Ce n'est pas faux, c'est correct et vous permet de connaître le chemin du php.ini chargé dans le cli.
SaidbakR

Réponses:

952

Exécutez simplement php --iniet recherchez Loaded Configuration Filedans la sortie l'emplacement de php.inivotre CLI

Mchl
la source
5
@Mchl Je vous voterais positivement, mais je pense que vous auriez dû poster la réponse avec grep dans la ligne.
Jim W.
9
@BradFJacobs pourquoi utiliser grep alors que c'est maintenant multiplateforme?
Garet Claborn
Mais cela ne vous montre-t-il pas simplement celui qui est chargé lors de l'utilisation de PHP via la CLI (car vous exécutez la commande à partir de cela).
Antony D'Andrea
1
@ AntonyD'Andrea: c'est exactement de cela qu'il s'agit. Voir? Il l'indique même dans le titre: Comment trouver le fichier php.ini utilisé par la ligne de commande ?
Mchl
ce n'est pas ma réponse ... dans mon cas, je tape sudo find / -iname php.iniet il trouve /etc/php/7.0/apache2/php.inile bon endroit du bon fichier de configuration php.ini de ma machine qu'il n'a pas été trouvé par php --iniou php -i | grep php.ini(les deux ont été trouvés /etc/php/7.0/cli/php.ini)
NineCattoRules
366

Vous pouvez obtenir une phpinfo()utilisation complète en utilisant:

php -i 

Et là-dedans, il y a le php.inifichier utilisé:

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

Sous Windows, utilisez findplutôt:

php -i|find/i"configuration file"
Pascal MARTIN
la source
12
Ensuite, cette instance de php n'a utilisé aucun php.ini, sauf les valeurs par défaut. La Configuration Fileligne de phpinfo () montre le dernier endroit où php a recherché un fichier ini. Cela peut être l'endroit où il a trouvé un tel fichier ou la dernière option qui se trouve être% SYSTEMROOT% sur Windows.
VolkerK
2
@pascal: php -i | find "Configuration file"devrait fonctionner sous Windows. Certainement pas aussi puissant que grep, mais findfera une recherche de chaîne de base pour vous. Bien sûr, si php -i transfère sa sortie vers stderr, vous êtes probablement SOL.
Marc B
2
findest sensible à la casse par défaut, il doit donc être parfait ( php -i | find "Configuration File") ou rendu insensible à la casse ( php -i | find /i "Configuration file"- notez l' /iindicateur).
deizel
9
Envisagez d'ajouter php --inicomme alternative; disponible depuis PHP 5.2.3 :)
Ja͢ck
2
Personne n'a mentionné qu'il est possible de prendre cette valeur à partir du script en appelant php_ini_loaded_file et si nécessaire php_ini_scanned_files
Radek Benkel
16

Vous pouvez utiliser get_cfg_var ('cfg_file_path') pour cela:

Pour vérifier si le système utilise un fichier de configuration, essayez de récupérer la valeur du paramètre de configuration cfg_file_path. Si cela est disponible, un fichier de configuration est utilisé.
Contrairement à phpinfo (), il dira s'il n'a pas du tout trouvé / utilisé un php.ini.

var_dump( get_cfg_var('cfg_file_path') );

Et vous pouvez simplement définir l'emplacement du php.ini . Vous utilisez la version en ligne de commande, donc en utilisant le -cparamètre, vous pouvez spécifier l'emplacement, par exemple

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

Exécutez php --inidans votre terminal, vous obtiendrez tous les détails sur les fichiers 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

Pour en savoir plus, utilisez la commande d'aide php --helpIl affichera toutes les options possibles.

Sathish
la source
8

Parfois, les choses ne sont pas toujours ce qu'elles semblent quand il s'agit de configurer des fichiers en général. Ici, j'applique mes méthodes habituelles pour explorer les fichiers ouverts par un processus.

J'utilise un programme en ligne de commande très puissant et utile appelé strace pour me montrer ce qui se passe vraiment derrière mon dos!

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

Strace extrait les appels du noyau (système) que votre programme effectue et sauvegarde la sortie dans le fichier spécifié par -o

Il est facile d'utiliser grep pour rechercher des occurrences de php.ini dans ce journal. Il est assez évident de regarder la réponse typique suivante pour voir ce qui se passe.

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
la source
1
php -im'a donné des résultats incorrects, mais celui-ci est parfaitement bien. Je vous remercie!
Dmitry Ginzburg
7

Si vous voulez que tous les fichiers de configuration soient chargés, ceci vous indiquera:

php -i | grep "\.ini"

Certains systèmes chargent des éléments à partir de plusieurs fichiers ini. Sur mon système Ubuntu, cela ressemble à ceci:

$  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
la source
6

Sur OSX Mavericks, exécutez:

$ php -i | grep 'Configuration File'

Revenu:

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

Dans le /etc/répertoire se trouvait:

php.ini.default

(ainsi que php-fpm.conf.default)

J'ai pu copier php.ini.defaultà php.ini, ajouter date.timezone = "US/Central"au sommet ( à droite ci - dessous [php]), et le problème est résolu.

(Au moins, le message d'erreur a disparu.)

MikeiLL
la source
5

Si vous devez le transmettre à une autre application, vous pouvez faire quelque chose comme:

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

renvoie uniquement le chemin. php -c $(php --ini | grep Loaded | cut -d" " -f12)passera dans le fichier de configuration (utile pour fpm)

Mike Mackintosh
la source
3

D'après ce que je me souviens quand je l' habitude d'utiliser EasyPHP, le fichier php.ini est soit dans C:\Windows\ouC:\Windows\System32

Tim Cooper
la source
2
Bon, ça me dit C: \ WINDOWS. Mais je ne l'ai pas trouvé sérieusement!
Amokrane Chentir
2

Faire

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

Cela générera tous les fichiers nommés php.ini.

Découvrez lequel vous utilisez, généralement apache2/php.ini

Han Van Pham
la source
Cela ne fonctionne pas s'il n'y a pas de fichier php.ini (certains conteneurs docker). La réponse acceptée est donc mieux adaptée.
Manuel Manhart
homme myyyyyyyyyy
vacances doc
@emilioestevez * woman
willsmanley
1

Dans votre fichier php.ini, définissez votre répertoire d'extension, par exemple:

extension_dir = "C:/php/ext/"

Vous verrez dans votre dossier PHP qu'il y a un dossier ext avec toutes les DLL et extensions.

Marc Uberstein
la source
0

Enregistrez la sortie phpinfo CLI dans un fichier local:

php -i >> phpinfo-cli.txt
lubosdz
la source
0

Dans le conteneur Docker phpmyadmin / phpmyadmin aucun fichier php.ini. Mais il y a deux fichiers: php.ini-debug et php.ini-production

Pour résoudre le problème, renommez simplement l'un des fichiers en php.ini et redémarrez le conteneur Docker.

Ivan Gusev
la source
-4

Il n'y a pas de php.ini utilisé par la ligne de commande. Vous devez copier le fichier de ...EasyPHP-<<version>>\apache\php.ini à ...EasyPHP-<<version>>\php\php.iniéditer celui du répertoire php

Référence:

antitoxique
la source