将文件上传到script.php所在目录之外

时间:2013-10-22 13:11:32

标签: php

我的目录结构就像

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

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

的script.php

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

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

当我将script.php移动到根文件夹并删除../但是当我使用上面的代码时它无法正常工作时运行正常

2 个答案:

答案 0 :(得分:0)

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

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

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

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

$destination = sprintf('%s/../uploads/%s', dirname(__FILE__), $_POST['name']);

答案 1 :(得分:0)

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

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

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

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