分享到: 分享到QQ  分享到Twitter

作者: kideny    访问次数: 242 创建时间: 2022-10-16 16:00:14 更新时间: 2024-03-30 00:01:57

这两天遇到一个很恶心的问题,花了我很久才排查出真正的原因。就是项目的框架从Phalcon4.1升级为Phalcon5以后,打开首页出现File not found的报错,报错代码404。

 

一开始一直以为是Caddy2的问题

 

由于打开首页就报错404,文件没找到。所以,我以为是框架升级以后,路由变动导致找不到文件。我一直在改Caddy2的配置文件,Caddy2的配置文件在Phalcon4下面是好好的,不应该会存在问题的。不停的修改php-fpm代理的语句,还有伪静态的规则,结果自然是没有办法解决任何问题的。我在Phalcon4下面使用的伪静态规则,就是把路由交给框架来处理了。所以,如果找不到文件,其实不是Caddy2的问题了,就是框架本身的问题。

 

项目代码任何php文件都无法打印任何信息

 

这个问题最恶心的就是,当你使用类库提供的dd命令打印任何php的报错信息,都不会给你打印任何报错信息。所以,虽然知道是框架的问题,但是你真的很难排查,简直就是无头的苍蝇啊。

相当于你面临一起恶性案件的时候,没有任何线索。

 

突发奇想终于找到问题所在

 

就在我一筹莫展之际,我开始排查项目各个目录的权限。我拿新服务器的文件权限,和老的稳定运行的文件权限挨个对比。把权限一一改正之后,首页终于出现在我面前。404的问题,终于解决了。

实际上就是我用来缓存静态文件的目录,权限不对导致的。在我的项目里,这个目录是自定义的。Phalcon框架就是这样一个框架,很多东西需要自己定义。

我是把项目的静态文件缓存到/cache/volt目录,这个目录由于缺乏权限,导致用户不可读。所以造成所有页面都404,而且没有任何报错的问题。

 

模板文件的缓存路劲,权限应该自动设置为777

 

默认文件的缓存路径,是有项目的代码来设置的。在官方的文档里,Phalcon5已经添加了类似的案例代码,地址在https://docs.phalcon.io/5.0/en/volt。

cache目录需要把权限设置为777,这样就不需要手动去服务器设置了。

 

总结

 

至此这个问题,就彻底搞清楚了。由于服务器的模板文件缓存路径的权限设置不对,导致的错误。

还有一个办法,就是通过git同步这个目录。如果你的开发环境是类unix系统,这个权限也是会自动同步的。如果是像我这样的windows下开发,那就只能改代码了。

 

季度最有价值文章

月度最有价值文章

帖子投票

名称 是否有价值
kideny

投票统计

是否原创: 100 %

100 % Complete (success)

是否有价值: 100 %

100% Complete

是否有素质: 100 %

100% Complete (warning)

是否合法: 100 %

100% Complete

   群组工具