PHPDocumentor 2和PHP 7在Doctrine中使用opcache存在问题

14

希望这里有人对此了解一些。

简短问题

我在使用通过pear安装在PHP 7.0.2上的phpdoc命令行时遇到了一个错误。错误信息如下:

#> phpdoc
PHP Fatal error:  Uncaught Doctrine\Common\Annotations\AnnotationException: 
You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1. 
in /usr/local/php5-7.0.2-20160108-102134/lib/php/phpDocumentor/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:193

我该如何修复这个错误?

细节

Opcache已启用,并且opcache.load_comments=1在我的opcache.ini文件中,使用命令php -i | grep "Opcode"php -i | grep "opcache"进行验证。通过检查该.ini文件,我可以验证更改是否被加载,通过该文件启用和禁用opcache。

话虽如此,如果我在我的.ini文件中有opcache.load_comments=1,为什么我仍然会收到此错误?

谢谢!

5个回答

16

在使用PHPDocumentor的PHAR版本时,我遇到了相同的问题。该PHAR包含一个已过时的Doctrine Annotations版本。

旧版注释引用了php.ini中不存在的opcache.load_comments设置,这在PHP 7中不存在:

Annotations的最新版本已经解决了这个问题:

目前,通过执行composer require --dev phpdocumentor/phpdocumentor使用composer版本的PHPDocumentor已为我解决了问题。


1
现在这就说得通了。PHP 7在ini文件中不再有这个选项,这就是原因。目前我已经使用PHAR和pecl进行了设置,所以如果我使用composer(我目前正在使用),它会在我当前使用的PHP版本中安装phpdocumentor吗?在输入命令之前,我只是想确认一下。 - Paul Carlton

13

您也可以在不手动切换供应商目录内容的情况下使用Composer。只需使用:

composer require doctrine/annotations

要拥有最新版本的doctrine/annotations(至少1.2.5可以解决这个问题)


1
在Symfony 2.6中,对我来说完全有效。 - Damaged Organic
  • 安装doctrine/annotations (v1.4.0)无法正常工作。通过使用Doctrine注释补丁1.2.5解决。
- Vasilii Suricov

7

Ubuntu 16.04默认版本为phpDocumentor 2.8.5。但是,直到2.9版本才添加了对php7的支持。我通过在命令行中使用以下命令使其正常工作:

sudo apt-get install php7.0-mbstring
wget https://github.com/phpDocumentor/phpDocumentor2/releases/download/v2.9.0/phpDocumentor.phar
chmod +x phpDocumentor.phar
sudo mv phpDocumentor.phar /usr/local/bin/phpDocumentor-2.9.phar
sudo ln -s /usr/local/bin/phpDocumentor-2.9.phar /usr/local/bin/phpdoc

如果你是通过pear安装phpDocumentor的,请使用以下方式卸载它:
sudo pear uninstall phpdoc/phpDocumentor

1
迄今为止最好的DevOps系统绝对是这个答案。它不需要运行临时composer命令来拉取62M的composer源码,并需要深入链接到最终命令路径。这个简单的脚本给我提供了一个可用的.phar文件,将其放在我们的7.0.10 Docker构建中完美运行,没有任何问题!谢谢! - Joey T

4
感谢 deepdivedylan 的链接。然而,composer require --dev phpdocumentor/phpdocumentor 并未解决我的问题。但是通过阅读链接并下载doctrine注释补丁1.2.5可以解决问题。只需下载存档并将 vendor/doctrine/annotations 文件夹替换为其内容即可。

致命错误:在/home/vasu/work/hosting/prekkha/app/autoload.php:11中未找到Doctrine\Common\Annotations\AnnotationRegistry类。 - Vasilii Suricov
解决方案:不是“替换文件夹”,而是“替换内容”-合并 - Vasilii Suricov

0

你可以从 GitHub 发布页面 下载最新版本的phar。

网站上的链接是旧版本。


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