我试图在符号链接式部署后重置PHP opcache.opcache_reset.php我的项目中的文件在wget文档根的符号链接替换后执行:
<?php
clearstatcache(true);
opcache_reset();
Run Code Online (Sandbox Code Playgroud)
尽管如此,仍然使用旧文件.根据opcache_get_status()输出,manual_restarts增加的数量last_restart_time保持最新,但文件路径仍然过时.我需要opcache_reset.php在部署后一分钟左右手动调用以使事情正确.
PHP版本是5.5.6,ZendOpcache是7.0.3-dev.Opcache配置:
opcache.blacklist_filename => no value
opcache.consistency_checks => 0
opcache.dups_fix => Off
opcache.enable => On
opcache.enable_cli => On
opcache.enable_file_override => Off
opcache.error_log => no value
opcache.fast_shutdown => 1
opcache.force_restart_timeout => 180
opcache.inherited_hack => On
opcache.interned_strings_buffer => 8
opcache.load_comments => 1
opcache.log_verbosity_level => 1
opcache.max_accelerated_files => 4000
opcache.max_file_size => 0
opcache.max_wasted_percentage => 5
opcache.memory_consumption => 128
opcache.optimization_level => 0xFFFFFFFF
opcache.preferred_memory_model => no value
opcache.protect_memory …Run Code Online (Sandbox Code Playgroud) 希望有人在这里知道一件事或两件事.
简短的问题
我在命令行上使用phpdoc遇到错误,在PHP 7.0.2上通过pear安装.错误是:
#> 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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
细节
Opcache已启用并opcache.load_comments=1位于我的opcache.ini文件中,分别使用命令:php -i | grep "Opcode"和验证php -i | grep "opcache".在该.ini文件中,我可以通过检查启用并通过该文件禁用opcache来验证是否加载了更改.
话虽如此,如果我opcache.load_comments=1在我的.ini文件中,为什么我仍然会收到此错误?
谢谢!
我用PHP 7安装了最新的XAMPP服务器(更新:还检查了PHP 7.1)(在我的Windows 10系统上).想要使用opcache,所以我启用了它php.ini.
[opcache]
zend_extension=php_opcache.dll
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
Run Code Online (Sandbox Code Playgroud)
现在有了这个改变,几乎每个页面都刷新了,我从Apache得到这个错误:
AH00428: Parent: child process 3748 exited with status 3221226356 -- Restarting.
Run Code Online (Sandbox Code Playgroud)
所以,页面正在加载,并且正在加载...等待Apache再次启动.当我关闭opcache(通过设置opcache.enable=0)时,Apache没有重启,一切正常(当然,省略了较慢的Web应用程序主题).
在启用PHP 5.6的XAMPP上加载应用程序时,一切正常opcache.
编辑(添加GIF图像):
正如您所看到的,有时页面刷新应该如此.但有时它会刷新更长时间,而Apache正在重启.
编辑:
说实话,我放弃了这个应用程序,并在Windows上使用PHP(正在使用PHP <= 5.6)大约10年.现在很难/不可能(现在)使PHP 7.x在该操作系统上运行(使用Opcache).决定使用Ubuntu和使用Docker创建的服务器.一切都更容易配置(特别是使用Docker)并且工作得更快.我建议大家也这样做;).
试图在MAMP中关闭缓存以进行开发,等待缓存在进行小的更改后过期,这会降低我的工作效率.(当我更改为PHP 5.5.3时出现问题,更改回来并没有修复它)
在研究之后,我采取了以下步骤(未成功)禁用缓存:
注释掉php.ini中的OPcache行并重置mamp.(并尝试显示零值)
;zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
; opcache.memory_consumption=0
; opcache.interned_strings_buffer=0
; opcache.max_accelerated_files=0
; opcache.revalidate_freq=0
; opcache.fast_shutdown=1
; opcache.enable_cli=0
Run Code Online (Sandbox Code Playgroud)
添加了PHP标头
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
Run Code Online (Sandbox Code Playgroud)
添加了html标题
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
Run Code Online (Sandbox Code Playgroud)
我还使用谷歌浏览器中的选项在开启开发工具时关闭缓存.
我迷失在这里,想不出我能做的其他事情来禁用缓存.
更改PHP - 或 - HTML代码后,我必须等待约2分钟才能生效.但是,数据库更改似乎立即生效,因此我认为它是服务器端opcache.
我需要禁用MAMP使用的另一个缓存吗?(或另一步?)
我如何告诉Zend Opcache 不要缓存特定目录中的任何文件.例如/var/www/public_html/devzone/*
我用PHP 5.5.13用Zend OPcache v7.0.4-dev
我在PHP 5.6中偶然发现了php函数function_exists()的奇怪行为.问题是,如果我直接将函数名称参数作为字符串提供,则结果与作为变量提供的结果不同.这是代码:
$f='posix_getpwuid';
$r1=function_exists('posix_getpwuid');
$r2=function_exists($f);
echo phpversion() . "\n";
var_dump($r1);
var_dump($r2);
Run Code Online (Sandbox Code Playgroud)
这是结果:
5.6.5
bool(true) # $r1=function_exists('posix_getpwuid');
bool(false) # $r2=function_exists($f);
Run Code Online (Sandbox Code Playgroud)
我希望,在这两种情况下都应该是假的.
当我深入挖掘时,我发现它与OPCache有关.禁用OPCache时,结果很好 - 两个调用都返回false.但是启用了OPCache,在第一次运行时它仍然可以,但在第二次运行时(所以当提供缓存结果时),结果是错误的.
函数posix_getpwuid在disable_functions中的PHP配置中被禁用.使用不存在的函数名进行测试时,结果是正确的.
在PHP 5.5.21中进行测试时,结果很好(有或没有OPCache).
在PHP 5.5和5.6中使用Zend OPcache v7.0.4-dev.
我正在考虑向PHP开发人员提交一个错误,只是想确保我没有错过任何东西.
谢谢.
编辑:还使用新编译的PHP 5.6.6和5.6.7进行测试.操作系统完全更新了CentOS 6.6.5.6.6或5.6.7的结果相同.
PHP构建时没有任何构建选项:
./configure \
--prefix=/usr/local/php/5.6.7-test
Run Code Online (Sandbox Code Playgroud)
与真正简单的php.ini
disable_functions = posix_getpwuid
date.timezone = Europe/Prague
zend_extension=/usr/local/php/5.6.7-test/lib/php/extensions/no-debug-non-zts-20131226/opcache.so
Run Code Online (Sandbox Code Playgroud)
测试脚本:
<?
echo phpversion() . "\n";
$f='posix_getpwuid';
$r1=function_exists('posix_getpwuid');
$r2=function_exists($f);
echo "\n\n";
echo "string: ";
var_dump ($r1);
echo "var. : ";
var_dump …Run Code Online (Sandbox Code Playgroud) 我正在使用Mac High Sierra附带的标准Apache和PHP 7.1(不是Homebrew).但是,看起来这个版本没有启用Opcache,即使它应该是PHP 7的标准配置.它甚至列在phpinfo()"模块作者"下,但没有显示它实际安装的部分.调用opcache_get_status会产生致命错误.
我通过Homebrew安装了扩展程序,并链接了该opcache.so文件.它似乎在CLI上工作,但在Apache中没有.出于某种原因,CLI和Web使用不同的ini文件:
/usr/local/etc/php/7.1/php.ini 用于CLI/etc/php.ini 对于网络CLI正在解析附加文件,包括/usr/local/etc/php/7.1/conf.d/ext-opcache.ini,并php -i显示Opcache.但是phpinfo()在浏览器中没有 - 没有解析额外的ini文件.
我目前有这个/etc/php.ini:
[opcache]
zend_extension="/usr/local/opt/php71-opcache/opcache.so"
opcache.enable=1
Run Code Online (Sandbox Code Playgroud)
但仍然没有.我跟着xdebug的完全相同的过程,它运行良好.我错过了什么?
我想知道使用Homebrew版本的PHP会更容易.但我似乎没有所需的.so文件.各种教程说要把它放在Apache的httpd.conf:
LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so
Run Code Online (Sandbox Code Playgroud)
但该libexec目录不存在.有lib,但非此非彼任何其他目录中有任何.so文件.
我想在 PHP 7.4 的生产服务器上启用opcache 预加载( RFC )。
如果它改变了任何东西,我正在使用Symfony 4。
我有一个很大的网站,取决于APC,主要存储使用apc_add和apc_fetch功能的自定义数据.
似乎APC与PHP 5.4并不完全兼容,并且PHP 5.5内置了Zend OPcache.我有什么替代方法来替换apc_add和apc_fetch功能?
请不要提及memcached,我已经在使用它,但它不适合作为APC的直接替换,因为我正在进行多次apc_fetch调用,因为为此目的,APC比memcached快得多.
感谢您的任何建议和帮助.
编辑:我认为,这表明APCu是不错的选择,但它有稳定性相同的问题(PHP段错误)...有没有其他替代方法如何存储本地用户缓存数据?
我尝试在wamp上启用opcache,但它不起作用.我改变了这样的设置:
[opcache]
zend_extension=C:/wamp/bin/php/php5.5.12/ext/php_opcache.dll
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
Run Code Online (Sandbox Code Playgroud)
我总是在php的扩展名中有opcache的红色感叹号错误吗?一些帮助请
它在phpinfo()中
Zend OPcache
Opcode Caching Up and Running
Optimization Enabled
Startup OK
Shared memory model win32
Cache hits 0
Cache misses 1
Used memory 483608
Free memory 133734120
Wasted memory 0
Cached scripts 1
Cached keys 2
Max keys 7963
OOM restarts 0
Hash keys restarts 0
Manual restarts 0
opcache.blacklist_filename no value no value
opcache.consistency_checks 0 0
opcache.dups_fix Off Off
opcache.enable On On
opcache.enable_cli Off Off
opcache.enable_file_override Off Off
opcache.error_log …Run Code Online (Sandbox Code Playgroud)