-1

我似乎在使用变量通过 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 函数中使用的变量。有谁知道可能会发生什么?

预先感谢您的任何帮助。

4

1 回答 1

0

这都是上面的评论,但我会拼写出来:

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

我将解释您的代码:

  1. 使用协议 (http/https) 和服务器名称和 URL 构造 URL。(注意 - 此时您没有附加查询)
  2. 解析 url(不包括查询)
  3. 从解析中获取查询(仍然不存在)

$_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 来验证目录名称是否符合可接受的格式并避免创建废话!

于 2012-06-01T04:17:51.180 回答