2012-06-01 25 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。 –