【问题标题】:PHP mkdir() is not working in browser [duplicate]PHP mkdir()在浏览器中不起作用[重复]
【发布时间】:2016-12-17 23:54:36
【问题描述】:

我正在尝试使用 php 在本地 apache 服务器上创建目录。
我试过了
<?php mkdir("folder"); ?>

<?php exec("sudo mkdir folder"); ?>
当我尝试在浏览器中执行它们时,什么也没有发生。
但我可以使用 sudo 从终端执行它们。 (我还修改了 sudoers 文件,因此它不会在第二个代码中提示输入密码)
当我不使用 sudo 时,我会收到此错误
PHP Warning: mkdir(): Permission denied in /var/www/html/mscr/add.php on line 2

我也试过 this this

所以我可以在浏览器中执行除了目录操作之外的几乎所有操作。 我希望能够在浏览器中创建、删除和编辑目录。

谢谢!

【问题讨论】:

  • 使用浏览器需要创建目录的不是php而是Apache,有权限吗?
  • 你不应该使用sudo,因为这意味着给web服务器用户(apache / www / etc.)sudo权限。相反,您应该使父目录对 Web 服务器用户可写。

标签: php linux apache permissions mkdir


【解决方案1】:

听起来 Apache 没有创建文件夹的权限。要么给 Apache 文件夹的所有权(你试图在其中创建一个新文件夹)

sudo chown www-data /var/www/html/mscr

或将文件夹权限设置为777

sudo chmod 777 /var/www/html/mscr

警告这将使 mscr 文件夹中的所有内容都可执行。为了解决这个问题,大多数 CMS 将创建一个设置为 777 的子文件夹,例如 /var/www/html/mscr/uploads

【讨论】:

  • 你应该从不需要777网络服务器上的任何东西...... 永远serverfault.com/questions/357108/…
  • 那么大多数 CMS 都做错了——这是个坏建议;在网络服务器上,Apache 或 SFTP 可能是唯一需要读取访问权限以外的东西 - 几乎所有情况下 nobody 都需要 0 以外的任何东西,如果用户设置正确,在某些情况下,您永远不需要比750770 更宽松的任何东西。
  • @CD001 随时在下面发布您的解决方案,我已经给出了两个选项并警告不要使用第二个选项。设置为 777 不会立即使您的服务器处于危险之中,而访问它的代码没有利用漏洞。 Wordpress 使用它进行缓存和上传,Magento 安装它的扩展程序并获得 777 权限,我见过的大多数其他 CMS 都以类似的方式使用 777 目录
  • @MarkTwigg 这里主要关注的不是executable,而是任何人的可执行、可读和(!)可写。这样做是完全错误的。期间。
  • Magento 和 Wordpress 并不是很好的安全编码实践示例;它们不是为此而构建的 - 它们是为灵活而构建的,因此您可以将它们放在任何旧的受限网络服务器上,它们就会工作。
【解决方案2】:
<?php mkdir("folder", 777, true); ?>

【讨论】:

  • 我已经尝试过了,但对我没有用。 Mark Twigg 的回答奏效了。非常感谢。
  • 请勿使用777 获取权限!
  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!
猜你喜欢
  • 2021-04-01
  • 2015-03-11
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2017-12-07
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多