【问题标题】:Inconsistent results with PHP Reflection API与 PHP 反射 API 不一致的结果
【发布时间】:2012-03-12 23:36:30
【问题描述】:

我有一个在 Windows 和 Mac 上都能完美运行的应用程序,它使用 PHP5 Reflection API。

我试图将应用程序部署到 Linux 机器(运行 PHP 5.3.6 的 CentOS 机器 - 生产服务器),却发现 ReflectionMethod::getDocComment() 函数没有返回任何内容。我调查了一会儿,发现行尾是潜在的罪魁祸首。

我使用服务器上的dos2unix 实用程序将行尾全部更改为 Unix 样式,并且脚本可以正常工作。现在是奇怪的部分:它只工作一次。我的意思是,从ReflectionMethod::getDocComment() 返回数据的脚本运行一次,然后(不对磁盘上的文件或代码进行任何修改)它恢复为不工作。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 可以发一下脚本吗?
  • 脚本没有什么奇怪或有趣的地方。它在使用相似环境的两台机器上完美运行:这绝对是ReflectionMethod::getDocComment() 可能没有考虑到的行尾问题。无论如何,这里是脚本:github.com/dannykopping/PHPDocBlock-lite/blob/master/lib/… 它是解析 doc-block cmets 的开源项目的一部分 :)
  • 对于它的价值,朋友建议我研究一下服务器的缓存元素;事实证明,eAccelerator 已启用。我禁用它,重新启动服务器,现在一切正常!这个问题可能与缓存有关吗?在这种情况下,除了禁用 eAccelerator 之外,解决此问题的最佳方法是什么?

标签: php reflection line-endings


【解决方案1】:

您可以像这样在 .htaccess 中使用 php_flag,而不是在全局范围内使用它:

php_flag eaccelerator.enable 0
php_flag eaccelerator.optimizer 0

我遇到了同样的问题,我花了一些时间(3 小时)才弄清楚,因为我没有生产服务器。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2012-11-13
    相关资源
    最近更新 更多