level1/level2/level3/CWD/mkdir.php
Level1的名称未知;是用户指定的&可以是任何东西。 level2&的名称level3已知并将保持静态。 当前工作目录包含mkdir.php文件,该文件是使用用户提供的名称在level1中创建目录所必需的。 下面的mkdir.php文件完成了这项工作,但不知道这是否正确。希望专家批准和建议。提前谢谢。
<?php
if (isset($_POST['Name']))
{
$newdir = $_POST['Name'];
$dirname = "..\\$newdir";
$step1 = "..\\CWD";
$step2 = "..\\$step1";
$step3 = "..\\$step2\\$dirname";
if (mkdir($step3, 0777, true))
{
echo "dir created successfully";
}
else
{
echo "dir not created";
}
}
?>
答案 0 :(得分:4)
如果您正在运行mkdir.php
,则可以连续使用dirname()
,直至到达level1
。
此外,清理输入数据以防止恶意用户在您的系统上创建“恶意”目录非常重要。
$name = filter_input(INPUT_POST, 'Name', FILTER_VALIDATE_REGEXP, array('options' => array(
'regexp' => '/^\w+$/',
'flags' => FILTER_NULL_ON_FAILURE,
)));
if (!is_null($name)) {
$base = dirname(dirname(dirname(__DIR__)));
// level1 level2 level3 CWD
$path = sprintf('%s/%s', $base, $name);
mkdir($path, 0777, true);
}
答案 1 :(得分:0)
更短更清洁的解决方案:
if(isset($_POST['Name'])) {
$new_dir_name = $_POST['Name'];
// it should work on linux and windows
$new_dir_path = '../../../../'; # '/' should be at the end!!!
//use this if one above doesn't work on windows
//$new_dir_path = '..\\..\\..\\..\\';
if(mkdir($new_dir_path.$new_dir_name, 0777, true)) {
echo "dir created successfully";
}
else {
echo "dir not created";
}
}