我有一个无法将文件写入 NFS 共享的 php-fpm (8.0.16) 实例。我正在使用一个简单的 php 脚本进行测试:
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
$fp = fopen('test.txt', 'a');
fwrite($fp, 'test');
通过 php-fpm 运行时,在作为 NFS 共享的目录中,收到以下错误:
警告:fopen(test.txt):无法打开流:/path/to/nfs/share/test-write.php 中的只读文件系统
但是,以下代码:
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
$fp = fopen('/tmp/test.txt', 'a');
fwrite($fp, 'test');
按预期工作。
该脚本在从命令行以用于在 NFS 共享目录和 /tmp 中运行 php-fpm 的同一用户运行时工作。此外,该脚本通过 php-fpm 在早期版本的 php 上按预期工作。
在 systemd php-fpm.service 文件中有一个设置:
这就是阻止 php-fpm 能够写入 NFS 共享的原因,因为它安装在 /usr 的子目录中。
如此处所述,您可以使用
systemctl edit php-fpm.service
并添加需要写访问权限的路径来覆盖它: