在你们大喊“重复”,将我放逐到深渊之前,请听我说。 :)
我正在为我所在公司开发一个内部网站,最初我是直接从我的运行Windows 7 / IIS的工作站上进行开发的。随着我接近完成网站/应用程序的开发,我得到了一台Centos 7的机器,它运行着Apache,所以我已经开始将它迁移到那个系统上。我已经解决了大部分小问题,并使网站现在可以运行。然而,有一部分网站与我们的数据库交互,并根据登录的用户创建日志目录/文件。这部分使用了mkdir()函数,但我遇到了权限问题。
mkdir(): Permission denied
我已经做了以下工作:
- 由于我使用的是Centos 7,所以Apache用户/组为apache:apache。 我使用chown并将/var/www/html/和Logs文件夹的所有者更改为apache用户/组。为了安全起见,我双重检查了httpd.conf并检查了运行中的进程,以确保我有正确的用户/组。
- 我尝试过,只是为了测试目的,将所有这些文件夹的权限更改为chmod 777,但仍然出现相同的错误。
- 从头到尾搜索StackOverflow,并且只得到了一些已经尝试过的答案,但都没有用。
因此,无论我使用chmod还是chown更改访问的文件夹的权限,我都会收到相同类型的错误。为了安全起见,我也检查了PHP用户,它也使用apache用户。
如果有人能够对为什么即使权限更改后也无法正常工作有额外见解,请告诉我。如果我错过了解释这种特殊情况的文章,则请指出并责备我。哈哈:)
编辑 好的,进一步测试后,我发现两个问题似乎导致了这个总体问题。
- 当脚本创建文件夹时,PHP尝试设置文件夹的权限,即使apache是所有者,似乎服务器也不喜欢这样做。删除代码的那部分后,权限错误消失了,我收到了一个“没有这样的文件或目录”的错误。
- 当通过sudo使用Apache用户测试创建目录时,它能够轻松地创建目录。但是,我的PHP脚本正在创建两个目录,然后在最后一个目录中创建日志文件。似乎您无法同时创建两个目录?例如,已经创建了一个Logs文件夹,而PHP正在尝试在其中创建两个目录,一个用于用户ID,然后在其中创建另一个文件夹以显示日期。因此,一旦PHP脚本运行,它应该创建类似于“Logs/5235/3-3-2015/”这样的东西
请注意,我尝试在PHP中将递归值设置为true,但那时我得到了最初记录的权限问题。当递归/模式被移除时,它不会出现权限问题,但无法创建嵌套目录。
编辑2
为了测试我的理论,我取消了嵌套并尝试让mkdir只创建1个目录,但它产生了与以前相同的错误。虽然它由Apache拥有,即使我将其设置为777,它仍然会返回权限问题。