phpUnit 无法识别 getenv/apache_getenv

标签 php phpunit

要从代码库外部的路径加载 ini 文件,我使用 apache 来定义路径,对于 php,我使用 apache_getenv/getenv

似乎 phpunit 不理解 apache_getenv 命令 - 这是一个已知问题吗?除了硬编码路径之外还有其他解决方案吗?

最佳答案

当您从命令行运行 php 时,它不会使用任何 Apache 配置。但您仍然可以访问环境变量。因此,首先更改为在任何地方使用 getenv (而不是 apache_getenv)。然后,如果您从 bash 启动 php,请像这样运行它:

 export MY_CONFIG = "/path/to/my.ini"
 phpunit

每个 bash session 只需导出一次。您可以将其包装在 2 行 bash 脚本中。

这种方法有一个问题,那就是您现在在两个地方进行配置。墨菲定律告诉我们,这两个文件将非常努力地不同步。因此,另一种方法是使用 php.ini (*) 中的自定义条目。然后在您的代码中使用 get_cfg_var获取这些值。请注意,有些人不喜欢这种方法,例如create arbitrary values in php.ini明智地使用它:如果您的机器专用于需要此设置的应用程序,那么它是一个公平的选择。如果它只是众多脚本中的一个,并且在多用户计算机上,那么它是值得怀疑的。

第三种方法是与脚本一起保存的真实 ini 文件的符号链接(symbolic link)。然后你的脚本总是会找到它,无论它是如何启动的。我最喜欢这种方法,但它不是那么动态。我猜想使用环境变量的目的是因为您对不同的虚拟主机使用不同的值,或者类似的东西。

*:确保使用 apache 和 cli 通用的 php.ini 文件:某些设置还有一个仅适用于 apache 和 cli 的配置文件。在 Ubuntu 机器上,我会在/etc/php5/conf.d 下创建一个名为 myconfig.ini 的文件,因为这样更容易维护,并且 apache 和 cli 都使用该目录。

关于phpUnit 无法识别 getenv/apache_getenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815482/

相关文章:

php - 如果 php 脚本想从锁定的表中读取,它会等待吗?

php - 用于向 HTML 文档中的 .js 和 .css 引用添加版本号的正则表达式

PHPUnit_Extensions_Database_Testcase 返回未定义的方法

php - @setUp 和@tearDown 注解 PHPUnit

php - phpunit 是否使用与 MAMP 中配置的不同的 php.ini 文件?

laravel - 如何使用 phpunit 在 laravel 中模拟 Paypal 交易?

PHP/Javascript - 引用引用为空

php - 如何在 Laravel 中构建自动完成多重标记

php - 如何从标签中获取值

php - 有没有办法在 PHPUnit 中测试 STDERR 输出?