2012-06-01 26 views
-1

我似乎遇到了使用变量通过mkdir()函数创建目录的问题。该变量正在从URL中解析。见我下面的编码:PHP变量在mkdir目录路径中消失

$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("DESTINATION_FOLDER", "mydir/".$dirID."/"); 

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

if ([email protected]_exists(DESTINATION_FOLDER)) {  
    mkdir(DESTINATION_FOLDER); 
} 

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

非常感谢您提供任何帮助。

+1

而不是'$ dirID = $ parse ['query'];',你有没有试过'$ dirID = $ _GET ['query'];'? – Nadh

+0

是的,我忘了提及我已经尝试了GET和POST方法。它似乎仍然消失。 –

+1

我看不到任何地方你的代码中'$ pageURL'被分配了任何看起来像查询的东西,所以你为什么希望通过'parse_url()'找到一个? – Phil

回答

0

这是所有在上面的意见,但我会拼出来:

查询部分永远不会真正传递到URL,因此不传递到“解析”。

我会套用您的代码:使用protocal(HTTP/HTTPS)和服务器名称和URL

  1. 构建URL。 (注 - 你不是在这一点上追加查询)
  2. 解析URL(不包括查询)
  3. 获取从剖析查询(这仍然是不存在的)

$ _ SERVER [“QUERY_STRING”]是你正在寻找的一点 - 你可以添加到URL,然后解析,或者只是用它直接

$dirID = $_SERVER['QUERY_STRING']; 

但是,为什么你会使用创建目录是有点(A LOT)因为它总是包含无效的参数。正如评论中所建议的那样,您可能意思是为查询字符串参数获取特定值?或者它是实际的字符串。你可以从这些:

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

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

然后我也建议你使用的preg_match验证目录名符合可接受的格式,以避免被创建的废话!

+0

谢谢罗比,但这仍然行不通。请原谅我,因为我正在熟悉编程我自己,所以偶尔你可能不得不为我拼写。你说,实际上,查询从来没有传递给URL。它从链接中的前一页传递。即http://www.example.com?28。如果我回显变量,它将显示链接'28'中传递的内容。此外,我只是尝试使用$ _SERVER ['QUERY_STRING'],并且如果我回显该变量,则该变量仍然正确,但在尝试创建目录时却消失了。无论哪种方式,感谢您的帮助。 –

+0

在这种情况下,您发布的代码段之间需要更多的代码,因为其他代码是错误的。基本上$ dirID不是“范围内” - 你可以在一个函数中创建它,并且不要将它传递回它被调用的地方,或者在函数中调用“define”,并且不会将$ dirID传递到该函数中。 – Robbie

+0

有趣的是,如果我将变量硬编码为$ dirID =“28”之类的东西,则一切正常。问题是我需要它保持动态,因为它拉动一个独特的变量,以帮助保持文件在特定目录中组织。谢谢你的帮助Robbie。 –