6

文字列が有効なディレクトリ名であるかどうかをチェックする、ネイティブまたはユーザー作成の関数が必要です。is_dirPHPのドキュメントを調べましたが、既存のディレクトリであるかどうかをチェックし、ディレクトリの有効な名前ではないかどうかをチェックする関数しか見つかりません。

4

2 に答える 2

9

これはあなたのために働くはずです。

フォルダ名とファイル名の検証については、正規表現を参照してください

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) {
  /* $filename is legal; doesn't contain illegal character. */
}
else {
  /* $filename contains at least one illegal character. */
}
于 2012-10-01T19:58:39.023 に答える
5

これはうまくいくでしょう。必要に応じて、2番目と3番目の引数を変更できます。

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

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

これの利点は、コードファイルシステムに依存しないことと、ディレクトリを検証してから作成するまでの間に他のプロセスやスレッドがディレクトリを作成できないため、エラーが発生しにくい方法であるということです。あなたはそれを作成します。

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

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

于 2012-10-01T20:18:15.637 に答える