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){ // ファイルの種類を取得します
case 'file': return '通常のファイル';
case 'dir': return 'directory';
case 'block': return 'block device file';
case 'char': return 'char に基づいてデバイスを転送';
case 'fifo': return '名前付きパイプ';
case 'link': return 'シンボルリンク';
デフォルト: '不明な型' を返します;
}
}
filesize はバイト単位でデータを返します。ファイル番号が大きい場合、または非常に大きい場合、コードは次のとおりです。
コードは次のとおりです:
// ファイルサイズを処理します 関数 getSize($path = '', $size = -1){$size = ファイルサイズ($path);
}
if($size >= pow(2, 40)){
return Round($size/pow(2, 40), 2).'TB';
}
else if($size >= pow(2, 30)){
return Round($size/pow(2, 30), 2).'GB';
}
else if($size >= pow(2, 20)){
return Round($size/pow(2, 20), 2).'MB';
}
else if($size >= pow(2, 10)){
ラウンドを返します($size/pow(2, 10), 2).'KB';
}
他{
ラウンドを返します($size, 2).'バイト';
}
}
それでは、ファイル情報を包括的に取得しましょう。コードは次のとおりです。
コードは次のとおりです:
関数 getFileInfo($path){
if(!file_exists($path)){ // ファイルが存在するかどうかを判断します
echo 'ファイルが存在しません!';
}
if(is_file($path)){ // ファイルです、基本的なファイル名を出力します
echo ベース名($path)。' はファイルです
';
}
if(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 'ファイル権限: '.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).'
';
}
Closedir($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($handle))){
if($file == '.' || $file == '..') //フィルターディレクトリ内のドットとドットに注意してください
続けます;
$filepath = $dirpath.'/'.$file; // パスをたどる必要があります
if(is_file($filepath)){ // 計算されたファイルのサイズです
$size += ファイルサイズ($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))
clearDir($filename);
if(is_file($filename))
@unlink($filename);
}
Closedir($handle);
rmdir($dirpath);
}
他{
false を返します;
}
}
他{
false を返します;
}
true を返します;
}
ここで遭遇する大きな落とし穴は . と .. これら 2 つのゴースト (ドットとドット) は、オペレーティング システムのすべてのフォルダーの下にあり、現在のディレクトリと上位ディレクトリを意味します。ディレクトリを読み取るときに、現在のディレクトリのディレクトリは表示されず、再帰関数が無限ループになります。これは、 . と .. が各ディレクトリの先頭にあり、フィルタリングされていない場合は最初に読み取る必要があるためです。このディレクトリを表す . を入力し、このディレクトリを再帰的に入力します... これら 2 つはオペレーティング システムのデフォルトのもので、このディレクトリと上位レベルのディレクトリの間のコネクタです。
ディレクトリのサイズを計算し、空でないディレクトリのコードを削除することで、ファイル コピー関数 copy とファイル移動関数 rename を使用する非常に似た再帰的なアイデアを作成することが非常に簡単になります。これは非常に興味深いものです。文字通り、名前を変更します。上記は名前を変更していますが、別のディレクトリに名前を変更するということは、それをカットすることを意味するのではありませんか?
3. ファイルの読み取りと書き込み
PHP の一部のファイル読み取り操作は C 言語に非常に似ているため、手順は、まずファイルを開いてハンドルを取得し、エラーを確認してから、読み取りと書き込みの処理を行ってから、適切なファイルを閉じるというものです。開いて処理した後に閉じる習慣があるので、C言語のファイルを2回開くとエラーが報告されることを覚えておいてください。したがって、厳密なプログラムでは処理がたくさんあります。たとえば、最初にファイルが存在することを確認し、次にそのファイルが読み取り可能および書き込み可能であることを確認してから、最初にファイルを閉じてから再度開くと、ファイルが正しく開かれたかどうかを確認する必要があります。ファイルを開くときは、ファイルを開くモードを選択する必要があります。これは、ファイルを読み取るか書き込むかを決定します。もちろん、このような操作が必要な関数には便利です。
ファイル書き込み関数は fwrite、fputs、file_put_contents の 2 つだけです。このうち、fwrite はファイルにコンテンツを一度に書き込みます。同時に、次のような既存のファイルのコンテンツを追加または上書きすることもできます。
コードは次のとおりです:
// fwrite(alias fputs) を書き込みます
関数 writeSome($filepath){
if(($handle = fopen($filepath, 'r+')) == true){
for($i=0; $i fwrite($handle, $i." write somethingrn"); //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){
while(!feof($handle)){ // ファイルの終わりに達したかどうかを判定します
$str = fread($handle, 10); // fread が読み込むと、ファイル ポインタは自動的に後方に移動します
echo $str.'
';
}
}
}
より柔軟な読み取り方法が必要な場合は、fseek と巻き戻しを使用する必要があります。fseek は非常に柔軟で、ファイル ポインターを特定の位置に移動したり、先頭または末尾に移動したりできます。読みたい現在の位置を取得します。ftell は次のような現在の位置も通知します。
コードは次のとおりです:
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把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック



