【问题标题】:PHP on Mac OS X - Loading Non-Existent Extensions by Default - Erroneous phpinfo() Results?Mac OS X 上的 PHP - 默认加载不存在的扩展 - 错误的 phpinfo() 结果?
【发布时间】:2010-09-26 23:57:15
【问题描述】:

我在安装的 Mac OS X Snow Leopard 上启用了 PHP 5.3.2 和 Apache 2.2.14,并确认我正在通过调用 phpinfo() 连接到它;

在初始启动时,似乎正在加载所有可能的扩展,因为对 print_r(get_loaded_extensions()) 的调用暗示:

Array
(
    [0] => Core
    [1] => date
    [2] => ereg
    [3] => libxml
    [4] => openssl
    [5] => pcre
    [6] => sqlite3
    [7] => zlib
    [8] => bcmath
    [9] => bz2
    [10] => calendar
    [11] => ctype
    [12] => curl
    [13] => dom
    [14] => hash
    [15] => fileinfo
    [16] => filter
    [17] => ftp
    [18] => gd
    [19] => session
    [20] => iconv
    [21] => json
    [22] => ldap
    [23] => mbstring
    [24] => standard
    [25] => mysqlnd
    [26] => SPL
    [27] => odbc
    [28] => mysqli
    [29] => PDO
    [30] => pdo_mysql
    [31] => pdo_sqlite
    [32] => Phar
    [33] => posix
    [34] => Reflection
    [35] => mysql
    [36] => shmop
    [37] => SimpleXML
    [38] => snmp
    [39] => soap
    [40] => sockets
    [41] => SQLite
    [42] => exif
    [43] => sysvmsg
    [44] => sysvsem
    [45] => sysvshm
    [46] => tokenizer
    [47] => xml
    [48] => xmlreader
    [49] => xmlrpc
    [50] => xmlwriter
    [51] => xsl
    [52] => zip
    [53] => apache2handler
)

当我编辑 php.ini.default 并创建 /private/etc/php.ini 时,我注释掉了所有可用于阻止加载的扩展(现在我只是想获得一个基线)。即使在使用新的 php.ini 信息重新启动 Apache 之后,所有的扩展仍然在加载。我的猜测是,由于没有显式加载任何扩展,PHP 的反应方式与我没有 php.ini 时相同。

让我感到困惑的是,当我尝试查找与“已加载”扩展名关联的库文件时,我找不到 NONE!我以 root 用户身份搜索了我的整个硬盘驱动器,寻找 *.so 库文件的任何痕迹,但没有找到(例如:调用 find / -name 'mysql' 返回没有 php 文件扩展库)。在 /usr/lib/php/extensions/no-debug-non-zts-20090626 目录中只有一个 *.so 文件被列为 php 的 extension_dir。那为什么php会说是成功加载了呢?

这里以 phpinfo() 的 gd 扩展结果为例:http://www.concentricsoft.com/downloads/phpinfo_sc1.jpg

我确认我对 php.ini 文件所做的更改已生效:我将 error_log= 设置为一个文件,并且能够使用对 error_log($string, 0); 的调用对其进行写入

我还没有尝试运行会尝试使用 php 说已加载的任何扩展的代码,所以我想这是我的下一步行动,但我只是想看看是否有其他人解决了这个问题并且如果有怎么办。

【问题讨论】:

  • 这些扩展不需要作为单独的文件驻留在您的硬盘上。它们也可以静态链接到 PHP 二进制文件中。

标签: php apache macos


【解决方案1】:

许多 PHP 扩展可以静态构建,作为 php 可执行文件的一部分,而不是作为共享对象文件。

你甚至可以build PECL extensions statically

【讨论】:

  • 我明白了,所以如果它内置在 php 可执行文件中,那么无论 php.ini 中指定什么,它当然都会加载......这是有道理的。谢谢您的帮助。我只是想确保我不会发疯。
猜你喜欢
  • 2023-03-31
  • 2011-05-02
  • 2011-05-20
  • 2016-04-10
  • 2013-11-01
  • 2013-02-22
  • 2010-12-24
  • 2018-11-24
  • 2010-11-29
相关资源
最近更新 更多