【问题标题】:Setting File Permissions in Windows with PHP使用 PHP 在 Windows 中设置文件权限
【发布时间】:2014-07-14 03:31:35
【问题描述】:

我有一个脚本可以上传 *.csv 以导入到我拥有的数据库表中,该表通过chmod($target, 0777); 在 linux 中运行良好,但我终生无法找到解决方案来做到这一点,但基于 Windows 的 Apache 服务器。

其他一些帖子有人回答“不要放入 0777,它应该可以工作”,但对我来说不是这样。谢谢!

【问题讨论】:

  • 在 Windows 上,最好为 Apache 用户设置上传文件夹的权限,然后让权限继承来完成剩下的工作。如果您在权限方面遇到问题,这个答案可能是相关的:stackoverflow.com/a/11161766/395384

标签: php windows file permissions


【解决方案1】:

虽然 Brian Leishman 的回答可行,但如果您无法编辑临时文件夹的权限,您可以使用命令行中的以下命令手动使上传的文件从其新位置继承权限:

icacls "target.txt" /q /c /reset

所以,使用 PHP 的 exec() 函数:

exec( 'icacls "target.txt" /q /c /reset' );

有关各种icacls 标志的详细信息,请参阅:https://technet.microsoft.com/en-us/library/cc753525.aspx

提示:使用/t 标志,您可以使用模式匹配来处理多个文件。

【讨论】:

  • 这是一个更好的答案,因为它更便携。另一个答案依赖于服务器上的额外设置,而这个答案可以移动到一个新的服务器上并且工作更少。
  • 别忘了先通过escapeshellarg()运行“target.txt”
【解决方案2】:

感谢在我原来的帖子上留下的评论,在http://www.howyoudo.info/index.php/how-to-fix-windows-server-upload-file-inherit-permissions-error/ 的帮助下,我能够弄清楚它

仅当您使用 PHP 上传文件时才会出现此问题。当您上传文件时,PHP 会将文件发送到 硬盘驱动器(对我来说是 C:\Windows\Temp),然后将其复制到 它是预期的目录。一旦文件降落在临时 目录,它被分配了该目录的权限。这 问题是当 Windows 复制该文件时,它会保留临时文件 目录的权限,并且不继承您的 Web 目录的 权限。

解决此问题的最简单方法是将您预期的 Web 目录的权限添加到临时目录。没有必要 要删除临时目录中已有的权限,只需添加 Web 目录对他们的权限。换句话说,遵循这些 步骤

  1. 要更改临时上传目录的权限,请找到 php.ini 文件中的“upload_tmp_dir”。
  2. 将其设置为目录 您选择的(当然在您的网络文件夹之外)或将其保留在 默认(对我来说是 C:\Windows\Temp)。
  3. 浏览到此文件夹并将您的网络文件夹的权限添加到其中。

【讨论】:

  • 这是 Windows/IIS 上 PHP 的正确解决方案。
  • 我遇到的问题是,当“域管理员”组中的用户(是的,我知道这很糟糕)上传了一个文件时,它从临时文件夹中获取了权限,这导致其他用户没有能够看到图像。这个解决方案为我解决了这个问题,谢谢!
猜你喜欢
  • 2011-10-07
  • 2012-08-23
  • 1970-01-01
  • 2012-06-12
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2014-04-28
相关资源
最近更新 更多