2012-10-01 33 views
5

文字列が有効なディレクトリ名であるかどうかをチェックするネイティブ関数またはユーザー関数が必要です。 私はPHPのドキュメントを見てきましたが、既存のディレクトリかどうか、そしてディレクトリの有効な名前ではないかどうかを確認する関数is_dirしか見つかりませんでした。有効なディレクトリ名の文字列を確認してください

+3

"有効なディレクトリ名"を定義する各OSにはそれぞれ独自の制限があります。正当なものとそうでないものを定義し、それに対して検証します。 –

+0

存在しないディレクトリは無効なディレクトリですか、いいえ? –

+0

'一般的な'ディレクトリ正規表現を検索することができます。 – Darkwater

答えて

7

これはうまくいくはずです。

は、これがうまくいくregex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

を参照してください。 2番目と3番目の引数を必要に応じて変更できます。

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

ディレクトリ名が有効である場合、これがディレクトリを作成することに注意してください。しかし、私の謙虚な意見では(そしてあなたの特定のユースケースを知らずに)、これはディレクトリ名の妥当性のチェックを処理する多くの言語で好まれる方法です。ディレクトリを作成しようとして失敗した場合は、失敗したことを伝えてください。

この利点は、コードファイルシステムにとらわれず、ディレクトリを検証して作成するのがエラーの起こりやすい方法であることです。これは、他のプロセスやスレッドが、ディレクトリ、および作成時に表示されます。

この方法では、ディレクトリをすぐに作成することを前提としているという欠点があります。

もちろん、mkdir()が失敗する可能性がある複数の理由があります(たとえば、不十分な権限、ハードウェア障害、無効なディレクトリ名など)。そのため、エラーに基づいてさまざまなエラーメッセージを表示することができます。残念ながら、PHPは他の言語ほど頑強な例外処理をしていませんが、この道を踏み出すべきである場合、が生成する可能性のあるさまざまな警告をキャッチするために、このanswerのようなアプローチを使用できるはずです。

+0

'mkdir( 'dirname/test /../ temp'、0700、true);' @GregoryBurnsのような特定のもののために、 '$ directory'という名前をフィルタリングすることは間違いなく役に立ちます。 ... – Wilt

関連する問題