ฉันจะหา php.ini ได้จากที่ใด


881

ไม่กี่ปีที่ผ่านมาฉันติดตั้ง Apache 2.2x และ PHP 5.3.1 บนเซิร์ฟเวอร์ Linux ที่ฉันดูแล ฉันใช้. tar.gz และสร้างมันตามคำแนะนำ (แทนที่จะเป็น rpms และ what-have-you) และทุกอย่างเรียบร้อยดี

วันนี้ฉันต้องติดตั้งสิ่งนี้ซึ่งดูเหมือนว่าเป็นห้องสมุด PHP ฉันทำตามขั้นตอนทั้งหมดเพื่อทำการติดตั้งและฉันพบ ibm_db2.so$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so

การจับที่ดีคือขั้นตอนสุดท้ายคือการกำหนดค่า php.ini แต่ไม่มี php.ini ในระบบของฉัน สยองขวัญแห่งความน่ากลัว PHP ทำงานได้ดียกเว้นหลักสูตรสำหรับ ibm_db2 แบบใหม่ที่ฉันอยากใช้ดังนั้นใครบางคนสามารถใช้ GUI เพื่อคนจรจัดDB2ได้ (ฉันลอง php script ขนาดเล็กซึ่งล้มเหลวและระบุว่าฟังก์ชัน ibm_db2 ไม่พร้อมใช้งาน)

ผมต้องจัดการกับ PHP ครั้งเดียวไม่กี่ปีที่ทุกคนดังนั้นโปรดสอนฉันในระดับพื้นฐานเกี่ยวกับสิ่งที่ฉันจะทำเพื่อให้สามารถเข้าถึง GUI DB2บนเว็บเพื่อ


120
90% ของเวลาเป็น /etc/php5/apache2/php.ini
Adam


6
การลงเนื่องจากสถานที่ตั้งของคำถามนั้นผิด "ไม่มี php.ini ในระบบของฉัน"ไม่คุณไม่สามารถค้นหาได้ การพูดที่locate php.iniจะบอกคุณในช่วงเวลาเพียงไฟล์ที่อยู่ในระบบของคุณ
การแข่งขัน Lightness ใน Orbit

1
@Adam: เว้นแต่จะไม่ใช่ PHP5;)
Line

2
@ บรรทัดใช่ความคิดเห็นของฉันไม่เกี่ยวข้องอีกต่อไปแม้ว่าจะไม่ได้ตระหนักถึงจำนวน upvotes!
อดัม

คำตอบ:


466

วิธีที่ดีที่สุดในการค้นหาคือสร้างไฟล์ php และเพิ่มรหัสต่อไปนี้:

<?php phpinfo(); ?>

และเปิดในเบราว์เซอร์ก็จะแสดงไฟล์ที่อ่านจริง!

อัปเดตโดย OP:

  1. คำตอบที่ยอมรับก่อนหน้านี้น่าจะเร็วกว่าและสะดวกกว่าสำหรับคุณ แต่ก็ไม่ถูกต้องเสมอไป ดูความคิดเห็นเกี่ยวกับคำตอบนั้น
  2. โปรดทราบ<?php echo php_ini_loaded_file(); ?>ถึงทางเลือกที่สะดวกกว่าที่กล่าวถึงในคำตอบนี้

11
นี่ควรเป็นคำตอบที่ยอมรับได้ หากคุณติดตั้ง CLI และมี apache กำลังทำงานอยู่อาจมีไฟล์ ini ของตัวเอง (ตามที่ระบบของฉันทำ) การใช้คำตอบที่ได้รับการยอมรับจะส่งคืนสิ่งที่ CLI ใช้อยู่แทนของ apache
ด่าน

2
@ ใช่คุณพูดถูก ฉันกำลังเปลี่ยนคำตอบที่ยอมรับได้สำหรับปัญหานี้เนื่องจากปัญหาที่คุณพูดถึงพบกับใครบางคนในทางปฏิบัติ (ที่แสดงความคิดเห็นกับคำตอบที่ยอมรับก่อนหน้านี้) (โดยวิธีการถ้าคุณมีความคิดเห็นเกี่ยวกับคำถามที่ฉันจะได้แก้ไขปัญหานี้ได้เร็วขึ้น)
หมอผี

2
สิ่งนี้ไม่ทำงานในการติดตั้งของฉัน สะกดผิด? ควรจะเป็น<?php phpinfo(); ?>
svenyonson

9
php -r \@phpinfo\(\)\;ทำงานให้ฉันphp -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1เพื่อดึงข้อมูลเฉพาะ
jgraup

@zylstra ลอง:<?php echo php_ini_loaded_file(); ?>
Ates Goral

834

บนบรรทัดคำสั่งดำเนินการ:

php --ini

คุณจะได้รับสิ่งที่ชอบ:

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

นั่นคือจาก dev-machine ในพื้นที่ของฉัน อย่างไรก็ตามบรรทัดที่สองเป็นสิ่งที่น่าสนใจ หากไม่มีการพูดถึงให้ดูที่แรก นั่นคือเส้นทางที่ PHP php.iniมองหา

คุณสามารถ grep ข้อมูลเดียวกันโดยใช้phpinfo()สคริปต์และเรียกมันด้วยเบราว์เซอร์ มันกล่าวถึงในบล็อกแรกของการส่งออก php -iทำเช่นเดียวกันสำหรับบรรทัดคำสั่ง แต่มันค่อนข้างอึดอัด


5
ยอมรับคำตอบที่เก่าแก่ที่สุดและก่อนหน้านี้ก่อนหน้านี้ (ดังนั้นบังคับให้ฉันรอสักครู่ก่อนจะยอมรับ) ขอบคุณสำหรับการขยายตัวซึ่งอาจจะช่วยให้คนต่อไปมองหาข้อมูล สำหรับฉันบรรทัดที่ 2 พูดว่า (ไม่มี) และทุกอย่างทำงานได้ดีหลังจากวางไฟล์ php.ini ในเส้นทางบนบรรทัดแรก ขอบคุณ!
หมอผี

12
ฉันใช้คำสั่งนี้และแก้ไขไฟล์ php.ini ที่มันส่งให้ฉันด้วยและการตั้งค่า PHP ของฉันก็ไม่เปลี่ยนแปลงและฉันก็รู้ว่ามันไม่ได้ให้ไฟล์ php.ini ที่ถูกต้องให้ฉัน ฉันลองใช้ฟังก์ชั่น phpinfo () PHP และให้ตำแหน่งที่ถูกต้องจริงของ php.ini ที่ฉันต้องการแก้ไข ฉันคิดว่าสิ่งนี้สำคัญมากและฉันหวังว่านี่จะช่วยให้ใครบางคน
thecommonthread

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

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

5
@Pacerier สิ่งนี้ไม่เกี่ยวข้องกับการติดตั้ง PHP ที่แตกต่างกัน แต่ SAPIs ที่แตกต่างกันสามารถใช้ไฟล์ ini ที่ต่างกันได้ ฉันไม่ได้ใช้โมดูล apache แต่เท่าที่ฉันจำได้ว่าฉันคิดว่าไม่มีทางรอบphpinfo.phpไฟล์เหมือน ด้วย FPM php5-fpm -i | grep '\.ini'คุณสามารถที่ใช้งานน้อย โดยปกติแล้วคุณใช้นี้สองหรือสามครั้งและในตอนท้ายของวันที่คุณรู้ว่าที่ไฟล์ที่มี;)
KingCrunch

133

สิ่งนี้ใช้ได้กับฉัน:

php -i | grep 'php.ini'

คุณควรเห็นบางสิ่งเช่น:

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

ps เพื่อรับเฉพาะเส้นทาง php.inin

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

5
นี้จะทำงานเฉพาะถ้ามีเป็นphp.iniซึ่งเป็นสิ่งที่เป็นปัญหา: ถ้าไม่มีผู้ใดที่คุณยังไม่ทราบว่าจะดูหรือที่จะวางใหม่
KingCrunch

ฉันไม่เคยเจอสถานการณ์ที่ไม่มีไฟล์ php.ini
coderama

เรียกใช้คำสั่งนี้จะช่วยให้ฉันConfiguration File (php.ini) Path => /usr/libแต่ทำงานให้ฉัน<?php phpinfo(); ?> Loaded Configuration File: /etc/php.iniดังนั้นจึงphpinfo()เชื่อถือได้มากขึ้นในกรณีของฉัน
Leo Galleguillos

2
สิ่งนี้ไม่ถูกต้องทั้งหมด ทุกเฟรมเวิร์กที่ใช้ภาษา PHP มีไฟล์ php.ini ของตัวเอง ถ้าคุณเรียกบรรทัดนั้นจากบรรทัดคำสั่งคุณอาจจะได้รับบางอย่างเช่น /var/php5/cli/php.ini ซึ่งไม่ใช่ไฟล์ที่ใช้เมื่อเรียกใช้ PHP ในสภาพแวดล้อมเว็บ สำหรับไฟล์นั้นคุณควรดูในโฟลเดอร์ apache2
Andrea Moro

63

ในประเภทหน้าต่างคำสั่ง

php --ini

มันจะแสดงเส้นทางที่คุณชอบ

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

หากคำสั่งดังกล่าวไม่ทำงานให้ใช้สิ่งนี้

echo phpinfo();

33

คำสั่งนี้จะช่วยคุณค้นหา

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

1
ฉันชอบสิ่งนี้มากกว่าคำตอบอื่น ๆ ไม่ต้องการให้ฉันสร้างค้นหาไฟล์ php ด้วยเนื้อหาเหล่านั้นและโหลดหน้าในเบราว์เซอร์
Andrew Allbright

29

ใช้คำสั่งต่อไปนี้เพื่อค้นหาphp.iniพา ธ ไฟล์ใน 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


หรือลองอีกวิธีนี้

[root@AnyDirectory ~]# php --ini
มันแสดงให้เห็นผลเส้นทาง


11
สิ่งนี้ด้อยกว่าวิธีการต่างphp -i | grep 'php.ini'ๆ เนื่องจากพบphp.ini ใด ๆและไม่ได้บอกคุณว่าการติดตั้ง PHP แบบใดที่คุณใช้ นอกจากนี้ยังอาจให้ผลที่ผิดเมื่อlocateฐานข้อมูลไม่ทันสมัย
lxg


22

PHP มาพร้อมกับฟังก์ชั่นพื้นฐานสองตัวเพื่อแสดงไฟล์โหลดที่โหลดไว้:

  • php_ini_loaded_fileส่งคืนไฟล์ ini ที่โหลด
  • php_ini_scanned_filesส่งคืนรายการไฟล์. ini ที่แยกวิเคราะห์จาก ini dir เพิ่มเติม

ApacheและCLIอาจใช้ไฟล์ ini ที่ต่างกันทั้งนี้ขึ้นอยู่กับการตั้งค่าของคุณ นี่คือคำตอบสองข้อ:

อาปาเช่:

เพียงเพิ่มสิ่งต่อไปนี้ในไฟล์ php และเปิดในเบราว์เซอร์ของคุณ

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

CLI:

คัดลอกวางในเทอร์มินัลของคุณ:

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

คำตอบที่ถูกต้องละเอียดถี่ถ้วนและละเอียด (เกือบ) ฉันเกือบจะเปลี่ยนสิ่งนี้เป็นคำตอบที่ถูกต้อง แต่ฉันกังวลว่าphp_ini_loaded_fileอาจไม่สามารถใช้ได้เสมอไป
หมอผี

@zylstra รุ่น php ของคุณคืออะไร? เอกสารสำหรับการphp_ini_loaded_fileพูดรุ่น php> = 5.2.4
หมอผี

@necromancer ไม่แน่ใจตอนนี้ ลืมระบบที่ฉันกำลังตรวจสอบอยู่ : /
zylstra

8
find / -name php.ini

เฮ้ ... มันใช้งานได้สำหรับฉัน!


3
สำหรับหนึ่งใช้เวลาในการ; สำหรับสองคนถ้าคุณมีมากกว่าหนึ่งคุณจะรู้ได้อย่างไรว่าอันไหนที่ใช้จริง
หมอผี

1
จริงใช้php --iniงานได้ แต่นี่เป็นเพียงอีกตัวเลือก :) โดยปกติแล้วจะมี/etc/php5/cli/php.ini /etc/php5/apache2/php.ini /etc/php5/cgi/php.iniและที่คุณต้องการจะชัดเจน (cli, apache, cgi)
Banned_User

นี่ไม่ใช่ทางออกที่ดีเพราะเราไม่ได้ตั้งใจหาไฟล์ php.ini ทั้งหมดในดิสก์

4

คุณสามารถรับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ปรับแต่งของคุณได้จาก:

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

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

4

สำหรับ SAPI: php-fpm

ไม่จำเป็นต้องสร้างไฟล์ php.info (ไม่ใช่นโยบายที่ดีที่จะปล่อยให้โลกอ่านต่อไป) บนบรรทัดคำสั่ง:

php-fpm -i | more

ที่ใดที่หนึ่งในเอาต์พุตมันจะแสดงบรรทัดนี้:

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

นี่คือคำอธิบายที่สมบูรณ์ยิ่งขึ้น: https://www.cloudinsidr.com/content/how-to-figure-out-your-php-configuration-parameters-without-info-php/


2

ลองวิธีใดวิธีหนึ่งนี้

  1. ในประเภทอาคารของคุณ find / -name "php.ini"

  2. php -i | grep php.iniในประเภทอาคารของคุณ มันควรจะแสดงเส้นทางของไฟล์เป็นConfiguration File (php.ini) Path => /etc

  3. หากคุณสามารถเข้าถึงไฟล์ php หนึ่งไฟล์ของคุณให้เปิดในเอดิเตอร์ (notepad) และแทรกโค้ดด้านล่างหลังจาก<?php อยู่ในบรรทัดใหม่phpinfo();ซึ่งจะบอกตำแหน่งของ php.ini
  4. คุณยังสามารถพูดคุยกับ php ในโหมดโต้ตอบ เพียงพิมพ์php -aเทอร์มินัลแล้วพิมพ์ phpinfo (); หลังจาก php เริ่มต้น

จุดที่ 1, 2 และ 4 มีความเสี่ยงต่อปัญหาการติดตั้งที่หลากหลาย มีคำตอบที่ดีอยู่แล้ว ไม่จำเป็นต้องเพิ่มคำตอบที่ไม่เพิ่มอะไรที่นี่
ผู้วิเศษ

@necromancer อธิบายปัญหาของคุณโดยละเอียดดังนั้นมันจะมีประโยชน์สำหรับใครบางคน เรามี upvote และ downvote สำหรับคำตอบที่ไม่ดีและไม่เหมาะสมและชุมชนจะตัดสินใจ
Cherankrish

-1

มีหลายวิธีที่ถูกต้องที่กล่าวถึงแล้วสำหรับการค้นหาไฟล์ php.ini แต่ถ้าคุณเจอหน้านี้เพราะคุณต้องการทำอะไรกับมันในสคริปต์ทุบตี:

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


1
ดูสิ่งนี้แทน: stackoverflow.com/a/24342463/621338แทนที่จะทำการ grepping ออกซึ่งจะเปราะหากข้อความเปลี่ยนแปลงคุณสามารถพิมพ์ php เพียงชื่อไฟล์และใช้ในสคริปต์ทุบตีโดยไม่มีสิ่งซับซ้อนเช่นด้านบน
หมอผี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.