使用 zend 读取 php.ini 进行 PHP 扩展(不是 PHP 语言)

Posted

技术标签:

【中文标题】使用 zend 读取 php.ini 进行 PHP 扩展(不是 PHP 语言)【英文标题】:Reading php.ini using zend for PHP extension (not PHP language) 【发布时间】:2010-11-20 06:51:25 【问题描述】:

我正在尝试使用 zend 从 php.ini 读取一些设置。我使用的 API 是

long zend_ini_long(char *name, uint name_length, int orig)

但它总是返回 0。我仔细检查了名称,并确保我在 php.ini 中指定的值大于 0。我还缺少什么吗?

【问题讨论】:

这是我写的代码:long maxwait = zend_ini_long(ZEND_STRL("max_execution_time"), 0); ZEND_STRL(str) 是一个 zend 宏,它解析为 (str), (sizeof(str)-1)。这段代码是用 php 扩展写的(用 C 写的)。 【参考方案1】:
 long maxwait = zend_ini_long("max_execution_time",
     sizeof("max_execution_time"), 0);

问题是 ZEND_STRL 没有返回适合该 API 使用方式的正确长度,所以不要使用它。

我应该补充一点,PHP 内部维护的大多数哈希表都假定 NUL 终止符包含在被哈希字符串的长度中(它是整体二进制安全概念的一部分),这就是我们使用 sizeof( ) 而不是 strlen() 或 sizeof()-1。

【讨论】:

+1,有些函数需要 sizeof(string) 而有些函数需要 sizeof(string) - 1,这是一个令人讨厌的陷阱,之前我被它绊倒了。 好的,现在我正在尝试读取我在 php.ini 中编写的设置。但我无法找回它。它总是返回“”。我正在使用 zend_ini_string(field_name, sizeof(field_name), 0)。它读取一些设置而不是其他设置对我来说很奇怪。我们必须使用某种命名方式吗? 您是在阅读 PHP 自己的设置,还是来自您的扩展程序的设置?如果是后者,您是否在 MINIT 函数中注册了这些 INI 设置? 按照我遵循的教程,我只是在做 PHP_INI_BEGIN 和 PHP_INI_END。在您告诉在 MINIT 函数中注册后,我必须检查其他默认的 php 扩展以查看它们的运行情况。它现在工作正常。非常感谢。【参考方案2】:

你需要阅读 php.ini 文件吗?或许可以通过phpinfo()获得信息?

但是,如果您必须允许“www 用户”读取文件吗?如果您更改权限,它仍然返回 0 吗?

【讨论】:

我实际上是在用 C 编写一个 php 扩展。我已经阅读了几个教程,但他们没有提到任何关于更改权限的内容,因此扩展可以读取 php.ini。知道在哪里可以更改 php xtensions 的权限设置吗? 我在考虑类似“ls -l /etc/php5/apache2/php.ini”之类的东西,然后根据需要使用 chmod。【参考方案3】:

你可以使用标准的php函数:ini_get('var-name');

例子:

ini_get('include_path');

【讨论】:

以上是关于使用 zend 读取 php.ini 进行 PHP 扩展(不是 PHP 语言)的主要内容,如果未能解决你的问题,请参考以下文章

《Zend studio 12 + UPUPW+PHP5.4开发平台配置过程》

php 怎么用zend加密

学习随笔关于php.ini的各项说明-1

黄聪:PHP代码性能加速-开启Zend OPcache-优化CPU

zend framework学习笔记(windows下)

php.ini的opcache配置详解