関数 getFileInfo($path){
If(!file_exists($path)){ // ファイルが存在するかどうかを判断します
echo 'ファイルが存在しません!
';
戻る;
}
(IS_FILE ($ Path)) {// がファイルの場合、基本ファイル名を出力します
echo ベース名($path)。' はファイルです
';
}
(IS_DIR ($ Path)) {// がディレクトリの場合、ディレクトリを返します
echo dirname($path).' はディレクトリです
';
}
echo 'file type:'.getFileType($path).'
' // ファイルの種類を取得します
echo 'file size:'.getSize($path).'
' // ファイルサイズを取得します
;
If(is_readable($path)){ // 読み取り可能ですか
echo ベース名($path)。' 読み取り可能です
';
}
If(is_writeable($path)){ // 書き込み可能ですか?
echo ベース名 ($path) は書き込み可能です
;
}
If(is_executable($path)){ // 実行可能ですか
echo ベース名($path)。' は実行可能です
';
}
// タッチ機能はこれらの時間を変更できます
echo 'ファイル作成時刻: '.date('Y-m-d H:i:s', filectime($path)).'
' // 作成時刻
;
echo 'ファイル変更時刻: '.date('Y-m-d H:i:s', filemtime($path)).'
' // 変更時刻
echo '最終アクセス時刻: '.date('Y-m-d H:i:s', fileatime($path)).'
' // 最終アクセス時刻
echo 'ファイル所有者: '.fileowner($path).'
' // ファイル所有者
;
echo 'file Permission: '.substr(sprintf('%o', (fileperms($path))), -4).'
// ファイル権限、8 進数出力
;
echo 'file group: '.filegroup($path).'
' // ファイルが存在するグループ
;
}
効果は次のとおりです:
ファイルパーミッションやグループなどの機能も使用しているので説明が必要です(間違っていたら修正してください)。ファイルのアクセス許可は、読み取り可能、書き込み可能、実行可能に分けられ、一般的には 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 言語がファイルを開くときも閉じるときも同様です。私のマシンを例に挙げます:
コードをコピーします コードは次のとおりです:
// ディレクトリの読み取り
$dir = 'F:/';
echo '.$dir.' の詳細
';
If(is_dir($dir)){
If(($handle = opendir($dir)) == false){ // ディレクトリハンドルを取得します
echo 'ディレクトリを開くのに失敗しました';
戻る;
}
while(($name = readdir($handle)) != false){ // このディレクトリの内容を読み取るループ
$filepath = $dir.'/'.$name;
echo '名前: '.$name.' タイプ: '.filetype($filepath).'
';
}
clositir($ handle);
}
その他{
echo $dir.' はディレクトリではありません;
}
効果は次のとおりです:
システムが実際にディレクトリの内容を大文字小文字を無視した辞書で並べ替えていることがわかります。
ディレクトリ サイズの計算、ファイル サイズが filesize によって取得できることはわかっていますが、PHP にはディレクトリ サイズを具体的に計算する関数はありません。もちろん、PHPにはハードディスクのサイズを計算する関数disk_total_space(ハードディスクの総容量を計算する)とdisk_free_space(ハードディスクの空き容量を計算する)がありますが、disk_free_spaceを試してみたところ、計算が間違っていたようです。 filesize はファイルのサイズを計算するため、ディレクトリの場合は再帰を使用する必要があり、ファイルの場合はサブディレクトリのサイズを計算し、コードを追加します。は次のとおりです:
コードをコピーします コードは次のとおりです:
// ディレクトリサイズの計算
関数 getDirSize($dirpath){
$サイズ = 0;
If(false != ($handle = opendir($dirpath))){
While (FALSE! = ($ File = Readdir ($ ハンドル)) {
If($file == '.' || $file == '..') //フィルターディレクトリ内のドットとドットに注意してください
続けます;
$filepath = $dirpath.'/'.$file;
If (IS_FILE ($ FILEPATH)) {// がファイル計算サイズです
$size += filesize($filepath);
}
Else if (is_dir ($ filepath)) {// がディレクトリである場合、ディレクトリ内のファイルの計算が続行されます
$size += getDirSize($filepath);
}
その他{
$size += 0;
}
closedir($handle);
}
$size を返す;
}
$dirsize = 'F:/サイズ';
$size = getDirSize($dirsize);
echo 'dir size: '.getSize(null, $size).'
' // 前のデータ処理関数を呼び出します
F ドライブにサイズのファイルを作成し、いくつかのサブディレクトリとドキュメントをランダムに作成しました。その結果は次のとおりです。左側はプログラムによって取得され、右側は右クリックしてフォルダーのプロパティを表示します。比較。
ディレクトリの作成と削除には主に mkdir: 新しいディレクトリを作成し、rmdir: 空でないディレクトリを削除します。 コードは次のとおりです。
コードをコピーします
コードは次のとおりです:
//ディレクトリの作成と削除
$newDirPath = 'F:/newDir';
If(true == @mkdir($newDirPath, 0777, true)){ // ファイルが既に存在する場合、PHP 自体が警告をスローする可能性があるため、@ を追加します
echo 'ディレクトリ '.$newDirPath' が正常に作成されました
';
}
他{
If(file_exists($newDirPath))
echo 'ディレクトリ '.$newDirPath.' は存在します
';
その他
echo 'ディレクトリ '.$newDirPath の作成に失敗しました
';
}
If(true == @rmdir('F:/aaa')) //空でないディレクトリのみを削除できます。存在しないディレクトリを削除すると、自動的に警告がスローされます
echo '正常に削除されました
';
それでは、空ではないディレクトリを削除したい場合はどうするかということですが、PHP はファイル削除関数 unlink しか提供していないため、ディレクトリを削除するときは最初に opendir を実行する必要があります。ファイルが直接削除された場合、それがディレクトリの場合は、引き続きこのメソッドを使用して、削除が成功したかどうかを示すことができます。コードは次のとおりです。
コードをコピーします コードは次のとおりです:
// ファイルのリンクを削除
// ディレクトリの内容を削除してから、ディレクトリを削除します
関数clearDir($dirpath){
if(file_exists($dirpath)){
If(false != ($handle = opendir($dirpath))){
while(false!=($ name = readdir($ handle))){
If($name == '.' || $name == '..')
続行;
$filename = $dirpath.'/'.$name;
If(is_dir($filename))
;
If(is_file($filename))
@unlink($filename);
}
closedir($handle);
rmdir($dirpath);
}
その他{
return false;
}
}
その他{
false を返す;
}
true を返します;
}
ここで遭遇する大きな落とし穴は . と .. これら 2 つのゴースト (ドットとドット) は、オペレーティング システムのすべてのフォルダーの下にあり、現在のディレクトリと上位ディレクトリを意味します。ディレクトリを読み取るときに、現在のディレクトリのディレクトリは表示されず、再帰関数が無限ループになります。これは、 . と .. が各ディレクトリの先頭にあり、フィルタリングされていない場合は最初に読み取る必要があるためです。このディレクトリを表す . を入力し、このディレクトリを再帰的に入力します... これら 2 つはオペレーティング システムのデフォルトのもので、このディレクトリと上位レベルのディレクトリの間のコネクタです。
ディレクトリのサイズを計算し、空でないディレクトリのコードを削除することで、ファイル コピー関数 copy とファイル移動関数 rename を使用する非常に似た再帰的なアイデアを作成することが非常に簡単になります。これは非常に興味深いものです。文字通り、名前を変更します。上記は名前を変更していますが、別のディレクトリに名前を変更するということは、それをカットすることを意味するのではありませんか?
3. ファイルの読み取りと書き込み
PHP の一部のファイル読み取り操作は C 言語に非常に似ているため、手順は、まずファイルを開いてハンドルを取得し、エラーを確認してから、読み取りと書き込みの処理を行ってから、適切なファイルを閉じるというものです。開いて処理した後に閉じる習慣があるので、C言語のファイルを2回開くとエラーが報告されることを覚えておいてください。したがって、厳密なプログラムでは処理がたくさんあります。たとえば、最初にファイルが存在することを確認し、次にそのファイルが読み取り可能および書き込み可能であることを確認してから、最初にファイルを閉じてから再度開くと、ファイルが正しく開かれたかどうかを確認する必要があります。ファイルを開くときは、ファイルを開くモードを選択する必要があります。これは、ファイルを読み取るか書き込むかを決定します。もちろん、このような操作が必要な関数には便利です。
ファイル書き込み関数は fwrite、fputs、file_put_contents の 2 つだけです。このうち、fwrite はファイルにコンテンツを一度に書き込みます。同時に、次のような既存のファイルのコンテンツを追加または上書きすることもできます。
コードをコピーします コードは次のとおりです:
// fwrite (エイリアス fputs) を書き込みます
$filepath = 'F:/10m.txt';
関数 writeSome($filepath){
If(($handle = fopen($filepath, 'r+')) == true){
for($i=0; $i
Fwrite ($ handle, $ i. "" Write some "); // Windws は行の変更として RN を使用します
fclose($handle);
}
}
File_put_contents($filepath, 'file_put_contents 関数を使用', FILE_APPEND); // 追加コンテンツ
ファイルを読み取る fread (指定されたバイトを読み取る)、fgetc (1 行を読み取る)、fgets (1 行を読み取る)、file (すべてを読み取り、行ごとに配列に割り当てて返す)、file_get_contents (デフォルトで返された文字列をすべて読み取ります)、readfile (ファイルの内容をキャッシュに直接出力します。その結果、ブラウザに直接出力されます)、fread、fget、fgets を実行すると、ファイル ポインタが自動的に後方に移動します。したがって、連続読み取りはループによって制御するのが最適です。ファイルの終わりに達した場合はどうすればよいですか? EOF フラグは、ファイルの終わりに達したかどうかを検出するために feof を使用するのが最善です。早速、コードを見てみましょう:
コードをコピーします コードは次のとおりです:
// フレッドが読みます
関数 readSome($filepath){
If(($handle = @fopen($filepath, 'r')) == true){
$str = fread($handle, 10);
echo $str.'
';
}
}
}
より柔軟な読み取り方法が必要な場合は、fseek と巻き戻しを使用する必要があります。fseek は非常に柔軟で、ファイル ポインターを特定の位置に移動したり、先頭または末尾に移動したりできます。読みたい現在の位置を取得します。ftell は次のような現在の位置も通知します。
コードをコピーします
コードは次のとおりです:
関数 readFun($filepath){
If(($handle = @fopen($filepath, 'r')) != false){
echo 'current location: '.ftell($handle).'
' // ファイルの現在のファイルポインタ位置をバイト単位で出力します。0 は先頭を意味します
$str = fread($handle, 3); // 3 バイトを読み取ると、ポインターは自動的に 3 バイト戻ります
echo '内容を読み取ります: '.$str.'
';
echo '現在の位置: '.ftell($handle).'
';
fseek($handle, 5, SEEK_CUR) // ファイルポインタを現在の位置から 5 バイト戻します
;
echo '現在位置: '.ftell($handle).'
';
$str = fread($handle, 5);
echo '内容を読み取ります: '.$str.'
';
echo '現在の位置: '.ftell($handle).'
';
rewind($handle) // ファイルの先頭に戻ります
;
echo '現在位置: '.ftell($handle).'
';
fseek($handle, 0, SEEK_END) // ファイルの末尾に移動します
;
echo '現在位置: '.ftell($handle).'
';
fclose($ handle);
}
}
たとえば、私は現在、このメソッドを使用して、a から z まで書かれたテキスト ファイルを読み取り、その効果を確認しています。
以上はPHPのディレクトリファイル操作についての個人的な理解記録でもありますので、皆様のお役に立てれば幸いです。
http://www.bkjia.com/PHPjc/909339.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/909339.html技術記事 PHP ファイル ディレクトリの基本的な操作について詳しく説明します。一時的に宣言された変数も、スクリプトの実行終了後に解放されることがわかっています。