好吧-这是一个奇怪的。
我现在已将我的域名指向运行我们网站的新 EC2 实例,但最初我以为我的文件权限存在一些问题,现在发现是 Web 服务在现有文件系统层之上保留了一个完全独立的文件系统层。
我的意思是?如果我通过 SSH 进入服务器,我上传到网站的任何文件或使用 file_put_contents() 创建的任何文件都无法访问。完全不可见。这对我来说是个大问题,因为我在 root 用户的 cron 上设置了任务,该任务旨在查找这些文件并执行所需的任何任务。
如果我重新启动 apache2 服务 - 在该会话中创建的文件将被重置,就好像它们从未存在过一样。即使我不重新启动会话 - 我也无能为力再次访问这些文件 - 尽管它可能只有在我将其重定向为文件下载时才有效。就 PHP 而言,它们位于 scandir() 中,对于 file_exists() 等为 true。
有谁对此很熟悉,并且知道我该如何禁用它以使其正常运行?根据我的研究,它听起来类似于 EFS,但不知道如何关闭它,更不用说打开它了。
谢谢。注意:我曾在 Stack Overflow 上问过这个问题,但这更像是一个“服务器故障”问题。
答案1
如果 PHPscandir()
可以查看文件,但ssh
VSCode 却无法查看,那就太奇怪了。以下是一些可能的情况:
您是否 100% 确定您登录的服务器与运行 PHP 代码的服务器相同?如果是集群或docker 容器您可能正在运行多个实例?
说起Docker 容器- 它们有自己的文件系统。您是否在 Docker 中运行您的网站?
或者网站是否在
chroot
环境中运行?这样,您必须在某个子目录中查找上传的文件。要检查是否上传具有某个唯一名称的文件(例如abcdefgh.txt
),然后在文件系统中查找find / -name abcdefgh.txt
并查看返回的路径。
它会是这样的。文件不太可能只是无形的对于 SSH,还有更多内容。
希望有帮助:)
答案2
MLu,天才。我使用过locate
,也许语法错误,或者操作系统不对,但find
我找到了它。
整个难题的原因在这博客文章。如果您将设置修改为false
,则使用命令systemctl daemon-reload
并重新启动 apache2 服务 - 恢复正常!
抱歉我回复晚了——我的上一个虚拟机(在进行一些配置编辑后)崩溃了,并出现一些奇怪的内存分配问题。耸肩!