{{agentParams.title}}

返回 返回
  1. {{anchor.name}}

当你创建一个 PHP 站点,同时启用 FTP 时,一定碰到过以下类似的问题:

  • PHP 可以写入文件,但是 FTP 无法上传文件
  • FTP 可以上传文件 ,但是 PHP 无法写入文件
  • PHP 和 FTP 都无法写入文件

这些都是由于网站目录所有者和权限配置有问题引起的。

由于目前 Nginx 中创建站点时并不会为您自动设置目录的所有者和权限,这些操作需要你自己手工进行(新版本网站管理将支持自动设置目录权限,请关注开发计划)。

由于设置方法过于复杂,如果 FTP 只是你自己用来文件管理,建议你直接使用面板内置的文件管理应用,或直接使用 SFTP(可下载 WinSCP 这类客户端),更加安全。

修复办法:

设置网站目录权限为 0777(仍有瑕疵)

0777 指的是所有用户都可以在这个目录中写入文件,这种设置方法最为简单。

但是存在一个问题,新创建的文件和目录的权限不会保持 0777,仍然会产生 PHP 或 FTP 无法写入文件的问题。

比如:

  • 由 FTP 上传一个目录后,使用 PHP 在这个目录中写入文件时,则会失败。
  • 由 PHP 写入的文件,在 FTP 中无法删除。

统一目录所有者的 PHP 和 FTP 的运行用户(完美)

这是最标准的解决方法,如果 PHP 和 FTP 的运行用户就是目录所有者,自然不会存在写入权限的问题。 请注意,我们在说“网站执行写入文件操作”时,这里的在写入文件的进程是 PHP,并不是 Nginx,因此不必理会 Nginx 的运行用户。

由于 PureFTPd 无法使用 ID 小于 500 的用户作为 FTP 用户关联的系统用户,我们需要新建一个系统用户专门用于该网站。

操作步骤示例:

1. 进入【系统用户管理】,添加系统用户 www

2. 进入【PHP】- 运行池管理,修改运行池用户和组为 www

注意,修改完运行池用户和组后,还要同时修改运行池引用到的相关文件和目录的权限,这些文件和目录可以在运行池配置的“源文模式”中找到,如:

进入【文件管理】将这些文件和目录的所有者改为 www。

3. 进入【PureFTPd服务器】,添加用户,设置所属用户和组为 www

4. 进入【文件管理】,将网站目录用户和组设置为 www