[TOC]
# 如何设置网站目录同时允许 PHP 和 FTP 写入文件?
当你创建一个 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
![](images/faq-write-01.png)
2. 进入【PHP】- 运行池管理,修改运行池用户和组为 www
![](images/faq-write-02.png)
注意,修改完运行池用户和组后,还要同时修改运行池引用到的相关文件和目录的权限,这些文件和目录可以在运行池配置的“源文模式” 中找到,如:
![](images/faq-write-03.png)
进入【文件管理】将这些文件和目录的所有者改为 www。
3. 进入【PureFTPd服务器】,添加用户,设置所属用户和组为 www
![](images/faq-write-04.png)
4. 进入【文件管理】,将网站目录用户和组设置为 www
正在加载...