Bagaimana menemukan file php.ini yang digunakan oleh baris perintah?


389

Saya perlu mengaktifkan pdo_mysql di lingkungan EasyPhp saya, jadi saya pergi ke file php.ini dan menghapus komentar pada baris berikut:

extension=php_pdo_mysql.dll

Sayangnya saya masih memiliki masalah yang sama. Saya menggunakan CLI jadi saya kira saya perlu mencari file php.ini yang digunakan oleh CLI. Bagaimana saya bisa menemukannya?



@ Sjas Ini tidak salah, itu benar dan biarkan Anda tahu jalan php.ini yang dimuat di cli.
SaidbakR

Jawaban:


952

Jalankan saja php --inidan cari Loaded Configuration Filedalam output untuk lokasi yang php.inidigunakan oleh CLI Anda


5
@MCHL Saya akan mendukung Anda, tetapi saya pikir Anda harus memposting jawabannya dengan grep di telepon.
Jim W.

9
@BradFJacobs mengapa menggunakan grep saat ini sudah lintas platform?
Garet Claborn

Tapi bukankah ini hanya menunjukkan kepada Anda yang dimuat saat menggunakan PHP melalui CLI (karena Anda menjalankan perintah dari itu).
Antony D'Andrea

1
@ AntonyD'Andrea: persis seperti itulah pertanyaannya. Lihat? Itu menyatakan bahkan dalam judul: Bagaimana menemukan file php.ini yang digunakan oleh baris perintah ?
Mchl

ini bukan jawaban saya ... dalam kasus saya, saya mengetik sudo find / -iname php.inidan menemukan /etc/php/7.0/apache2/php.initempat yang tepat dari file konfigurasi php.ini yang tepat dari mesin saya yang tidak ditemukan oleh php --iniatau php -i | grep php.ini(keduanya ditemukan /etc/php/7.0/cli/php.ini)
NineCattoRules

366

Anda bisa mendapatkan penuh phpinfo()menggunakan:

php -i 

Dan, di sana, ada php.inifile yang digunakan:

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

Sebaliknya, pada Windows gunakan find:

php -i|find/i"configuration file"

12
Maka instance php ini tidak menggunakan php.ini sama sekali kecuali nilai default. The Configuration Filegaris phpinfo () menunjukkan tempat terakhir di mana php mencari sebuah file ini. Itu bisa menjadi tempat di mana ia menemukan file seperti itu atau opsi terakhir yang merupakan% SYSTEMROOT% di windows.
VolkerK

2
@ pasif: php -i | find "Configuration file"harus bekerja di Windows. Jelas tidak sekuat grep, tetapi findakan melakukan pencarian string dasar untuk Anda. Tentu saja, jika php -i membuang outputnya ke stderr, Anda mungkin SOL.
Marc B

2
findpeka terhadap huruf besar-kecil, jadi harus sempurna ( php -i | find "Configuration File") atau dibuat tidak peka huruf besar-kecil ( php -i | find /i "Configuration file"- perhatikan /ibenderanya).
deizel

9
Pertimbangkan untuk menambahkan php --inisebagai alternatif; tersedia sejak PHP 5.2.3 :)
Ja͢ck

2
Tidak ada yang menyebutkan, bahwa dimungkinkan untuk mengambil nilai dari skrip dengan memanggil php_ini_loaded_file dan ketika diperlukan php_ini_scanned_files
Radek Benkel

16

Anda dapat menggunakan get_cfg_var ('cfg_file_path') untuk itu:

Untuk memeriksa apakah sistem menggunakan file konfigurasi, coba ambil nilai pengaturan konfigurasi cfg_file_path. Jika ini tersedia, file konfigurasi sedang digunakan.
Tidak seperti phpinfo () ia akan memberi tahu jika tidak menemukan / menggunakan php.ini sama sekali.

var_dump( get_cfg_var('cfg_file_path') );

Dan Anda cukup mengatur lokasi php.ini . Anda menggunakan versi baris perintah, jadi menggunakan -cparameter Anda dapat menentukan lokasi, mis

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

13

Jalankan php --inidi terminal Anda, Anda akan mendapatkan semua detail tentang file 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

Untuk lebih lanjut, gunakan perintah bantuan. php --helpIni akan menampilkan semua opsi yang mungkin.


8

Kadang-kadang hal-hal tidak selalu seperti yang terlihat ketika datang ke file konfigurasi secara umum. Jadi di sini saya menerapkan metode biasa untuk mengeksplorasi file apa yang dibuka oleh suatu proses.

Saya menggunakan program baris perintah yang sangat kuat dan berguna yang disebut strace untuk menunjukkan kepada saya apa yang sebenarnya terjadi di belakang saya!

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

Strace menggali kernel (sistem) yang dipanggil oleh program Anda dan membuang output ke file yang ditentukan oleh -o

Sangat mudah untuk menggunakan grep untuk mencari kemunculan php.ini di log ini. Cukup jelas melihat respons khas berikut untuk melihat apa yang terjadi.

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 -imemberi saya hasil yang salah, tapi yang ini baik-baik saja. Terima kasih!
Dmitry Ginzburg

7

Jika Anda ingin semua file konfigurasi dimuat, ini akan memberi tahu Anda:

php -i | grep "\.ini"

Beberapa sistem memuat berbagai hal dari lebih dari satu file ini. Di sistem ubuntu saya, tampilannya seperti ini:

$  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

Di OSX Mavericks, jalankan:

$ php -i | grep 'Configuration File'

Kembali:

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

Dalam /etc/direktori itu:

php.ini.default

(juga php-fpm.conf.default)

Saya bisa menyalin php.ini.defaultke php.ini, tambahkan date.timezone = "US/Central"ke atas (tepat di bawah [php]), dan masalahnya selesai.

(Setidaknya pesan kesalahannya hilang.)


5

Jika Anda harus meneruskannya ke aplikasi lain, Anda dapat melakukan sesuatu seperti:

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

hanya mengembalikan jalur. php -c $(php --ini | grep Loaded | cut -d" " -f12)akan meneruskan file konfigurasi (berguna untuk fpm)


3

Dari apa yang saya ingat ketika saya dulu menggunakan EasyPHP, file php.ini ada di C:\Windows\atauC:\Windows\System32


2
Benar itu memberi tahu saya C: \ WINDOWS. Tetapi saya tidak menemukannya di sana dengan serius!
Amokrane Chentir

2

Melakukan

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

Ini akan menampilkan semua file bernama php.ini.

Cari tahu yang mana yang Anda gunakan, biasanya apache2/php.ini


Ini tidak berfungsi jika tidak ada file php.ini (beberapa kontainer buruh pelabuhan). Karenanya jawaban yang diterima lebih cocok.
Manuel Manhart

myyyyyyyyyyy
doc holiday

@emilioestevez * wanita
willsmanley

1

Di file php.ini Anda, atur direktori ekstensi Anda, mis:

extension_dir = "C:/php/ext/"

Anda akan melihat di folder PHP Anda ada folder ext dengan semua dll dan ekstensi.


0

Simpan output CLI phpinfo ke file lokal:

php -i >> phpinfo-cli.txt

0

Dalam docker container, phpmyadmin / phpmyadmin no file php.ini. Tetapi ada dua file: php.ini-debug dan php.ini-production

Untuk mengatasi masalah ini, cukup ganti nama salah satu file ke php.ini dan mulai ulang wadah buruh pelabuhan.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.