วิธีค้นหาไฟล์ php.ini ที่ใช้โดยบรรทัดคำสั่ง


389

ฉันต้องเปิดใช้งาน pdo_mysql ในสภาพแวดล้อม EasyPhp ของฉันดังนั้นฉันจึงไปที่ไฟล์ php.ini และไม่ใส่เครื่องหมายในบรรทัดต่อไปนี้:

extension=php_pdo_mysql.dll

น่าเสียดายที่ฉันยังคงมีปัญหาเดียวกัน ฉันกำลังใช้ CLI ดังนั้นฉันคิดว่าฉันต้องค้นหาไฟล์ php.ini ที่ CLI ใช้ ฉันจะหามันได้อย่างไร



@sjas มันไม่ถูกต้องมันถูกต้องและแจ้งให้คุณทราบเส้นทางของ php.ini ที่โหลดใน cli
SaidbakR

คำตอบ:


951

เพียงแค่เรียกใช้php --iniและค้นหาLoaded Configuration Fileเอาต์พุตของตำแหน่งที่php.iniCLI ของคุณใช้


5
@Mchl ฉันจะลงคะแนนให้คุณ แต่ฉันคิดว่าคุณควรโพสต์คำตอบด้วย grep ในบรรทัด
Jim W.

9
@BradFJacobs ทำไมต้องใช้ grep เมื่อตอนนี้ข้ามแพลตฟอร์ม?
Garet Claborn

แต่นี่ไม่ใช่เพียงแสดงให้คุณเห็นว่าโหลดเมื่อใช้ PHP ผ่าน CLI (เพราะคุณกำลังเรียกใช้คำสั่งจากนั้น)
Antony D'Andrea

1
@ AntonyD'Andrea: ซึ่งเป็นสิ่งที่เป็นคำถามเกี่ยวกับ ดู? มันระบุอย่างนั้นแม้จะอยู่ในชื่อเรื่อง: จะค้นหาไฟล์ php.ini ที่ใช้โดยบรรทัดคำสั่งได้อย่างไร
Mchl

นี่ไม่ใช่คำตอบของฉัน ... ในกรณีของฉันฉันพิมพ์ sudo find / -iname php.iniและพบ/etc/php/7.0/apache2/php.iniสถานที่ที่ถูกต้องของไฟล์ php.ini config ของเครื่องที่ไม่พบphp --iniหรือphp -i | grep php.ini(พบทั้งคู่/etc/php/7.0/cli/php.ini)
NineCattoRules

366

คุณสามารถได้รับเต็มphpinfo()โดยใช้:

php -i 

และในนั้นมีphp.iniไฟล์ที่ใช้:

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

บน Windows ใช้findแทน:

php -i|find/i"configuration file"

12
จากนั้นอินสแตนซ์ php นี้ไม่ใช้ php.ini เลย แต่เป็นค่าเริ่มต้น Configuration Fileสายของ phpinfo () แสดงให้เห็นสถานที่สุดท้ายที่มอง PHP สำหรับไฟล์ INI นั่นอาจเป็นสถานที่ที่พบไฟล์หรือตัวเลือกสุดท้ายซึ่งเป็น% SYSTEMROOT% บน windows
VolkerK

2
@pascal: php -i | find "Configuration file"ควรทำงานบน Windows ไม่แข็งแกร่งเท่า grep แต่findจะทำการค้นหาสตริงพื้นฐานสำหรับคุณ แน่นอนถ้า php -i เอาท์พุทไปที่ stderr คุณอาจเป็น SOL
Marc B

2
findตรงตามตัวพิมพ์ใหญ่ - เล็กดังนั้นจึงต้องสมบูรณ์แบบ ( php -i | find "Configuration File") หรือทำตามตัวพิมพ์เล็ก - ใหญ่ ( php -i | find /i "Configuration file"- หมายเหตุ/iแฟล็ก)
deizel

9
พิจารณาการเพิ่มphp --iniเป็นทางเลือก มีให้ตั้งแต่ PHP 5.2.3 :)
Ja Junck

2
ไม่มีใครพูดถึงว่าเป็นไปได้ที่จะรับค่าจากสคริปต์โดยการเรียกphp_ini_loaded_fileและเมื่อต้องการphp_ini_scanned_files
Radek Benkel

16

คุณสามารถใช้get_cfg_var ('cfg_file_path')เพื่อ:

หากต้องการตรวจสอบว่าระบบกำลังใช้ไฟล์กำหนดค่าหรือไม่ให้ลองดึงค่าของการตั้งค่าการกำหนดค่า cfg_file_path หากมีอยู่ไฟล์การกำหนดค่าจะถูกใช้
ซึ่งแตกต่างจาก phpinfo () มันจะบอกว่ามันไม่พบ / ใช้ php.ini เลย

var_dump( get_cfg_var('cfg_file_path') );

และคุณสามารถตั้งค่าตำแหน่งของ php.iniได้อย่างง่ายดาย คุณกำลังใช้เวอร์ชันบรรทัดคำสั่งดังนั้นการใช้-cพารามิเตอร์ที่คุณสามารถระบุตำแหน่งได้เช่น

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

13

ทำงานphp --iniใน terminal ของคุณคุณจะได้รับรายละเอียดทั้งหมดเกี่ยวกับไฟล์ 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

สำหรับคำสั่งเพิ่มเติมให้ใช้การช่วยเหลือphp --helpมันจะแสดงตัวเลือกที่เป็นไปได้ทั้งหมด


8

บางครั้งบางสิ่งบางอย่างอาจไม่เหมือนที่เคยปรากฏเมื่อมาถึงไฟล์ปรับแต่งโดยทั่วไป ดังนั้นที่นี่ฉันใช้วิธีปกติของฉันในการสำรวจไฟล์ที่เปิดโดยกระบวนการ

ฉันใช้โปรแกรมบรรทัดคำสั่งที่มีประสิทธิภาพและมีประโยชน์มากที่เรียกว่าstraceเพื่อแสดงให้ฉันเห็นว่าเกิดอะไรขึ้นหลังของฉัน!

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

Strace ขุดเคอร์เนล (ระบบ) เรียกโปรแกรมที่คุณสร้างและทิ้งเอาต์พุตลงในไฟล์ที่ระบุโดย -o

มันง่ายต่อการใช้grepเพื่อค้นหา php.ini ในบันทึกนี้ เห็นได้ชัดว่ามันเป็นการตอบสนองทั่วไปต่อไปนี้เพื่อดูว่าเกิดอะไรขึ้น

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 -iให้ผลลัพธ์ที่ไม่ถูกต้อง แต่อันนี้ใช้ได้อย่างสมบูรณ์ ขอบคุณ!
Dmitry Ginzburg

7

หากคุณต้องการโหลดไฟล์การตั้งค่าทั้งหมดสิ่งนี้จะบอกคุณ:

php -i | grep "\.ini"

บางระบบโหลดสิ่งต่าง ๆ จากไฟล์ ini มากกว่าหนึ่งไฟล์ บนระบบ Ubuntu ของฉันดูเหมือนว่า:

$  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

บน OSX Mavericks ให้รัน:

$ php -i | grep 'Configuration File'

กลับมาว่า:

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

ใน/etc/ไดเรกทอรีคือ:

php.ini.default

(เช่นเดียวกับphp-fpm.conf.default)

ฉันสามารถคัดลอกphp.ini.defaultไปที่php.iniเพิ่มdate.timezone = "US/Central"ไปที่ด้านบน (ขวาล่าง[php]) และแก้ไขปัญหาได้แล้ว

(อย่างน้อยข้อความแสดงข้อผิดพลาดจะหายไป)


5

หากคุณต้องการส่งผ่านแอปอื่นคุณสามารถทำสิ่งต่อไปนี้:

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

คืนค่าพา ธ เท่านั้น php -c $(php --ini | grep Loaded | cut -d" " -f12)จะผ่านในไฟล์ปรับแต่ง (มีประโยชน์สำหรับfpm)


3

จากสิ่งที่ฉันจำได้เมื่อฉันใช้ EasyPHP ไฟล์ php.ini อาจอยู่ในC:\Windows\หรือC:\Windows\System32


2
ใช่มันกำลังบอกฉัน C: \ WINDOWS แต่ฉันไม่พบมันที่นั่นอย่างจริงจัง!
Amokrane Chentir

2

ทำ

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

ไฟล์นี้จะแสดงผลชื่อphp.iniทั้งหมด

ค้นหาว่าคุณใช้อันไหน apache2/php.ini


สิ่งนี้ไม่ทำงานหากไม่มีไฟล์ php.ini (บางคอนเทนเนอร์นักเทียบท่า) ดังนั้นคำตอบที่ยอมรับนั้นเหมาะสมกว่า
Manuel Manhart

ชาย myyyyyyyyyy
doc วันหยุด

@emilioestevez * หญิง
willsmanley

1

ในไฟล์ php.ini ของคุณตั้งค่าไดเรกทอรีส่วนขยายของคุณเช่น:

extension_dir = "C:/php/ext/"

คุณจะเห็นในโฟลเดอร์ PHP ของคุณมีโฟลเดอร์ ext พร้อม dll และส่วนขยายทั้งหมด



0

ในตัวเทียบท่าคอนเทนเนอร์ phpmyadmin / phpmyadmin ไม่มีไฟล์ php.ini แต่มีสองไฟล์: php.ini-debug และ php.ini-production

ในการแก้ปัญหาเพียงแค่เปลี่ยนชื่อไฟล์หนึ่งไฟล์เป็น php.ini และรีสตาร์ทคอนเทนเนอร์นักเทียบท่า


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.