Closed lzygjq closed 5 years ago
你在 fpm 和 cli 下分别执行:
var_dump(sys_get_temp_dir());
应该会不一样,那证明你在两种运行模式不是使用的同一个 php.ini 里面的临时目录配置不相同:
sys_temp_dir=这里请配置成相同的目录,比如/tmp/
你在 fpm 和 cli 下分别执行:
var_dump(sys_get_temp_dir());
应该会不一样,那证明你在两种运行模式不是使用的同一个 php.ini 里面的临时目录配置不相同:
sys_temp_dir=这里请配置成相同的目录,比如/tmp/
这个测试过了,都是 /tmp
问题已解决,方案:
项目中有一个下载日志文件的功能,大致流程是 WEB 后端调用底层方法收集并压缩一些 .log 文件生成一个 zip 压缩包,放在 /tmp
目录下,前端访问指定路径下载。
之前系统环境用的 CentOS 6.5,现在升级到了 CentOS 7,结果测试时发现下载文件下载失败。
检查,调试,发现文件不存在,打印出的 /tmp 目录下只有一个文件:dashboard.13913.0.1.sock
。然后再用 locate 搜索一下,发现这个文件位于 /tmp/systemd-private-a5fd4296183645d9956fc7ea58f2c463-httpd.service-eRS5Hl/tmp
目录下。
看这个文件名,大致和 SystemD 有关,这就对上了,CentOS 7 嘛。有了针对性,就好办了。很快就了解到这是 SystemD 的一个 PrivateTmp
属性。
PrivateTmp
开启之后,该服务访问到的 /tmp
不是真实路径,而是一个私有的目录。可能是对安全有一些帮助。
如果是由 Apache 来写文件,再读文件,不会发现这个问题,不过是我这个场景下,下载的 zip 文件不是 Apache 生成的。
服务配置文件(/usr/lib/systemd/system/httpd.service):
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
把 PrivateTmp 设置成 false,然后重启 httpd,就能直接访问到 /tmp 目录。 参考地址:http://www.markjour.com/article/20171109-apache-private-tmp.html
coding in a complicated world
开发环境: laravel : 5.7 "overtrue/laravel-wechat": "~4.0", "overtrue/wechat": "~4.1", php:7.1 appche 作为服务器。
问题现象: http模式下,使用laravel-wechat可以正常推送消息(能获取到suite_ticket)。 console模式下(需要做计划任务执行消息推送),使用laravel-wechat不能推送消息,报错提示:Credential "suite_ticket" does not exist in cache.
解决途径: 1、根据提示语谷歌查询问题原因:之前有人有同样的问题,https://www.jianshu.com/p/226095ae0641根据操作发现执行环境的缓存路径(http和console模式下)都是/tmp。 2、追踪代码:清空缓存(php artisan cache:clear) http模式下只有第一次会进getTicket()方法,后面的请求都不会执行该方法也能发送消息。console模式下执行到这里直接报错,获取不到缓存suite_ticket.
3、尝试在EasyWeChat 开发者交流群里面提问,估计作者太忙说了一句更新最新的代码,可以解决问题,之后就composer update ,发现问题并没有解决。
最后: 希望作者有时间能看下这个问题,如果是个bug希望能修复,对后面踩坑的同学也有帮助,也利于作者完善自己的产品。如果是个人操作或者设置不当,希望借用作者宝贵时间,指点一二。万分感谢!