0

我的目录结构就像

  Root
    |---Includes
    |      |--script.php
    |
    |---uploads
    |
    |
    |---index.php

我的 index.php 有一个表单,它取名称并将其发布到 script.php 文件。我想在较旧的上传文件中创建文件夹

脚本.php

if(isset($_POST['name']))

{
  mkdir('../uploads/'.$_POST['name']);
}

当我将 script.php 移动到根文件夹并删除 ../ 时,它运行良好,但是当我使用上面的代码时它不起作用

4

2 回答 2

1

script.php 包含在 index.php 中,并且当前文件夹是 Root,无论包含的文件在哪里。只需用于dirname(__FILE__)获取包含脚本的当前文件夹。您的代码应该是:

if(isset($_POST['name']))
{
  mkdir( dirname(dirname(__FILE__)) . '/uploads/'.$_POST['name']);
}

dirname 被调用两次以获取 Includes 的父文件夹。

另一个安全提示:不要对文件名使用未经检查的用户输入(_POST、_GET ..)。更多信息可以在这里找到:http: //php.net/manual/en/security.filesystem.php

于 2013-10-22T13:24:57.767 回答
0

尝试以下方法(假设您在 Apache 上运行您的网站)

$destination = sprintf('%s/uploads/%s', getenv('DOCUMENT_ROOT'), $_POST['name']);

此外,我会避免$_POST直接使用该变量,因为您可能希望为文件夹使用干净的名称。

如果你想使用相对路径,你可以使用

$destination = sprintf('%s/../uploads/%s', dirname(__FILE__), $_POST['name']);
于 2013-10-22T13:19:09.263 回答