在Mac OS X Lion中,PHP.ini文件在哪里?

315

我想在我的 Mac 上运行一些 PHP 代码,取消注释 httpd.conf 文件,启用 Web 分享,安装了 MySQL 等等。 但是我找不到我的 PHP 文件,最重要的是 PHP.ini 配置文件。

在我的旧机器上,PHP.ini 文件的位置在 /usr/local/php5/lib 目录下。 但是在 /usr/local 目录下找不到 php5 文件夹。

我需要获取一个软件包还是我在错误的地方寻找?

我的操作系统版本为 OS X 10.7.3,PHP 版本为 5.3.8,Apache/2.2.21。


11
定位php.ini文件。 - Pekka
17
需要补充的是,你需要从phpinfo()或者php --ini(在终端窗口运行)中查找“Loaded Configuration File”设置。因为如果没有php.ini文件,这两个选项都会将配置文件路径报告为“/etc”(至少在我的OS X 10.8安装中是这样)。如果没有加载任何配置文件,则应尝试mac的回答。 - Jason S
/usr/local/php5 是熵.卓越网和liip.ch的php安装程序的安装位置,它从未是苹果php安装的位置。 - heiglandreas
13
执行此命令 php -i | grep php.ini,以查找当前 PHP 配置文件的位置。 - user8389458
1
在终端输入 php -r "phpinfo();" - user1502826
13个回答

546

要在您的计算机上找到 ini 文件,请打开 Terminal.app 并运行以下命令:

php --ini
如果你需要一份 Lion 的模板,请尝试使用这个

2
我现在没有加载php.ini。基本上,我正在寻找带有“推荐”的php.ini模板的目录。 - Orun

413

如果存在的话,您可以在 /private/etc 中找到它,否则:

sudo cp /private/etc/php.ini.default /private/etc/php.ini

自从MacOS X 10.5起,PHP5已默认包含在其中,并且php.ini文件的位置如上所示。如果您手动安装了它,则在升级到Lion时不应被删除;很奇怪... - mac
2
我的 Lion 机器上的 php.ini.default 文件在没有 php.ini 的情况下并不符合所有默认设置。特别是 short_tags 是关闭的,error_reporting、log_errors 和一些次要设置也有所不同。您需要比较创建 php.ini 前后的 php -i 输出。 - spoulson
1
在我的 Mac 上,我有一个文件位于 /private/etc/php.ini,但是 PHP 似乎忽略了我在那里所做的任何更改,发现它实际上使用的是 /usr/local/php5/lib/php.ini 中的文件。 - Kit Ramos
这个答案不好,因为php.ini的位置取决于PHP的安装方式、OS X版本以及用户如何自定义安装。 - ericn
2
这个答案指导我朝着正确的方向。cp php.ini.default > php.ini,CLI 加载了 /etc/php.ini 的配置文件。在执行 php -i | grep php.ini 命令后进行检查。 - bpile
显示剩余2条评论

54
在终端中执行php -i | grep php.ini命令。这应该会给你一些线索 ;)

29

来自@Cronk和@Justin的答案让我在Mac OS X 10.9 Mavericks上接近了解决方法。实际上,在我的系统上,/etc/php.ini文件完全丢失了,直到我在Web服务器上运行phpinfo()时才观察到没有配置文件。从/etc/php.ini.default复制文件并将mcrypt.so库的完全限定路径添加到配置文件中解决了问题:

cp /etc/php.ini.default /etc/php.ini

然后在/etc/php.ini中添加以下行(使用正确的路径指向您的mcrypt.so文件):

extension="/usr/local/Cellar/php54-mcrypt/5.4.29/mcrypt.so"

然后重启Apache2:

apachectl restart

哇塞,你是我的英雄!!感谢你提供使用mcrypt的完整路径的想法! - Hese

27
如先前所述,php --ini 命令会告诉您 PHP 期望找到 php.ini 文件的位置。
对于标准安装来说,它可能会查找 /etc/php.ini
如果您使用了 MacPorts,那么 PHP 可能会查找 /opt/local/etc/php5/php.ini

7
etc 是一个指向 private/etc 的链接:/etc -> private/etc。 - pm_labs

25

在任何文件中运行phpinfo()并会告诉你它的位置,下面是一张截图。

输入图片说明


3
这是最佳选择,因为你可能会在其他“默认”文件夹中找到php.ini的副本,但这种方法将告诉你它实际使用的那一个,这样你就可以避免修改后php似乎完全没有察觉而导致的困惑和挫败感。 - Kit Ramos
你也可以通过运行 php -a 在你的 shell 中打开 php REPL,然后运行 phpinfo(); - metakermit

16

我有多个PHP实例在运行,所以其他答案对我没有用。这个方法可以解决问题:

创建一个PHP文件并在浏览器中打开其本地URL:

<?php phpinfo(); ?>

PHP.INI的路径将会显示在靠近顶部的位置。


8

1- 查找 .ini 文件路径

打开终端并运行以下命令

php --ini

2- 复制此路径 /usr/local/etc/php/7.4/php.ini 并通过命令打开

nano /usr/local/etc/php/7.4/php.ini

3- 使用键盘组合键"Ctrl+X"退出nano编辑器,并保存修改。

4- 完成后运行apachectl restart来重启Apache服务器。


这个解决方案适用于Mac用户,因为找到pho.ini文件很困难,所以通过这个解决方案我可以在终端中编辑php.ini。 - Nivaldo Quiñones

3
这个帖子有点老了,但我想进一步澄清一下。
如果您的系统安装了多个PHP版本(如我的系统),则使用命令行工具得到的结果可能与Web服务器实际使用的不同。 如果您想知道Web服务器使用的PHP版本,请只使用使用“phpinfo()”函数的Web页面中收集的信息。
例如,在我的系统上,两种不同方法报告的版本如下:
命令行:5.3.26 Web:5.3.13
对于php.ini文件路径,情况也有所不同:
命令行:/private/etc/php.ini Web:/long/path/to/the/file/php.ini
您可以使用以下命令找到所有可能的php.ini文件:
find / -name php.ini 2>&1 | grep -v "denied" | grep -v "directory"
(“2>&1”和“grep”元素只限制命令的输出为有用的信息,即去除错误消息)
在我的系统中,我发现了3个INI文件。 因为我想知道Web服务器正在使用哪个INI文件,所以我知道应该使用从Web页面结果返回的路径。 我对列在那里的php.ini文件进行了更改,重新启动了Apache,并重新运行了Web页面; 新的编辑内容显示在那里。
要重启Apache:
sudo apachectl -k restart
- J

3
在OSX/MacOS中,请在终端窗口执行以下操作:
输入php --ini命令并按回车键以在提示符下运行。
报告类似的内容: 配置文件(php.ini)路径:/etc 已加载的配置文件:(无) 扫描其他.ini文件的路径: /Library/Server/Web/Config/php 已解析的其他.ini文件:(无)
......这是因为/etc中有一个名为/etc/php.ini.default的文件,它只是一个示例,显示该文件未被使用。您需要将该文件复制到php期望的名称,以便您可以编辑它,就像这样:
输入以下命令:
$  sudo cp /etc/php.ini.default /etc/php.ini       (and enter your password)

如果您现在运行 php --ini 命令,您会看到它现在已经看到了您的新文件:

在提示符处输入 php --ini,将会返回如下报告:

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /Library/Server/Web/Config/php
Additional .ini files parsed:      (none)

现在编辑/etc/php.ini - 您需要确保以下行(不是以半角分号 ';' 开头的同一行)完全如下所示: log_errors = On (这将启动日志记录引擎)

然后,在此部分中:

; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog

如果你想要将日志记录到syslog (或在Windows上的Windows事件日志), 那么 ;error_log = syslog 应该变成 error_log = syslog 然而, 如果你想要将日志记录到文件,你需要取消注释,即删除前面的分号, 使得 ;error_log = php_errors.log 变成 error_log = php_errors.log, 或者使用完整路径指定文件的位置。
祝好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接