-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 に答える