我需要在EasyPhp环境中启用pdo_mysql,因此转到php.ini文件并取消注释以下行:
extension=php_pdo_mysql.dll
不幸的是我仍然有同样的问题。我正在使用CLI,所以我想我需要找到CLI使用的php.ini文件。我如何找到它?
我需要在EasyPhp环境中启用pdo_mysql,因此转到php.ini文件并取消注释以下行:
extension=php_pdo_mysql.dll
不幸的是我仍然有同样的问题。我正在使用CLI,所以我想我需要找到CLI使用的php.ini文件。我如何找到它?
Answers:
只需运行php --ini
并Loaded Configuration File
在输出中查找php.ini
CLI 所使用的位置
sudo find / -iname php.ini
并找到/etc/php/7.0/apache2/php.ini
了未被(php --ini
或php -i | grep php.ini
两者都找到/etc/php/7.0/cli/php.ini
)的机器的正确php.ini配置文件的正确位置
您可以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"
Configuration File
phpinfo()这一行显示了php查找ini文件的最后一个地方。可以是找到此类文件的位置,也可以是Windows上的最后一个选项恰好是%SYSTEMROOT%。
php -i | find "Configuration file"
应该在Windows上工作。绝对不如grep强大,但find
可以为您进行基本的字符串搜索。当然,如果php -i将其输出转储到stderr,则可能是SOL。
find
默认情况下区分大小写,因此它必须是完美(php -i | find "Configuration File"
)或不区分大小写(php -i | find /i "Configuration file"
-注意/i
标志)。
php --ini
作为替代方案;可用自PHP 5.2.3 :)
您可以为此使用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
php --ini
在您的终端中运行,您将获得有关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
它将显示所有可能的选项。
一般而言,配置文件有时并不总是像看起来那样。所以在这里,我将使用我通常的方法来探索某个进程打开的文件。
我使用了一个非常强大且有用的命令行程序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
php -i
给了我不正确的结果,但是这一点很好。谢谢!
如果要加载所有配置文件,这将告诉您:
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
记得我以前使用EasyPHP时,php.ini文件位于C:\Windows\
或中。C:\Windows\System32
做
find / -type f -name "php.ini"
这将输出所有名为 php.ini
。
找出您正在使用的那个 apache2/php.ini
在docker容器phpmyadmin / phpmyadmin中没有php.ini文件。但是有两个文件:php.ini-debug和php.ini-production
要解决该问题,只需将文件之一重命名为php.ini并重新启动docker容器。
命令行没有使用php.ini。您必须从复制文件到...EasyPHP-<<version>>\apache\php.ini
,而...EasyPHP-<<version>>\php\php.ini
不是在php目录中编辑文件
参考: