这里有一个很远的地方,但是我想我会看到有没有人有这个问题的解决办法:
我有一个问题,PHP函数unlink()即使显式拒绝NTFS权限已被应用到有问题的文件,也能够成功删除文件。 我甚至尝试删除所有的NTFS文件权限等 – 相同的结果,它让我难住。
FACTS
我有在Windows Server 2008 R2上运行PHP 5.4.5的Apache 2.2.22
Apache / PHP在用户EXODUS \ wwwuser下运行,通过在运行PHP脚本的命令行中响应'whoami'来validation – 例如:
echo exec('whoami');
返回EXODUS\wwwuser
文件'deleteme.txt'是由'BUILTIN \ Administrators'组的成员创build的,明确拒绝权限被应用于文件EXODUS \ wwwuser – 但是,PHP的unlink()函数成功删除文件。
我已经尝试删除此文件的权限inheritance,删除所有权限(包括系统),并应用EXODUS \ wwwuser显式拒绝'完全控制' – 猜测什么,unlink()仍然删除文件同样的事情…
EXODUS \ wwwuser是BUILTIN \ Users的成员,但这并不表示这会影响情况。
以交互方式login时,不能通过EXODUS \ wwwuser删除文件。
当用PHP编写文件时,文件所有者是“EXODUS \ wwwuser”
有没有人有这个想法?
我将如何去提供不能通过位于定义的“open_basedir”区域内的PHP的unlink()在一个位置删除的文件夹/文件?
我正在使用'open_basedir'来停止脚本篡改声明的open_basedir之外的文件 – 这似乎工作正常 – 例如:不能删除'open_basedir'定义的位置以外的文件。
嗨,如果PHP能够删除一个文件,即使权限说,否则。 这可能意味着Apache以具有pipe理员权限的用户身份运行。
如果上述不是问题,您可以随时尝试审核Windows中的文件夹以确保所有的子文件夹权限都被重置。
我不在Windows上使用PHP,所以不能确定它的底层代码,但是当我编写任何forms的删除函数时,我所做的第一件事就是尝试删除现有的权限。 也许unlink()也是这样做的。 如果启用了适当的日志loggingfunction,则应该能够在Windows事件日志中看到任何此类行为,因此请在此处签入。
唯一的办法就是如果Apache服务器实际上并没有在你所说的用户下运行。 打开该文件夹的审核并再次testing以查看哪个用户正在删除该文件。
另外,谁是文件的所有者?