ホームページ  >  記事  >  php教程  >  PHP は再帰的にディレクトリを作成します (擬似オリジナル)

PHP は再帰的にディレクトリを作成します (擬似オリジナル)

WBOY
WBOYオリジナル
2016-06-21 08:48:401007ブラウズ

場合によっては、ディレクトリ関数を再帰的に作成する必要があります。この場合、dirname() 関数 (パスのディレクトリ部分を取得するため) と mkdir() 関数 (ディレクトリを作成するため) を使用する必要があります。

まずは文法を普及させましょう:

ディレクトリ名

(PHP 4、PHP 5)

dirname — パスのディレクトリ部分を返します

説明 ?

文字列ディレクトリ名 (文字列 $path )

ファイルへのフルパスを含む文字列を指定すると、この関数はファイル名を削除した後のディレクトリ名を返します。

パラメータ ?

path

パス。

Windows では、スラッシュ (/) とバックスラッシュ () の両方をディレクトリ区切り文字として使用できます。他の状況では、スラッシュ (/) になります。

戻り値 ?

パスの親ディレクトリを返します。 path にスラッシュがない場合は、現在のディレクトリを示すドット (「.」) が返されます。それ以外の場合、返される文字列は、path の末尾の /component (最後のスラッシュとそれに続く部分) を削除した後の文字列です。

ログを更新しますか?

版本 说明
5.0.0 dirname() 的操作从 PHP 5.0.0 版开始是二进制安全的。
4.0.3 在这个版本中,dirname() 被修正为 POSIX 兼容。

例 ?

例 #1 dirname() の例

<?php <br/> echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc<br> echo "2) " . dirname("/etc/") . PHP_EOL; // 2) / (or on Windows)<br> echo "3) " . dirname("."); // 3) .<br> ?>

コメント ?

注:

dirname() は入力文字列に対して単純に動作し、実際のファイルシステムや ".." などのパス コンポーネントを認識しません。

注:

dirname() はロケールを認識するため、マルチバイト文字パスを含む正しいディレクトリ名を表示するには、setlocale() 関数を使用して一致するロケールを設定する必要があります。

注:

PHP 4.3.0 以降、古い機能では空の文字列が返される状況で、dirname() からスラッシュまたはドットが返されることがよくあります。

何が起こったかの例を以下で確認してください:

<?php <br/> <br> // PHP 4.3.0 以前<br> dirname('c:/'); // 返回 '.'<br> <br> // PHP 4.3.0 以后<br> dirname('c:/x'); // 返回 'c:'<br> dirname('c:/Temp/x'); // 返回 'c:/Temp'<br> dirname('/x'); // 返回 '/' (or '' on Windows)<br> <br> ?>

参照?

  • ベース名() - パスのファイル名部分を返します
  • pathinfo() - ファイルパス情報を返します
  • realpath() - 正規化された絶対パス名を返します。

    mkdir

    (PHP 4、PHP 5)

    mkdir — 新しいディレクトリを作成します

    説明 ?

    bool mkdir ( string $pathname [, int $mode = 0777 [, ブール $recursive = false [, resource$context ]]] )

    パス名で指定された新しいディレクトリを作成してみます。

    パラメータ ?

    pathname

    ディレクトリへのパス。

    mode

    デフォルトのモードは 0777 で、これは可能な最大アクセスを意味します。モードの詳細については、chmod() ページを参照してください。

    注:

    mode で Windows では無視されます。

    モードを 8 進数として指定することもできます。これは、数値がゼロで始まる必要があることを意味します。モードは現在の umask によっても変更されます。これは umask() で変更できます。

    recursive

    pathnameで指定されたネストされたディレクトリの作成を許可します。

    context

    注: Context のサポートは PHP 5.0.0 で追加されました。コンテキストの説明については、「ストリーム」を参照してください。

    戻り値 ?

    成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

    ログを更新しますか?

    説明 テーブル>

    例 ?

    例 #1 mkdir()

    <?php <br/> mkdir("/path/to/my/dir", 0700);<br> ?>

    例 2 recursive パラメーターを指定した mkdir()

    の使用 <?php <br/> // Desired folder structure<br> $structure = './depth1/depth2/depth3/';<br> <br> // To create the nested structure, the $recursive parameter <br> // to mkdir() must be specified.<br> <br> if (!mkdir($structure, 0, true)) {<br> die('Failed to create folders...');<br> }<br> <br> // ...<br> ?>

    コメント ?

    注: セーフ モードが有効になっている場合、 PHP は、スクリプトの実行時に、スクリプト化されているディレクトリの UID (所有者) が実行中のスクリプトと同じかどうかを確認します。

    参照?

    • is_dir() - 指定されたファイル名がディレクトリであるかどうかを判断します
    • rmdir() - ディレクトリを削除する

      再帰的にディレクトリを作成する関数:

      /**
      	 * Create the directory recursively.
      	 * @param $path The directory to create, such as, /a/b/c/d/e/
      	 * @param $mode The mode of the directory to create, such as, 0755, 0777.
      	 */
      	function RecursiveMkdir($path,$mode) {
      		
      		if (!file_exists($path)) { // The file is not exist.
      			RecursiveMkdir(dirname($path), $mode); // Call itself.
      			if(mkdir($path, $mode)) { // Call mkdir() to create the last directory, and the result is true.
      				return true; 
      			} else { // Call mkdir() to create the last directory, and the result is false.
      				return false;
      		   }
             } else { // The file is already exist.
      		   return true;
      	   }
         }



      参考文献:

      クリックしてリンクを開きます クリックしてリンクを開きます
      クリックしてリンクを開く



    バージョン
    5.0.0
    版本 说明
    5.0.0 添加 recursive 参数。
    5.0.0 mkdir() 也可用于某些 URL 封装协议。参见支持的协议和封装协议 的列表看看 mkdir() 支持哪些 URL 封装协议。
    4.2.0 mode 成为可选项。
    パラメータを追加します。
    5.0.0 mkdir() は特定の URL でも動作します カプセル化プロトコル。 mkdir() が何をサポートしているかを確認するには、サポートされているプロトコルとカプセル化されたプロトコルのリストを参照してください。 URL カプセル化プロトコル。
    4.2.0 はオプションになります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。