PHP变量在mkdir目录路径中消失

时间:2012-06-01 03:47:01

标签: php variables path directory mkdir

我似乎遇到使用变量通过mkdir()函数创建目录的问题。该变量正在从URL中解析。请参阅下面的编码:

$pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
 $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
$pageURL;
$url = $pageURL;
$parse = parse_url($url);
$dirID = $parse['query'];

我正在使用define()来定义文件夹路径,因为在整个代码中多次使用该路径:

 define("DESTINATION_FOLDER", "mydir/".$dirID."/");

这是if语句告诉它创建目录,如果它不存在:

if (!@file_exists(DESTINATION_FOLDER)) {      
    mkdir(DESTINATION_FOLDER);
}

听起来很简单,但由于某种原因,变量$ dirID无法读取,而是将文件上传到mydir目录。真正奇怪的是,如果我将变量硬编码为类似于$ dirID =“28”的东西,它就会起作用并且文件会像mydir / 28 / file.jpg一样上传。我以前曾多次使用此方法传递变量,但绝不传递要在mkdir函数中使用的变量。有谁知道可能会发生什么?

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

这些都在上面的评论中,但我会拼出来:

查询部分实际上从未传递给URL,因此不会传递给“解析”。

我会解释你的代码:

  1. 使用protocal(http / https)和服务器名称和URL构建URL。 (注意 - 此时您没有附加查询)
  2. 解析网址(不包含查询)
  3. 从解析中获取查询(仍然不存在)
  4. $ _ SERVER ['QUERY_STRING']是您正在寻找的位 - 您可以添加到URL然后解析,或直接使用它

    $dirID = $_SERVER['QUERY_STRING'];
    

    但是为什么你用它来创建目录有点(很多)危险,因为它总是包含无效参数。正如评论中所建议的那样,您可能意味着获取查询字符串参数的特定值?或者它是实际的字符串。你可以从以下网站获得这些:

    // For ?DirectoryName
    $aKeys = array_keys($_GET)
    $directoryName = isset($aKeys[0]) ? $aKeys[0] : '';
    

    // For ?ParamName=DirectoryName
    $directoryName = $_GET['ParamName']
    

    我还建议您使用preg_match来验证目录名称是否符合可接受的格式并避免创建垃圾!