overtrue / laravel-wechat

微信 SDK for Laravel, 基于 overtrue/wechat
MIT License
2.88k stars 502 forks source link

请问如何自定义symfony cache的缓存文件夹 #446

Closed Nomia closed 2 years ago

Nomia commented 2 years ago

目前用的Laravel Wechat是4.x版本

EasyWechat的企业微信开放平台模块会把suite_ticket缓存到文件中,但是有很多权限问题,我设置了777仍然写不进tmp

请问有没有什么可以配置,将缓存文件夹配置到storage文件夹中去,或者是否可以用redis来做缓存引擎

image
Nomia commented 2 years ago

另外还有一个问题就是,在不同的环境下读不到同一个缓存文件

问题2:root在命令行模式下访问缓存或者写缓存写到了A文件,可以写入。但是用apache以网络请求的方式,即浏览器GET请求某个地址然后写入缓存是写到了B文件,读也是读的B文件

所以导致suite_ticket在命令行模式下无法获取到。(因为他们读取的文件就不是同一个,所以不可能读到相同的数据)

问题1:当然,首先的问题是apache无法写入,我设置了tmp文件夹777,把tmp文件夹chown -R apache:apache /tmp都没用,始终无法写入。但是可以写入到我的项目文件夹中的同样权限设置的某个文件夹

Nomia commented 2 years ago

在overtrue/wechat/src/OpenWork/Server/Handlers/EchoStrHandler.php 文件里无法file_get_contents已经存在的文件,报错说不存在,实际是存在,用简单的php test.php是可以获得的

image
Nomia commented 2 years ago

找到问题了,PrivateTmp的问题,不同process用的是不同的/tmp文件夹,导致不同process之间不同共通数据

putenv函数在应用里面设定自定义的/tmp文件夹就好了

putenv('TMPDIR='.__DIR__.'/../storage/app/custom_tmp');