PHP_PHP チュートリアルのファイル ディレクトリの基本操作

WBOY
リリース: 2016-07-13 10:14:34
オリジナル
795 人が閲覧しました

PHPにおけるファイルディレクトリの基本操作

一時的に宣言された変数はメモリに保存されることがわかっているため、変数の内容を長期間保存したい場合は、静的変数をメモリに書き込むことができます。ファイルを作成してハード ドライブまたはサーバーに保存します。これには、ファイル操作に精通している必要があります。
1. ファイルの属性情報を取得します
まず、Linux では、ファイルにはタイプがあります。block (ディスク パーティション、CD-ROM などのブロック デバイス)、char (キーボード、プリンターなど、文字を入力として使用するデバイス)、dir (ディレクトリ タイプ、ディレクトリ) があります。ファイル種の一部です)、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){ // ファイルの種類を取得します
switch(filetype($path)){
case 'file': return '通常のファイル';
case 'dir': return 'directory';
case 'block': return 'block device file';
case 'char': return 'char に基づくデバイスベースの転送';
case 'fifo': return 'named Pipes';
case 'link': return 'symbol link';
デフォルト: '不明な型' を返します;
}
}
コードをコピー
Filesize はデータをバイト単位で返します。ファイル番号が大きい場合、または非常に大きい場合、コードは次のとおりです。
コードをコピー
// ファイルサイズを処理します
関数 getSize($path = '', $size = -1){
を使用して’ to ’ s ’ d ‐ ‐ ‐
$size = filesize($path);
} }
’ s ’ s ’ t 。
returnround($size/pow(2, 40), 2).'TB';
}
else if($size >= pow(2, 30)){
returnround($size/pow(2, 30), 2).'GB';
}
else if($size >= pow(2, 20)){
returnround($size/pow(2, 20), 2).'MB';
}
else if($size >= pow(2, 10)){
returnround($size/pow(2) 、10)、2).'KB';
}
他{
).'バイト';
}
}
コードをコピー
次に、ファイル情報を包括的に取得しましょう。 コードは次のとおりです。
コードをコピー
関数getFileInfo($path){
if(!file_exists($ path)){
echo 'ファイルが存在しません!
';
戻る;
} }
echo ベース名($path) はファイルです
;
} }
D (is_dir ($ PATH)) {// がディレクトリの場合、ディレクトリを返します
echo dirname($path) はディレクトリです
;
} }
echo 'file type:'.getFileType($path).'
' // ファイルの種類を取得します
echo 'file size:'.getSize($path).'
' // ファイルサイズを取得します
Re if (is_readable ($ PATH)) {// 読み取るかどうか
echo ベース名($path) は読み取り可能です
;
} }
W if (is_writeable ($ PATH)) {// 書き込み可能かどうか
echo ベース名($path) は書き込み可能です
;
} }
if(is_executable($path)){ // 実行可能ですか
echo ベース名($path) は実行可能です
;
} }
// タッチ機能はこれらの時間を変更できます
echo 'file create time: '.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){ if(($handle = opendir($dir)) == false){ s t d d ir ‐ dirに向けてdir($dir) == false){
echo 'ディレクトリを開くのに失敗しました';
戻る;
} }
while(($name = readdir($handle)) != false){ // このディレクトリの内容をループして読み取ります
$filepath = $dir.'/'.$name;
echo 'name: '.$name.' type: '.filetype($filepath).'
';
}
' ' ' ‐
}
その他{
echo $dir.' はディレクトリではありません;
}
コードをコピー
効果は次のとおりです。
システムが実際にディレクトリの内容を大文字小文字を無視した辞書で並べ替えていることがわかります。
ディレクトリのサイズを計算するには、filesize でファイルのサイズを取得できることはわかっていますが、PHP にはディレクトリのサイズを具体的に計算する関数はありません。もちろん、PHPにはハードディスクのサイズを計算する関数disk_total_space(ハードディスクの総容量を計算する)とdisk_free_space(ハードディスクの空き容量を計算する)がありますが、disk_free_spaceを試してみたところ、計算が間違っていたようです。 filesize はファイルのサイズを計算するため、ディレクトリの場合は再帰を使用する必要があり、ファイルの場合はサブディレクトリのサイズを計算し、コードを追加します。は次のとおりです:
コードをコピー
// ディレクトリサイズの計算
関数getDirSize($dirpath){
$size = 0;
if(false != ($handle = opendir($dirpath))){
while(false != ($file = readdir($handle))){
I if ($ file == '.' || $ file == '..') // フィルターディレクトリのポイントとドットに注意してください
続ける;
$filepath = $dirpath.'/'.$file; $filepath = $dirpath.'/'.$file; F if (is_file ($ filepath)) {// はファイルの計算サイズです
$size += filesize($filepath);
}
else if(is_dir($filepath)){ using use ’ s ’ ’ ’ use ’s use using through through out through out through out through out through out through ‐‐‐‐‐‐‐'''' to
''
$size += getDirSize($filepath);
}
else{
$size += 0;
}
Closedir($handle);
}
$size を返します;
}
$dirsize = 'F:/size';
$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);
}
になります
rmdir($dirpath);
}
それ以外{
false を返す;
}
}
他{
false を返す;
}
true を返します;
}
コードをコピー
ここで遭遇する大きな落とし穴は . と .. これら 2 つのゴースト (ドットとドット) は、オペレーティング システムのすべてのフォルダーの下にあり、現在のディレクトリと上位ディレクトリを表します。ディレクトリを読み取るときに、現在のディレクトリのディレクトリは表示されず、再帰関数が無限ループになります。これは、 . と .. が各ディレクトリの先頭にあり、フィルタリングされていない場合は最初に読み取る必要があるためです。このディレクトリを表す . を入力し、このディレクトリを再帰的に入力します... これら 2 つはオペレーティング システムのデフォルトのもので、このディレクトリと上位レベルのディレクトリの間のコネクタです。
ディレクトリのサイズを計算し、空でないディレクトリのコードを削除することで、ファイルのコピー関数 copy とファイル移動関数 rename を使用することで、非常に簡単にディレクトリのコピーと切り取りを行うことができます。これは非常に興味深いものです。文字通り、名前を変更します。上記は名前を変更していますが、別のディレクトリに名前を変更するということは、それをカットすることを意味するのではありませんか?
3. ファイルの読み取りと書き込み
PHP でのファイル読み取り操作の一部は C 言語に非常に似ているため、手順はまずファイルを開いてハンドルを取得し、エラーを確認してから読み取りと書き込みを行ってから閉じるという手順になります。開いて処理した後に閉じる、C言語のファイルを閉じていない場合、記憶が正しいかどうかはわかりませんが、厳密なプログラムでは処理がたくさんあります。まずファイルが存在することを確認し、次にそのファイルが読み取り可能および書き込み可能であることを確認し、それからファイルを開くときに、ファイルが正しく開かれたかどうかを確認する必要があります。ファイルを開くには、ファイルを読み取るか書き込むかを決定するモードを選択する必要があります。もちろん、このような操作が必要な関数には便利です。
ファイル書き込み関数は 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 somethingrn") ; // Windows は改行文字として 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){
F While (! Feof ($ handle)) {// ファイルの最後に到達するかどうかを決定します
$str = fread($handle, 10); // fread が読み取ると、ファイル ポインターは自動的に後方に移動します
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, seen_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); // ファイルを閉じる
} }
}
http://www.bkjia.com/PHPjc/909451.html
www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/909451.html技術記事 PHP ファイル ディレクトリの基本的な操作はわかっています。一時的に宣言された変数も、スクリプトの実行が終了すると解放されます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート