Làm cách nào để tìm tệp php.ini được sử dụng bởi dòng lệnh?


389

Tôi cần kích hoạt pdo_mysql trong môi trường EasyPhp của mình, vì vậy tôi đã truy cập tệp php.ini và không ghi chú dòng sau:

extension=php_pdo_mysql.dll

Thật không may, tôi vẫn có cùng một vấn đề. Tôi đang sử dụng CLI vì vậy tôi cho rằng tôi cần xác định vị trí tệp php.ini được CLI sử dụng. Làm thế nào tôi có thể tìm thấy nó?



@sjas Điều đó không sai, nó đúng và cho bạn biết đường dẫn của php.ini đã tải trong cli.
SaidbakR

Câu trả lời:


951

Chỉ cần chạy php --inivà tìm kiếm Loaded Configuration Fileđầu ra cho vị trí php.iniđược sử dụng bởi CLI của bạn


5
@Mchl Tôi sẽ upvote bạn, nhưng tôi nghĩ bạn nên đăng câu trả lời với grep trong dòng.
Jim W.

9
@BradFJacobs tại sao sử dụng grep khi đây là nền tảng chéo?
Garet Claborn

Nhưng điều này không chỉ cho bạn thấy cái được tải khi sử dụng PHP thông qua CLI (vì bạn đang chạy lệnh từ đó).
Antony D'Andrea

1
@ AntonyD'Andrea: đó chính xác là những gì câu hỏi về. Xem? Nó hiện trạng thái ngay cả trong tiêu đề: Làm thế nào để tìm tệp php.ini được sử dụng bởi dòng lệnh ?
Mchl

đây không phải là câu trả lời của tôi ... trong trường hợp của tôi, tôi gõ sudo find / -iname php.ini và nó tìm thấy /etc/php/7.0/apache2/php.iniđúng vị trí của tệp cấu hình php.ini đúng của máy mà tôi không tìm thấy bởi php --inihoặc php -i | grep php.ini(cả hai được tìm thấy /etc/php/7.0/cli/php.ini)
NineCattoRules

366

Bạn có thể nhận được đầy đủ phpinfo()bằng cách sử dụng:

php -i 

Và, trong đó, có php.initập tin được sử dụng:

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

Trên Windows sử dụng findthay thế:

php -i|find/i"configuration file"

12
Sau đó, cá thể php này không sử dụng php.ini nào ngoài các giá trị mặc định. Các Configuration Filedòng phpinfo () cho thấy nơi cuối cùng nơi php đã tìm kiếm một tập tin này. Đó có thể là nơi tìm thấy một tệp như vậy hoặc tùy chọn cuối cùng xảy ra là% HỆ THỐNG% trên các cửa sổ.
VolkerK

2
@pascal: php -i | find "Configuration file"nên hoạt động trên Windows. Chắc chắn không mạnh bằng grep, nhưng findsẽ thực hiện tìm kiếm chuỗi cơ bản cho bạn. Tất nhiên, nếu php -i chuyển đầu ra của nó thành stderr, thì có lẽ bạn là SOL.
Marc B

2
findmặc định php -i | find "Configuration File"là phân biệt chữ hoa chữ thường , vì vậy nó phải hoàn hảo ( ) hoặc không phân biệt chữ hoa chữ thường ( php -i | find /i "Configuration file"- lưu ý /icờ).
deizel

9
Xem xét thêm php --ininhư là một thay thế; có sẵn kể từ PHP 5.2.3 :)
Ja͢ck

2
Không ai đề cập, có thể lấy giá trị đó từ tập lệnh bằng cách gọi php_ini_loaded_file và khi cần php_ini_scned_files
Radek Benkel

16

Bạn có thể dùng get_cfg_var ('cfg_file_path') cho điều đó:

Để kiểm tra xem hệ thống có đang sử dụng tệp cấu hình hay không, hãy thử truy xuất giá trị của cài đặt cấu hình cfg_file_path. Nếu điều này là có sẵn, một tập tin cấu hình đang được sử dụng.
Không giống như phpinfo () nó sẽ cho biết nếu nó không tìm thấy / sử dụng php.ini.

var_dump( get_cfg_var('cfg_file_path') );

Và bạn có thể chỉ cần đặt vị trí của php.ini . Bạn đang sử dụng phiên bản dòng lệnh, vì vậy sử dụng -ctham số bạn có thể chỉ định vị trí, ví dụ:

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

13

Chạy php --initrong thiết bị đầu cuối của bạn, bạn sẽ nhận được tất cả các chi tiết về các tập tin 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

Để biết thêm, sử dụng lệnh trợ giúp php --helpNó sẽ hiển thị tất cả các tùy chọn có thể.


8

Đôi khi mọi thứ không phải lúc nào cũng như khi nói đến các tệp cấu hình nói chung. Vì vậy, ở đây tôi đang áp dụng các phương pháp thông thường của mình để khám phá những tập tin nào được mở bởi một quy trình.

Tôi sử dụng một chương trình dòng lệnh rất mạnh mẽ và hữu ích được gọi là strace để cho tôi thấy những gì thực sự xảy ra sau lưng tôi!

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

Strace đào ra các cuộc gọi kernel (hệ thống) mà chương trình của bạn thực hiện và kết xuất đầu ra vào tệp được chỉ định bởi -o

Thật dễ dàng để sử dụng grep để tìm kiếm sự xuất hiện của php.ini trong nhật ký này. Đó là khá rõ ràng nhìn vào phản ứng điển hình sau đây để xem những gì đang xảy ra.

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đã cho tôi kết quả không chính xác, nhưng điều này là hoàn toàn tốt. Cảm ơn bạn!
Dmitry Ginzburg

7

Nếu bạn muốn tất cả các tệp cấu hình được tải, điều này sẽ cho bạn biết:

php -i | grep "\.ini"

Một số hệ thống tải mọi thứ từ nhiều hơn một tệp ini. Trên hệ thống Ubuntu của tôi, nó trông như thế này:

$  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

Trên OSX Mavericks, đang chạy:

$ php -i | grep 'Configuration File'

Trả lại:

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

Trong /etc/thư mục là:

php.ini.default

(cũng như php-fpm.conf.default)

Tôi đã có thể sao chép php.ini.defaultvào php.ini, thêm date.timezone = "US/Central"vào đầu (ngay bên dưới [php]) và vấn đề được giải quyết.

(Ít nhất là thông báo lỗi đã biến mất.)


5

Nếu bạn cần chuyển nó sang một ứng dụng khác, bạn có thể làm một cái gì đó như:

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

chỉ trả về đường dẫn php -c $(php --ini | grep Loaded | cut -d" " -f12)sẽ vượt qua trong tập tin cấu hình (hữu ích cho fpm)


3

Từ những gì tôi nhớ khi tôi sử dụng EasyPHP, tệp php.ini nằm trong C:\Windows\hoặcC:\Windows\System32


2
Phải nó nói với tôi C: \ WINDOWS. Nhưng tôi đã không tìm thấy nó ở đó một cách nghiêm túc!
Amokrane Chentir

2

Làm

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

Điều này sẽ xuất ra tất cả các tập tin có tên php.ini.

Tìm hiểu xem cái nào bạn đang sử dụng, thường apache2/php.ini


Điều này không hoạt động nếu không có tệp php.ini (một số bộ chứa docker). Do đó, câu trả lời được chấp nhận là phù hợp hơn.
Manuel Manhart

myyyyyyyyyy
doc ngày

@emilioestevez * người phụ nữ
willsmanley

1

Trong tệp php.ini của bạn, đặt thư mục tiện ích mở rộng của bạn, ví dụ:

extension_dir = "C:/php/ext/"

Bạn sẽ thấy trong thư mục PHP của bạn có một thư mục ext với tất cả các dll và phần mở rộng.


0

Lưu đầu ra CLI phpinfo vào tệp cục bộ:

php -i >> phpinfo-cli.txt

0

Trong docker container phpmyadmin / phpmyadmin không có tệp php.ini. Nhưng có hai tệp: php.ini-debug và php.ini-sản xuất

Để giải quyết vấn đề, chỉ cần đổi tên một trong các tệp thành php.ini và khởi động lại bộ chứa docker.


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.