Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 开发中的larvel和view缓存——can';我现在看不到变化_Php_Caching_Laravel_Laravel 4 - Fatal编程技术网

Php 开发中的larvel和view缓存——can';我现在看不到变化

Php 开发中的larvel和view缓存——can';我现在看不到变化,php,caching,laravel,laravel-4,Php,Caching,Laravel,Laravel 4,我和一些朋友决定开始做一个项目,我们遇到了拉威尔,认为这可能是一个很好的工具。我们开始在本地使用它来开发我们的一些页面,并注意到一些奇怪的东西 当我们用不同的信息更新一个视图时,视图信息改变大约需要5到10分钟。就像Laravel正在缓存视图并在其上放置TTL一样 我知道这不是我在本地web服务器上做的任何事情,因为我使用过其他框架,我从未遇到过这个问题 在搜索互联网时,我找不到一个关于如何禁用此功能的好答案。我想使用Laravel,但如果每次我想进行更改时需要一段时间才能更新我的视图,我会发现

我和一些朋友决定开始做一个项目,我们遇到了拉威尔,认为这可能是一个很好的工具。我们开始在本地使用它来开发我们的一些页面,并注意到一些奇怪的东西

当我们用不同的信息更新一个视图时,视图信息改变大约需要5到10分钟。就像Laravel正在缓存视图并在其上放置TTL一样

我知道这不是我在本地web服务器上做的任何事情,因为我使用过其他框架,我从未遇到过这个问题

在搜索互联网时,我找不到一个关于如何禁用此功能的好答案。我想使用Laravel,但如果每次我想进行更改时需要一段时间才能更新我的视图,我会发现它毫无价值。事实上,这听起来适得其反

有没有办法禁用此功能?为什么我的观点要花上一辈子的时间才能立即更新?

laravel IRC频道是上帝派来的。这与拉威尔的行为毫无关系。这实际上是PHP5.5正在做的事情

之所以如此令人困惑,是因为我从5.3升级了PHP版本,但从未遇到过这个问题

在.ini文件中,需要调整OPcache设置。对我来说,这些设置从.ini文件的第1087行开始,看起来像这样:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
请特别注意
opcache.revalidate\u freq=60
。这就是使视图缓存的真正原因。如果这不是所需的行为,请将该值设置为
0
,您的视图将在每次更改时更新。耶

编辑2014年8月21日


正如Matt在下面提到的,请确保重新启动web服务器,以便在更改.ini文件后看到更改生效。

由于上载的图像未刷新,我在尝试避免在管理员中缓存时遇到了相同的问题。我不建议为所有php应用禁用缓存,您可以通过更改标题来实现。在
app/filters.php
中添加/编辑此函数:

Route::filter('after', function($response)
{
    // No caching for pages, you can do some checks before
    $response->header("Pragma", "no-cache");
    $response->header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
});

对于较新版本的PHP,opcache不起作用。这就是我使用的(在app/filters.php中):


这可能根本不是缓存问题,与Laravel、Apache或PHP没有任何关系。如果要将文件共享到虚拟机(如Vagrant)中,请确保编辑器在写入文件时未使用“原子保存”

要测试这一点,请使用多个不同的文本编辑器对关注的文件进行小编辑(单个字符)。从实现原子保存的编辑器保存的更改可能不会被VM的文件系统注意到

我在Mac上用Sublime Text 3进行编辑,将文件保存到一个文件夹中,该文件夹通过NFS安装到一个流浪的虚拟机中。通过Gulp在本地文件系统上监视文件,并且每当文件发生更改时,就会从Vagrant主机请求livereload刷新

使用默认的
atomic\u save:true
更改带有升华文本3的单个字符会触发更改,但不会提供更新的文件。在Vim、TextEdit、Sublime Text 2和TextWrangler中进行编辑都会触发更新并提供更新的文件内容。切换到
atomic\u saves:false
会将Supreme Text 3与其他编辑器内联,触发更新并提供正确的文件

升华文本3的默认首选项包括以下注释:

// Save via writing to an alternate file, and then renaming it over the
// original file.
"atomic_save": true,
问题可能与将更改写入不受监视的tempfile有关,然后该tempfile将替换受监视的文件。修改发生在写入tempfile时,而不是在它替换我们正在查看的文件时,因此不会触发更新。有NFS缓存或ValualBox的NFS网关的东西,在中间有很多东西。p>
在发现这仅仅是一个编辑器设置之前,很多时间都被浪费在处理opcache、apachemods和Laravel黑客上

如果您使用的是虚拟机(如Vagrant),并且它通过NFS从主机共享文件,另一种可能性是NFS正在缓存修改时间。这将导致Laravel认为缓存的编译模板仍然是新的。这就是我今天遇到的问题,我通过添加NFS装载选项
lookupcache=none
解决了这个问题(以及gulp watch没有注意到样式表和javascript源文件正在更改的相关问题)


我在这里写到:

我还必须调整日期/时间

我正在使用phpStorm将我的文件()与VirtualBox Laravel Homestead同步。除了
opcache.revalidate\u freq=0
fix之外,我还必须确保Homestead VM的日期/时间早于主机操作系统。否则,系统不会认为有任何变化

在ubuntu中,重新配置tzdata并设置时区。然后,如果您的主机操作系统当前为上午11:01:00,请将VM设置为稍早的时间
sudo date--set 11:00:50


然后
sudo nginx重新启动
。工作得很有魅力

此外,别忘了这是从:

“如果禁用opcache.validate_时间戳,则忽略此配置指令。”


我也是这样。

罗伯特·罗萨斯可能已经读过这个答案了,但说真的??除了黑客,没有别的办法吗??这听起来不太对。我读的所有帖子,都提到了黑客,甚至在laravel论坛上……也许那些laravel的家伙看到了这一点,就像一个功能XD一样,这个问题是否与刀片模板的缓存或渲染视图上的实际内容有关?默认情况下,Laravel不缓存呈现的内容,只缓存blade编译(到php)的模板。这应该在编辑后自动重新编译。检查此请求对某些人来说可能是显而易见的,但请确保重新启动您的Web服务器(即apache或您正在使用的任何服务器)。或者,这些更改不会生效。你知道为什么会在PHP5.4上发生这种情况吗?我看不出有什么问题
// Save via writing to an alternate file, and then renaming it over the
// original file.
"atomic_save": true,