ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルでのディレクトリ操作とファイル操作の詳細な紹介

PHP_PHP チュートリアルでのディレクトリ操作とファイル操作の詳細な紹介

WBOY
リリース: 2016-07-20 10:57:50
オリジナル
901 人が閲覧しました

PHPにおけるディレクトリ操作やファイル操作も以前紹介したことがありますが、まだよく理解していない人もいます。ここでは、PHP のディレクトリ操作とファイル操作について詳しく説明します。

Web プログラミングでは、ファイル操作は常に頭の痛い問題ですが、CMS システムではファイル操作が必要であり、次のような操作によく遭遇します。ファイル ディレクトリの生成、ファイル (フォルダー) の編集など。次に、

PHP のこれらの関数の詳細な概要を作成し、それらの使用方法を例とともに示します。対応する関数の詳細については、php マニュアルを参照してください。ここでは重要な点と注意が必要な点のみをまとめます (PHP マニュアルには記載されていません)

1. ディレクトリ操作

最初に紹介するのは、ディレクトリから読み取る関数、opendir( )、readdir()、closedir()を使用する場合、最初にファイルハンドルを開いてから、繰り返しリストします:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$base_dir</span><span> = </span><span class="string">"filelist/"</span><span>;   </span></li><li class="alt"><span class="vars">$fso</span><span> = opendir(</span><span class="vars">$base_dir</span><span>);   </span></li><li><span class="func">echo</span><span> </span><span class="vars">$base_dir</span><span>."  </span></li><li class="alt"><span> </span></li><li><span>" ;   </span></li><li class="alt"><span class="keyword">while</span><span>(</span><span class="vars">$flist</span><span>=readdir(</span><span class="vars">$fso</span><span>)){   </span></li><li><span class="func">echo</span><span> </span><span class="vars">$flist</span><span>."   </span></li><li class="alt"><span>" ;   </span></li><li><span>}   </span></li><li class="alt"><span class="func">closedir</span><span>(</span><span class="vars">$fso</span><span>)   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー
これは、ファイルディレクトリの下にあるファイルとディレクトリを返すプログラムです(0ファイルはfalseを返します)。

場合によっては、ディレクトリに関する情報を知る必要がある場合、 dirname($path) と Basename($path) を使用して、それぞれパスのディレクトリ部分とファイル名部分を返すことができます。空き領域を返します。

作成コマンド:

mkdir($path,0777)、0777 は、非ウィンドウでは、umask() 関数を使用して rmdir($path) を設定できます。 $path.

dir のパスを持つファイル -- ディレクトリ クラスはオペレーティング ファイルでもあります。 ディレクトリの重要なクラスには、read、rewind、および close の 3 つのメソッドがあります。これは疑似オブジェクト指向のクラスです。ファイルハンドルを使用してファイルを開き、ポインタを使用してファイルを読み取ります。ここで PHP マニュアルを参照してください:

<ol class="dp-c">
<li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$d</span><span> = dir(</span><span class="string">"/etc/php5"</span><span>);   </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">"Handle: "</span><span> . </span><span class="vars">$d</span><span>->handle . </span><span class="string">"n"</span><span>;   </span></span></li>
<li>
<span class="func">echo</span><span> </span><span class="string">"Path: "</span><span> . </span><span class="vars">$d</span><span>->path . </span><span class="string">"n"</span><span>;   </span>
</li>
<li class="alt">
<span class="keyword">while</span><span> (false !== (</span><span class="vars">$entry</span><span> = </span><span class="vars">$d</span><span>->read())) {   </span>
</li>
<li>
<span class="func">echo</span><span> </span><span class="vars">$entry</span><span>.</span><span class="string">"n"</span><span>;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span class="vars">$d</span><span>->close();   </span>
</li>
<li class="alt"><span>?> </span></li>
</ol> 
ログイン後にコピー
出力:

<ol class="dp-xml">
<li class="alt"><span><span>Handle: Resource id #2   </span></span></li>
<li><span>Path: /etc/php5   </span></li>
<li class="alt"><span>.   </span></li>
<li><span>..   </span></li>
<li class="alt"><span>apache   </span></li>
<li><span>CGI   </span></li>
<li class="alt"><span>cli </span></li>
</ol>
ログイン後にコピー
ファイルの属性には、作成時間、最終変更時間も非常に重要です。 、所有者、ファイルグループ、タイプ、サイズなど

以下ではファイル操作に焦点を当てましょう

2. ファイル操作

A. ファイルを読み取ることができるかどうかを確認します

権限の問題)、または is_readable 関数を使用して情報を取得できます。

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'dirlist.php'</span><span>;   </span></li><li class="alt"><span class="keyword">if</span><span> (</span><span class="func">is_readable</span><span>(</span><span class="vars">$file</span><span>) == false) {   </span></li><li><span class="keyword">die</span><span>(</span><span class="string">'文件不存在或者无法读取'</span><span>);   </span></li><li class="alt"><span>} </span><span class="keyword">else</span><span> {   </span></li><li><span class="func">echo</span><span> </span><span class="string">'存在'</span><span>;   </span></li><li class="alt"><span>}   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー
ファイルの存在を確認する関数には file_exists も含まれています (以下に示します) が、これは明らかに is_readable ほど包括的ではありません。ファイルが存在する場合、それを使用できます

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">"filelist.php"</span><span>;   </span></li><li class="alt"><span class="keyword">if</span><span> (</span><span class="func">file_exists</span><span>(</span><span class="vars">$file</span><span>) == false) {   </span></li><li><span class="keyword">die</span><span>(</span><span class="string">'文件不存在'</span><span>);   </span></li><li class="alt"><span>}   </span></li><li><span class="vars">$data</span><span> = </span><span class="func">file_get_contents</span><span>(</span><span class="vars">$file</span><span>);   </span></li><li class="alt"><span class="func">echo</span><span> htmlentities(</span><span class="vars">$data</span><span>);   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー
ただし、file_get_contents 関数はサポートされていません。以前のバージョンでは、最初にファイルを作成し、次にポインタを使用してすべてを読み取ることができます:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$fso</span><span> = </span><span class="func">fopen</span><span>(</span><span class="vars">$cacheFile</span><span>, </span><span class="string">'r'</span><span>);   </span></span></li>
<li>
<span class="vars">$data</span><span> = </span><span class="func">fread</span><span>(</span><span class="vars">$fso</span><span>, </span><span class="func">filesize</span><span>(</span><span class="vars">$cacheFile</span><span>));   </span>
</li>
<li class="alt">
<span>fclose(</span><span class="vars">$fso</span><span>); </span>
</li>
</ol>
ログイン後にコピー
バイナリ ファイルを読み取る別の方法もあります:

ファイルの書き込みは読み取りと同じです。まずはファイルを書き込みできるかどうかを確認してみましょう:

<ol class="dp-c"><li class="alt"><span><span class="vars">$data</span><span> = implode(</span><span class="string">''</span><span>, file(</span><span class="vars">$file</span><span>)); </span></span></li></ol>
ログイン後にコピー

書き込みができる場合は、file_put_contents 関数を使用して書き込むことができます

<ol class="dp-c"><li class="alt"><span><span> <?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'dirlist.php'</span><span>;   </span></li><li class="alt"><span class="keyword">if</span><span> (</span><span class="func">is_writable</span><span>(</span><span class="vars">$file</span><span>) == false) {   </span></li><li><span class="keyword">die</span><span>(</span><span class="string">"我是鸡毛,我不能"</span><span>);   </span></li><li class="alt"><span>}   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー
file_put_contents 関数は、php5 で新しく導入された関数です (存在を知らない場合は、次の関数を使用してください)。 function_exists 関数を使用して最初に確認します)。以前のバージョンの php は使用できません。次のメソッドを使用できます:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'dirlist.php'</span><span>;   </span></li><li class="alt"><span class="keyword">if</span><span> (</span><span class="func">is_writable</span><span>(</span><span class="vars">$file</span><span>) == false) {   </span></li><li><span class="keyword">die</span><span>(</span><span class="string">'我是鸡毛,我不能'</span><span>);   </span></li><li class="alt"><span>}   </span></li><li><span class="vars">$data</span><span> = </span><span class="string">'我是可鄙,我想要'</span><span>;   </span></li><li class="alt"><span class="func">file_put_contents</span><span> (</span><span class="vars">$file</span><span>, </span><span class="vars">$data</span><span>);   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー

置き換えてください。

ファイルを書き込むときにロックする必要がある場合は、次のように記述します:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$f</span><span> = </span><span class="func">fopen</span><span>(</span><span class="vars">$file</span><span>, </span><span class="string">'w'</span><span>);   </span></span></li>
<li>
<span>fwrite(</span><span class="vars">$f</span><span>, </span><span class="vars">$data</span><span>);   </span>
</li>
<li class="alt">
<span>fclose(</span><span class="vars">$f</span><span>); </span>
</li>
</ol>
ログイン後にコピー

Cファイルをコピーして削除します

php ファイルを削除するのは非常に簡単です。リンク解除機能を使用するだけです:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">function</span><span> cache_page(</span><span class="vars">$pageurl</span><span>,</span><span class="vars">$pagedata</span><span>){   </span></span></li>
<li>
<span class="keyword">if</span><span>(!</span><span class="vars">$fso</span><span>=</span><span class="func">fopen</span><span>(</span><span class="vars">$pageurl</span><span>,</span><span class="string">'w'</span><span>)){   </span>
</li>
<li class="alt">
<span class="vars">$this</span><span>->warns(</span><span class="string">'无法打开缓存文件.'</span><span>);</span><span class="comment">//trigger_error  </span><span> </span>
</li>
<li>
<span class="keyword">return</span><span> false;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span class="keyword">if</span><span>(!</span><span class="func">flock</span><span>(</span><span class="vars">$fso</span><span>,LOCK_EX)){</span><span class="comment">//LOCK_NB,排它型锁定  </span><span> </span>
</li>
<li class="alt">
<span class="vars">$this</span><span>->warns(</span><span class="string">'无法锁定缓存文件.'</span><span>);</span><span class="comment">//trigger_error  </span><span> </span>
</li>
<li>
<span class="keyword">return</span><span> false;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span class="keyword">if</span><span>(!fwrite(</span><span class="vars">$fso</span><span>,</span><span class="vars">$pagedata</span><span>)){</span><span class="comment">//写入字节流,serialize写入其他格式  </span><span> </span>
</li>
<li class="alt">
<span class="vars">$this</span><span>->warns(</span><span class="string">'无法写入缓存文件.'</span><span>);</span><span class="comment">//trigger_error  </span><span> </span>
</li>
<li>
<span class="keyword">return</span><span> false;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span class="func">flock</span><span>(</span><span class="vars">$fso</span><span>,LOCK_UN);</span><span class="comment">//释放锁定  </span><span> </span>
</li>
<li class="alt">
<span>fclose(</span><span class="vars">$fso</span><span>);   </span>
</li>
<li>
<span class="keyword">return</span><span> true;   </span>
</li>
<li class="alt"><span>} </span></li>
</ol>
ログイン後にコピー

はい。ファイルのコピーも簡単です:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'dirlist.php'</span><span>;   </span></li><li class="alt"><span class="vars">$result</span><span> = @unlink (</span><span class="vars">$file</span><span>);   </span></li><li><span class="keyword">if</span><span> (</span><span class="vars">$result</span><span> == false) {   </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">'蚊子赶走了'</span><span>;   </span></li><li><span>} </span><span class="keyword">else</span><span> {   </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">'无法赶走'</span><span>;   </span></li><li><span>}   </span></li><li class="alt"><span>?> </span></span></li></ol>
ログイン後にコピー
名前の変更を使用できます。 ) フォルダーの名前を変更する関数。その他の操作は、これらの関数を組み合わせて実行できます。

D. ファイル属性を取得する

いくつかの一般的な関数について説明します:

最終更新時刻を取得する:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'yang.txt'</span><span>;   </span></li><li class="alt"><span class="vars">$newfile</span><span> = </span><span class="string">'ji.txt'</span><span>; # 这个文件父文件夹必须能写   </span></li><li><span class="keyword">if</span><span> (</span><span class="func">file_exists</span><span>(</span><span class="vars">$file</span><span>) == false) {   </span></li><li class="alt"><span class="keyword">die</span><span> (</span><span class="string">'小样没上线,无法复制'</span><span>);   </span></li><li><span>}   </span></li><li class="alt"><span class="vars">$result</span><span> = </span><span class="func">copy</span><span>(</span><span class="vars">$file</span><span>, </span><span class="vars">$newfile</span><span>);   </span></li><li><span class="keyword">if</span><span> (</span><span class="vars">$result</span><span> == false) {   </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">'复制记忆ok'</span><span>;   </span></li><li><span>}   </span></li><li class="alt"><span>?> </span></span></li></ol>
ログイン後にコピー

timestamp は、キャッシュ技術で一般的に使用される Unix タイムスタンプです。これに関連して、最終アクセス時刻の取得も行われます。 fileatime()、filectime() ファイルのアクセス許可、所有者、すべてのグループ、または inode 内のその他のメタデータが更新されると、 fileowner() 関数はファイル所有者

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'test.txt'</span><span>;   </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="func">date</span><span>(</span><span class="string">'r'</span><span>, </span><span class="func">filemtime</span><span>(</span><span class="vars">$file</span><span>));   </span></li><li><span>?> </span></span></li></ol>
ログイン後にコピー

(非ウィンドウ システム) を返し、ileperms() はファイルのアクセス許可を取得し、

<ol class="dp-c"><li class="alt"><span><span class="vars">$owner</span><span> = posix_getpwuid(</span><span class="func">fileowner</span><span>(</span><span class="vars">$file</span><span>)); </span></span></li></ol>
ログイン後にコピー

filesize() はファイル サイズのバイト数を返します:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="vars">$file</span><span> = </span><span class="string">'dirlist.php'</span><span>;   </span></li><li class="alt"><span class="vars">$perms</span><span> = </span><span class="func">substr</span><span>(sprintf(</span><span class="string">'%o'</span><span>, </span><span class="func">fileperms</span><span>(</span><span class="vars">$file</span><span>)), -4);   </span></li><li><span class="func">echo</span><span> </span><span class="vars">$perms</span><span>;   </span></li><li class="alt"><span>?> </span></span></li></ol>
ログイン後にコピー

すべての情報を取得するにはファイルには、配列を返す関数 stat() があります:

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span class="comment">// 输出类似:somefile.txt: 1024 bytes  </span><span> </span></li><li class="alt"><span class="vars">$filename</span><span> = </span><span class="string">'somefile.txt'</span><span>;   </span></li><li><span class="func">echo</span><span> </span><span class="vars">$filename</span><span> . </span><span class="string">': '</span><span> . </span><span class="func">filesize</span><span>(</span><span class="vars">$filename</span><span>) . </span><span class="string">' bytes'</span><span>;   </span></li><li class="alt"><span>?> </span></span></li></ol>
ログイン後にコピー

ここでは展開されませんが、キーが何に対応しているかについての詳細を確認できます

4. 結論

上記のいくつかのファイル操作を簡単に説明しましたが、この部分も非常に強力です。 php を学習する上で非常に重要な部分です。無視しないでください。

http://www.bkjia.com/PHPjc/445748.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/445748.html

PHP におけるディレクトリ操作とファイル操作は以前にも紹介されましたが、まだよく理解していない人もいます。ここでは、PHP のディレクトリ操作とファイル操作について詳しく説明します。 どのコンピュータデバイスでも...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート