Laravel 5显示ErrorException文件写入失败,无法打开流:没有这样的文件或目录

131

我在Laravel 5上有一个项目,我在办公室和家里都用它工作。虽然一切正常,但最近在家里使用时出现了问题。Laravel向我显示了两个ErrorException错误。

file_put_contents(G:\project\storage\framework\views/751d8a0fd8a7d4138c09ceb6a34bb377aa2d6265.php):
failed to open stream: No such file or directory

file_put_contents(G:\project\storage\framework/sessions/aIXycR4LIAUBVIqZu0T590paOMIpV8vfZGIroEp0):
failed to open stream: No such file or directory

我正在使用谷歌搜索问题解决方案,并找到有关正确权限的信息。所有建议都是关于Linux,但我在办公室和家里都使用Windows。

当我尝试清除应用程序缓存和查看缓存时,artisan告诉我-......已清除。但缓存数据和视图仍然存在于存储中。

我该如何解决这个问题?


7
你可以尝试清除缓存。 "php artisan cache:clear" 我使用的是Linux系统,不太确定在Windows上需要什么权限,但请检查文件夹属性是否为只读(右击文件夹->属性)。 - educolo
@educolo 我认为问题不在于目录权限,因为几个月前它还是可以的。 - Evgeniy
这解决了我的问题 https://dev59.com/ZVkT5IYBdhLWcg3wPdGU#72911821 - Nelson Katale
27个回答

216

解决这个问题的最佳方式是,进入目录laravel/bootstrap/cache,并删除config.php文件。或者您也可以将其重命名为config.php.old,这样也可以解决问题。


14
是的,这会有所帮助,但清除缓存也能达到相同效果。在 Vagrant Box 外运行 php artisan config:cache 命令将重新构建应用程序的路径。当我们在 Vagrant Box 内运行应用程序时,路径与例如 Dusk 测试的路径不同。 - George Mylonas
1
配置:缓存由于某些原因未能修复。 - Andrew
对于那些无法通过SSH访问的人或者一般用户,应该保持代码的清晰、简单和直接。非常好的答案! - levi
清除配置(config:clear)对我来说很有效,此外重命名文件也可以起作用。 - Mohammed Omer
我尝试了5次php artisan config:cache,但都没有成功,但是从laravel/bootstrap/cache中删除config.php就解决了问题。 - CarlosZ
显示剩余6条评论

84

作为生产部署例行程序的一部分,建议您通常运行php artisan config:cache命令。针对您的问题,我建议您重新创建缓存文件,以加快配置加载速度。

要执行此操作,请在命令行中运行以下 Artisan 命令:

  • php artisan cache:clear
  • php artisan config:cache

您可以通过将以下内容添加到路由中来以编程方式执行该命令:

Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    $exitCode = Artisan::call('config:cache');
    return 'DONE'; //Return anything
});

然后从您的浏览器中调用 clear-cache 路由。


从 Laravel 8 开始,config:clear 命令既清除配置缓存又清除缓存,因此无需运行两个不同的命令。 - Hashim Aziz

66

经过一些研究,我了解到 - 我有非常相似但根项目位置不同的问题,并且它被缓存在 /bootstrap/cache 中。清除缓存后,项目启动了。


希望我早点看到这个,因为它是我关于缺失服务提供者的问题的答案:https://stackoverflow.com/questions/58192052/laravel-spark-google2fa-provider-class-not-found-after-spark-update-to-v9-0 - j3py

24

当我将项目从服务器转移到本地时,实际上我遇到了这个问题。

storage/framework

文件夹中需要四个基本文件夹:cache,sessions,testing,views。

在我的情况下,sessions文件夹没有出现,可能是因为被 gitignore 忽略了。

因此,我手动创建了session文件夹,并刷新浏览器,然后它就正常工作了。

所以如果缺少任何一个文件夹,只需删除它即可解决此问题。


14

我通过创建 storage\framework\sessions 文件夹来解决了这个问题。


1
这个文件夹之前在这个路径里已经存在了,我只是清空了它,问题就解决了。 - ParisaN

9

在Windows上使用Apache和WSL

这是一个愚蠢的错误,在其他答案中与众不同,但我会添加它,因为我遇到过。

如果您使用WSL(Windows上的Linux Bash)来管理Laravel应用程序,并且同时使用Windows Apache运行服务器,则在WSL中运行任何缓存命令将会将Linux路径而非Windows路径存储到会话和其他文件夹中。

解决方案

只需在Powershell而不是WSL中运行缓存清除命令即可解决问题。

$ php artisan optimize

足够我使用了。

我遇到了同样的问题。我正在Windows上运行,同时在VMWare虚拟机上运行Linux实例。这使我能够在Windows和Linux上进行测试,但是当我在Windows上运行php artisan config:cache命令时,我的Linux将不再加载应用程序的网页。进入bootstrap/cache文件夹并删除那里的config.php文件解决了这个问题。 - David Tran

7

这种问题通常发生在将服务器迁移到另一个位置或将文件夹移动到另一个位置时。当文件夹与缓存和配置(文件名)不同时,Laravel会保留它们,从而导致此类问题。

解决方案:运行以下命令:

php artisan config:cache

https://laravel.com/docs/5.6/configuration#configuration-caching


6

尝试使用以下命令,这些命令对于解决这些错误非常有用:

path\project\storage\framework\views...

php artisan view:clear

路径\项目\存储\框架/会话...

php artisan config:cache

2
如果在已经有多个赞同答案的情况下发布新的答案,您应该添加更多的解释,以便其他人可以从您的答案中学习。 - Nico Haase

4

如果您使用共享主机且没有命令行访问权限,只需导航到 laravel/bootstrap/cache 文件夹并删除(或重命名)config.php


4
我删除了文件 /public_html/bootstrap/cache/config.php,然后运行了php artisan config:cache

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