ホームページ >バックエンド開発 >PHPチュートリアル >PHP ファイル ディレクトリの基本操作の詳細_PHP チュートリアル
一時的に宣言された変数は、スクリプトの実行が終了すると解放されることがわかっています。 1 つの方法は、コンテンツをファイルに書き込んでハードディスクまたはサーバーに置くことです。このためには、ファイル操作に精通している必要があります。
1. ファイルの属性情報を取得します
まず第一に、Linux では、ファイルにはタイプがあります。block (ディスク パーティションや CD-ROM などのブロック デバイス)、char (キーボードやプリンターなど、文字を入力として使用するデバイス)、および dir (ディレクトリ タイプ) があります。ディレクトリもファイルの一部です。species)、fifo (名前付きパイプ、あるプロセスから別のプロセスに情報を転送するためのものです)、file (通常のファイル)、link (リンク、win のショートカットに似ています)、unknown (不明なタイプ) 7 つのカテゴリ。win では、ファイル、ディレクトリ、不明の 3 つのカテゴリのみがあります。 Linux のクソ野郎は、Linux を頑張らなければならないと言いました。彼は完全に Linux のために生まれてきたのです。
タイプを取得するための関数がいくつかあります: filetype: タイプを取得; is_file: それが通常のファイルであるかどうかを判断します; is_link: それがリンクであるかどうかを判断します。
属性を取得するための関数がいくつかあります:
file_exists: ファイルまたはディレクトリが存在するかどうかを判断します。
filesize: ファイル サイズを取得します。is_readable、is_writable、is_executable: 読み取り可能、書き込み可能、実行可能かどうか
filectime、filemtime、fileatime: ファイルの作成時刻 (create)、変更時刻 (modify)、アクセス時刻 (access) を取得し、すべてタイムスタンプを返します。
stat: ファイルに関する基本情報を取得し、インデックスと関連付けの混合配列を返します。たとえば、次のようにファイルタイプを決定できます:
コードは次のとおりです:
function getFileType($path){ // ファイルの種類を取得します
コードは次のとおりです:
// ファイルサイズを処理します 関数 getSize($path = '', $size = -1){コードは次のとおりです:
関数 getFileInfo($path){
if(!file_exists($path)){ // ファイルが存在するかどうかを判断します
echo 'ファイルが存在しません!ファイルパーミッションやグループなどの機能も使用しているので説明が必要です(間違っていたら修正してください)。ファイルのアクセス許可は、読み取り可能、書き込み可能、実行可能に分けられ、一般的には rwx と表現されます。指定された値は前から 4、2、1 です。 3つの値を足した結果が7が一番大きいので、0666は8進数で表現できてとても便利そうです。 7 の場合、このファイルにはこれら 3 つのアクセス許可があることを意味します。なぜ 0666 が出力されるのでしょうか。 Windows にも、Windows と同様にユーザーが存在することは誰もが知っています。そのため、ユーザーには独自のグループとシステムが存在します。ファイル内のグループ (この分割は管理上の必要があると考えられます) であるため、0666 の場合、最初の 6 はファイルに対するユーザーのアクセス許可を表し、2 番目の 6 はファイルに対するユーザーのグループのアクセス許可を表し、3 番目の 6 はファイルに対するアクセス許可を示します。他のグループのアクセス許可 (このグループ以外の他のユーザーを 1 つずつ区別する必要がないように)、6 は、ファイルが読み取りおよび書き込み可能であることを意味します (Win で実行可能かどうかがわかります)。 )。
2. ディレクトリ操作
ディレクトリの読み取り、opendir: ディレクトリを開き、ディレクトリの内容を指すハンドルを返します。ディレクトリの内容が順番に並んだ配列などのシーケンシャルなデータと見なされる場合、このハンドルは最初にこれを指します。実際、システムは、ファイルであってもサブディレクトリであっても、ディレクトリの内容を辞書順に並べ替えます。 readdir: 次のディレクトリの内容を読み取り、ファイル名を返し、ディレクトリ内の次のファイル/ディレクトリを自動的にポイントします。そのため、サブディレクトリの内容を除くディレクトリの内容を読み取るには、After で制御するループが必要です。読み取りの場合、ハンドル変数はクローズされなければなりません。C 言語がファイルを開くときも閉じるときも同様です。私のマシンを例に挙げます:
コードは次のとおりです:
効果は次のとおりです:
システムが実際にディレクトリの内容を大文字小文字を無視した辞書で並べ替えていることがわかります。
ディレクトリ サイズの計算、ファイル サイズが filesize によって取得できることはわかっていますが、PHP にはディレクトリ サイズを具体的に計算する関数はありません。もちろん、PHPにはハードディスクのサイズを計算する関数disk_total_space(ハードディスクの総容量を計算する)とdisk_free_space(ハードディスクの空き容量を計算する)がありますが、disk_free_spaceを試してみたところ、計算が間違っていたようです。 filesize はファイルのサイズを計算するため、ディレクトリの場合は再帰を使用する必要があり、ファイルの場合はサブディレクトリのサイズを計算し、コードを追加します。は次のとおりです:
コードは次のとおりです:
F ドライブにサイズのファイルを作成し、いくつかのサブディレクトリとドキュメントをランダムに作成しました。その結果は次のとおりです。左側はプログラムによって取得され、右側は右クリックしてフォルダーのプロパティを表示します。比較。
ディレクトリの作成と削除には主に mkdir: 新しいディレクトリを作成し、rmdir: 空でないディレクトリを削除します。 コードは次のとおりです。
コードは次のとおりです:
それでは、空ではないディレクトリを削除したい場合はどうするかということですが、PHP はファイル削除関数 unlink しか提供していないため、ディレクトリを削除するときは最初に opendir を実行する必要があります。ファイルが直接削除された場合、それがディレクトリの場合は、引き続きこのメソッドを使用して、削除が成功したかどうかを示すことができます。コードは次のとおりです。
コードは次のとおりです:
ここで遭遇する大きな落とし穴は . と .. これら 2 つのゴースト (ドットとドット) は、オペレーティング システムのすべてのフォルダーの下にあり、現在のディレクトリと上位ディレクトリを意味します。ディレクトリを読み取るときに、現在のディレクトリのディレクトリは表示されず、再帰関数が無限ループになります。これは、 . と .. が各ディレクトリの先頭にあり、フィルタリングされていない場合は最初に読み取る必要があるためです。このディレクトリを表す . を入力し、このディレクトリを再帰的に入力します... これら 2 つはオペレーティング システムのデフォルトのもので、このディレクトリと上位レベルのディレクトリの間のコネクタです。
ディレクトリのサイズを計算し、空でないディレクトリのコードを削除することで、ファイル コピー関数 copy とファイル移動関数 rename を使用する非常に似た再帰的なアイデアを作成することが非常に簡単になります。これは非常に興味深いものです。文字通り、名前を変更します。上記は名前を変更していますが、別のディレクトリに名前を変更するということは、それをカットすることを意味するのではありませんか?
3. ファイルの読み取りと書き込み
PHP の一部のファイル読み取り操作は C 言語に非常に似ているため、手順は、まずファイルを開いてハンドルを取得し、エラーを確認してから、読み取りと書き込みの処理を行ってから、適切なファイルを閉じるというものです。開いて処理した後に閉じる習慣があるので、C言語のファイルを2回開くとエラーが報告されることを覚えておいてください。したがって、厳密なプログラムでは処理がたくさんあります。たとえば、最初にファイルが存在することを確認し、次にそのファイルが読み取り可能および書き込み可能であることを確認してから、最初にファイルを閉じてから再度開くと、ファイルが正しく開かれたかどうかを確認する必要があります。ファイルを開くときは、ファイルを開くモードを選択する必要があります。これは、ファイルを読み取るか書き込むかを決定します。もちろん、このような操作が必要な関数には便利です。
ファイル書き込み関数は fwrite、fputs、file_put_contents の 2 つだけです。このうち、fwrite はファイルにコンテンツを一度に書き込みます。同時に、次のような既存のファイルのコンテンツを追加または上書きすることもできます。
コードは次のとおりです:
// fwrite(alias fputs) を書き込みます
コードは次のとおりです:
より柔軟な読み取り方法が必要な場合は、fseek と巻き戻しを使用する必要があります。fseek は非常に柔軟で、ファイル ポインターを特定の位置に移動したり、先頭または末尾に移動したりできます。読みたい現在の位置を取得します。ftell は次のような現在の位置も通知します。
コードは次のとおりです:
たとえば、私は今、このメソッドを使用して、a から z まで書かれたテキスト ファイルを読み取り、その効果を確認しています。
以上はPHPのディレクトリファイル操作に関する個人的な理解の記録でもあります