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>
場合によっては、ディレクトリに関する情報を知る必要がある場合、 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>
<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>
<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>
<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>
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>
いくつかの一般的な関数について説明します:
最終更新時刻を取得する:
<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.comhttp://www.bkjia.com/PHPjc/445748.html