Tôi có thể tìm php.ini ở đâu?


881

Vài năm trước tôi đã cài đặt Apache 2.2x và PHP 5.3.1 trên máy chủ Linux mà tôi duy trì. Tôi đã sử dụng .tar.gz và xây dựng chúng theo hướng dẫn (thay vì rpms và những gì bạn có). Và tất cả đều ổn.

Hôm nay tôi cần cài đặt cái này giống như một thư viện PHP. Tôi đã trải qua tất cả các bước để thực hiện cài đặt và tôi tìm thấy ibm_db2.so trong$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so

Điều tuyệt vời là bước cuối cùng là định cấu hình php.ini nhưng KHÔNG có php.ini trên hệ thống của tôi. Kinh hoàng của sự kinh hoàng. PHP hoạt động tốt, tất nhiên ngoại trừ điều này ibm_db2 điều mới mẻ mà tôi muốn sử dụng để ai đó có thể sử dụng GUI để sửa đổi DB2. (Tôi đã thử một tập lệnh php nhỏ bị lỗi và chỉ ra rằng các hàm ibm_db2 không khả dụng).

Tôi phải đối phó với PHP vài năm một lần, vì vậy xin hãy khai sáng cho tôi ở mức độ rất cơ bản về những gì tôi có thể làm để cho phép truy cập GUI dựa trên web DB2.


120
90% thời gian là /etc/php5/apache2/php.ini
Adam


6
Hạ cấp vì tiền đề của câu hỏi là sai. "KHÔNG có php.ini trên hệ thống của tôi" Không, bạn chỉ đơn giản là không tìm thấy nó. Nói về điều đó, locate php.inisẽ cho bạn biết chỉ trong những khoảnh khắc mà tập tin nằm trên hệ thống của bạn.
Các cuộc đua nhẹ nhàng trong quỹ đạo

1
@Adam: trừ khi nó không phải là PHP5;)
Dòng

2
@line yeah bình luận của tôi không còn phù hợp nữa, mặc dù không nhận ra số lượng upvote!
Adam

Câu trả lời:


466

Cách tốt nhất để tìm thấy điều này là: tạo một tệp php và thêm mã sau đây:

<?php phpinfo(); ?>

và mở nó trong trình duyệt, nó sẽ hiển thị tập tin thực sự đang được đọc!

Cập nhật bởi OP:

  1. Câu trả lời được chấp nhận trước đây có thể sẽ nhanh hơn và thuận tiện hơn cho bạn, nhưng không phải lúc nào cũng đúng. Xem bình luận về câu trả lời đó.
  2. Cũng xin lưu ý thay thế thuận tiện hơn <?php echo php_ini_loaded_file(); ?>được đề cập trong câu trả lời này .

11
Đây phải là câu trả lời được chấp nhận. Nếu bạn đã cài đặt CLI và chạy apache thì nó có thể có tệp ini riêng (như hệ thống của tôi). Sử dụng câu trả lời được chấp nhận sẽ trả về những gì CLI đang sử dụng thay vì apache.
Dan

2
@Dan Vâng, bạn nói đúng. Tôi đang thay đổi câu trả lời được chấp nhận cho câu hỏi này bởi vì vấn đề bạn đề cập cũng gặp phải ai đó trong thực tế (người đã nhận xét về câu trả lời được chấp nhận trước đó). (Nhân tiện, nếu bạn đã nhận xét về câu hỏi tôi sẽ khắc phục vấn đề này sớm hơn.)
necromancer

2
Điều này không hoạt động trên cài đặt của tôi. Typo? Nên là<?php phpinfo(); ?>
svenyonson

9
php -r \@phpinfo\(\)\;hoạt động để tôi php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1lấy thông tin cụ thể
jgraup 2/2/2016

@zylstra Hãy thử:<?php echo php_ini_loaded_file(); ?>
Ates Goral

834

Trên dòng lệnh thực thi:

php --ini

Bạn sẽ nhận được một cái gì đó như:

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

Đó là từ máy dev của tôi. Tuy nhiên, dòng thứ hai là một trong những thú vị. Nếu không có gì được đề cập, hãy xem cái đầu tiên. Đó là con đường, nơi PHP tìm kiếm php.ini.

Bạn có thể grep thông tin tương tự bằng cách sử dụng phpinfo()trong một tập lệnh và gọi nó bằng trình duyệt. Nó được đề cập trong khối đầu tiên của đầu ra. php -ithực hiện tương tự cho dòng lệnh, nhưng nó khá khó chịu.


5
chấp nhận câu trả lời cũ nhất và trước đây đơn giản nhất (SO buộc tôi phải đợi một lúc trước khi chấp nhận). cảm ơn vì sự mở rộng có thể sẽ giúp người tiếp theo tìm kiếm thông tin. đối với tôi, dòng thứ 2 đã nói (không có) và mọi thứ đều hoạt động tốt sau khi đặt tệp php.ini vào đường dẫn trên dòng đầu tiên. cảm ơn!
Necromancer

12
Tôi đã sử dụng lệnh này và chỉnh sửa tệp php.ini mà nó cũng hướng dẫn tôi và các cài đặt PHP của tôi không thay đổi và tôi nhận ra rằng nó không cung cấp cho tôi tệp php.ini chính xác. Tôi đã thử sử dụng hàm PHP phpinfo () và nó cho tôi vị trí chính xác thực sự của php.ini mà tôi cần chỉnh sửa. Tôi nghĩ rằng điều này rất quan trọng và tôi hy vọng điều này sẽ giúp được ai đó.
thecommonthread

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

@thecommonthread Cảm ơn bạn đã chỉ ra vấn đề bạn gặp phải trong thực tế. Tôi đã thay đổi câu trả lời được chấp nhận thành câu trả lời nổi bật khi tạo .phptệp. Nhân tiện, nếu bạn bình luận về câu hỏi thì tôi sẽ được thông báo và tôi có thể khắc phục vấn đề sớm hơn.
Necromancer

5
@Pacerier Điều này không liên quan gì đến các cài đặt PHP khác nhau, nhưng các SAPI khác nhau có thể sử dụng các tệp ini khác nhau. Tôi không sử dụng mô-đun apache, nhưng theo tôi nhớ, tôi nghĩ rằng không có cách nào xung quanh một phpinfo.phptập tin giống như. Với FPM ít nhất bạn có thể sử dụng php5-fpm -i | grep '\.ini'. Thông thường, bạn sử dụng hai hoặc ba lần này và vào cuối ngày bạn biết các tệp đang ở đâu;)
KingCrunch

133

Điều này làm việc cho tôi:

php -i | grep 'php.ini'

Bạn sẽ thấy một cái gì đó như:

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

ps Chỉ nhận đường dẫn php.inin

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

5
Đây chỉ hoạt động, nếu có một php.ini, đó là chính xác những vấn đề: Nếu chẳng có ai, bạn vẫn không biết được nơi để nhìn vào, hoặc nơi để đặt một hình mới.
KingCrunch

Tôi chưa bao giờ gặp tình huống không có tệp php.ini.
coderama

Chạy lệnh này cho tôi Configuration File (php.ini) Path => /usr/lib, nhưng chạy <?php phpinfo(); ?>cho tôi Loaded Configuration File: /etc/php.ini. Vì vậy, phpinfo()đã đáng tin cậy hơn trong trường hợp của tôi.
Leo Galleguillos

2
Đây không phải là hoàn toàn chính xác. Mọi khung công tác sử dụng ngôn ngữ PHP đều có tệp php.ini riêng. Nếu bạn gọi dòng đó từ dòng lệnh, có thể bạn sẽ nhận được một cái gì đó như /var/php5/cli/php.ini không phải là tệp được sử dụng khi chạy PHP trên môi trường web. Đối với tập tin đó, bạn nên xem thư mục apache2.
Andrea Moro

63

Trong loại cửa sổ lệnh

php --ini

Nó sẽ chỉ cho bạn con đường giống như

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

Nếu lệnh trên không hoạt động thì sử dụng lệnh này

echo phpinfo();

33

Lệnh này sẽ giúp bạn tìm thấy nó

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

1
Tôi thích điều này nhiều hơn một số câu trả lời khác. Nó không yêu cầu tôi tạo, định vị tệp php với các nội dung đó và tải trang lên trong trình duyệt.
Andrew Allbright

29

Sử dụng các lệnh sau để tìm php.iniđường dẫn tệp trong 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


hoặc thử cách này

[root@AnyDirectory ~]# php --ini
nó cho thấy kết quả đường dẫn


11
Điều này kém hơn các phương thức như php -i | grep 'php.ini', bởi vì nó tìm thấy bất kỳ php.ini nào và không cho bạn biết cài đặt PHP nào sử dụng. Ngoài ra, nó có thể cho kết quả sai khi locateDB không cập nhật.
lxg 17/2/2016


22

PHP đi kèm với hai hàm riêng để hiển thị tệp cấu hình nào được tải:

Tùy thuộc vào thiết lập của bạn, ApacheCLI có thể sử dụng các tệp ini khác nhau. Đây là hai giải pháp:

Apache:

Chỉ cần thêm phần sau vào tệp php và mở nó trong trình duyệt của bạn

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

CLI:

Sao chép-dán trong thiết bị đầu cuối của bạn:

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

Đánh giá thấp, kỹ lưỡng, và (gần như) câu trả lời đúng. Tôi gần như chuyển câu trả lời này sang câu trả lời đúng nhưng tôi lo lắng rằng php_ini_loaded_filecó thể không phải lúc nào cũng có sẵn.
Necromancer

@zylstra Phiên bản php của bạn là gì? các tài liệu cho php_ini_loaded_filephiên bản php> = 5.2.4
necromancer

@necromancer Không chắc bây giờ. Quên hệ thống nào tôi đang kiểm tra. : /
zylstra

8
find / -name php.ini

Này ... nó làm việc cho tôi!


3
đối với một, nó cần một thời gian; đối với hai, nếu bạn có nhiều hơn một, làm thế nào để bạn biết cái nào thực sự được sử dụng?
Necromancer

1
Đúng, php --inihoạt động, nhưng đây chỉ là một lựa chọn khác :) Thường có một /etc/php5/cli/php.ini /etc/php5/apache2/php.ini /etc/php5/cgi/php.inivà thường cái bạn muốn là khá rõ ràng. (cli, apache, cgi)
Bned_User

Đây không phải là một giải pháp tốt, vì chúng tôi không có ý định tìm tất cả tệp php.ini trên đĩa.

4

Bạn có thể nhận thêm thông tin về các tệp cấu hình của mình bằng cách sử dụng:

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

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

4

Dành cho SAPI: php-fpm

Không cần phải tạo tệp php.info (đây không phải là một chính sách tốt để mọi người đọc thế nào). Trên dòng lệnh:

php-fpm -i | more

Ở đâu đó trong đầu ra của nó, nó sẽ hiển thị dòng này:

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

Dưới đây là một lời giải thích đầy đủ hơn: https://www.cloudinsidr.com/content/how-to-figure-out-your-php-configuration-parameter-without-info-php/


2

Hãy thử một trong những giải pháp này

  1. Trong loại thiết bị đầu cuối của bạn find / -name "php.ini"

  2. Trong loại thiết bị đầu cuối của bạn php -i | grep php.ini. Nó sẽ hiển thị đường dẫn tệp nhưConfiguration File (php.ini) Path => /etc

  3. Nếu bạn có thể truy cập một tệp php của mình, hãy mở nó trong trình chỉnh sửa (notepad) và chèn mã bên dưới vào sau <?php một dòng mớiphpinfo(); Điều này sẽ cho bạn biết vị trí php.ini
  4. Bạn cũng có thể nói chuyện với php trong chế độ tương tác. Chỉ cần gõ php -avào terminal và gõ phpinfo (); sau khi php khởi xướng.

điểm 1, 2 và 4 dễ bị ảnh hưởng bởi nhiều vấn đề cài đặt; đã có câu trả lời tuyệt vời. không cần thêm câu trả lời mà không thêm bất cứ điều gì vào đây.
Necromancer

@necromancer giải thích chi tiết các vấn đề của bạn để nó có ích cho ai đó. Chúng tôi có upvote và downvote cho câu trả lời xấu và không đáng tin và cộng đồng sẽ quyết định.
trân trọng

-1

Có một số cách hợp lệ đã được đề cập để định vị tệp php.ini, nhưng nếu bạn gặp trang này vì bạn muốn làm gì đó với nó trong tập lệnh bash:

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


1
thay vào đó, hãy xem điều này: stackoverflow.com/a/24342463/621338 thay vì gặt nó ra, điều này dễ vỡ nếu văn bản thay đổi, bạn có thể in php chỉ tên tệp và sử dụng nó trong tập lệnh bash mà không có nội dung phức tạp như ở trên.
Necromancer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.