ファイルファイルシステム関数
- $_FILES / $HTTP_POST_FILES〔HTTPファイルアップロード変数〕
- basename〔パスからファイル名部分を返す〕
- chgrp〔ファイルのグループを変更する〕
- chmod〔ファイルのモードを変更する〕
- chown〔ファイルの所有者を変更する〕
- clearstatcache〔ファイルのステータスのキャッシュをクリアする〕
- copy〔ファイルをコピーする〕
- dirname〔パスからディレクトリ部分を返す〕
- disk_free_space〔ディレクトリの利用可能なスペースを返す〕
- disk_total_space〔ディレクトリ全体のサイズを返す〕
- fclose〔ファイルポインタを閉じる〕
- feof〔ファイルポインタがファイルの終端に達しているか調べる〕
- fflush〔出力をファイルにフラッシュする〕
- fgetc〔ファイルポインタから1文字取り出す〕
- fgetcsv〔CSVファイル読込〕
- fgets〔fopen()関数で開いたファイルから1行取り出す〕
- fgetss〔fopen()関数で開いたファイルから、HTMLやPHPタグを除去して出力する〕
- file〔ファイルからデータを全部読み込む・出力する 〕
- file_exists〔ファイル存在確認〕
- file_get_contents〔ファイルの内容を全て読込、そのまま文字列として返す〕
- file_put_contents
〔文字列をファイルに書き込む〕
- fileatime〔ファイルの最終アクセス時刻を取得〕
- filectime〔ファイルの属性が更新された最終更新時刻を取得〕
- filegroup〔ファイルのグループIDを取得〕
- fileinode〔ファイルのinode番号を取得〕
- filemtime〔ファイルの最終更新時を取得〕
- fileowner〔ファイルのオーナーのユーザーIDを取得〕
- fileperms〔ファイルの許可属性を取得〕
- filesize〔ファイルサイズを取得〕
- filetype〔ファイルタイプを取得〕
- flock〔ファイルをロックする〕
- fopen〔ファイルをオープンする〕
- fpassthru〔fopen()関数で開いたファイルの内容を全て出力〕
- fputcsv
〔行をCSV形式にフォーマットし、ファイルに書き込む〕
- fread〔fopen()関数で開いたファイルを、バイナリモードで指定したバイト数分読み込む〕
- fscanf〔フォーマットに基づいてファイルからの入力を処理する〕
- fseek〔ファイルポインタを移動する〕
- fstat〔ファイルポインタからファイルに関する情報を取得する〕
- ftell〔ファイルの読み書き用ポインタの現在位置を返す〕
- ftruncate〔ファイルを指定した長さに丸める〕
- fwrite / fputs〔ファイル書込〕
- glob〔パターンにマッチするパス名を探す〕
- is_dir〔ディレクトリかどうか調べる〕
- is_executable〔ファイルが実行可能かどうか調べる〕
- is_file〔通常ファイルかどうかを調べる〕
- is_link〔ファイルがシンボリックリンクかどうか調べる〕
- is_readable〔ファイルが読込可能か調べる〕
- is_uploaded_file〔HTTP POST によりアップロードされたファイルかどうかを調べる〕
- is_writable / is_writeable〔ファイルが書込可能かどうか調べる〕
- link
〔ハードリンクを作成する〕
- linkinfo
〔リンクに関する情報を取得する〕
- lstat〔ファイルまたはシンボリックリンクに関する情報を取得する〕
- mkdir〔ディレクトリを作成する〕
- move_uploaded_file〔アップロードされたファイルを移動〕
- parse_ini_file〔設定ファイルをパースする〕
- pathinfo〔ファイルパスに関する情報を返す〕
- pclose〔プロセスへのファイルポインタを閉じる〕
- popen〔プロセスへのファイルポインタを開く〕
- readfile〔指定したファイルの内容を読み込んで、その全てを出力〕
- rename〔ファイルをリネーム(移動)する〕
- rewind〔ファイルポインタの位置を先頭に戻す〕
- rmdir〔ディレクトリを削除する〕
- stat〔ファイルに関する情報を取得〕
- tempnam〔一意のファイル名を生成する〕
- tmpfile〔テンポラリファイルを作成する〕
- touch〔ファイルの最終アクセス時刻および最終更新日を設定する〕
- unlink〔ファイルに関する情報を返す〕
$_FILES / $HTTP_POST_FILES
HTTPファイルアップロード変数
unknown
$_FILESは、HTTP POSTメソッドを通じてアップロードされたファイル情報が格納された連想配列を持つ、スーパーグローバル変数です。 PHP 4.1.0 以前のバージョンの場合は、$HTTP_POST_FILESを使用します。
$HTTP_POST_FILESと$_FILESは同じ情報を持っていますが、変数としては別モノです。
$HTTP_POST_FILESは自動的にはグローバル扱いされないため、$HTTP_POST_FILESに関数やメソッドの中からアクセスする場合は、global $HTTP_POST_FILESとして参照する必要があります。
$_FILES['UploadFile']['name'] | クライアントマシンの元のファイル名 |
---|---|
$_FILES['UploadFile']['type'] | ファイルのMIMEタイプ |
$_FILES['UploadFile']['tmp_name'] | サーバー上で保存されているテンポラリファイル名 |
$_FILES['UploadFile']['error'] | このファイルアップロードに関する エラーコード |
$_FILES['UploadFile']['size'] | アップロードされたファイルのバイト単位のサイズ |
basename
パスからファイル名部分を返す
unknown
パスからファイル名を返します。 オプションの第2引数suffix(PHP4.1.0~)を指定した場合、ファイル名からsuffix部分をカットした文字列が返されます。
パスからディレクトリ名を取得する場合は、dirname()関数を使用してください。
Windows 環境では、パスの区切り文字としてスラッシュ、バックスラッシュの両方が使用されます。 その他の環境では、スラッシュとなります。
<?
$path = "/home/httpd/html/index.php";
echo basename($path)."<br>"; // index.php
echo basename($path,".php")."<br>"; // index
?>
chgrp
ファイルのグループを変更する
unknown
ファイル名のグループをグループに変更します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
スーパーユーザーのみがファイルのグループを任意に変更することができます。 それ以外のユーザーは、ファイルのグループをそのユーザーがメンバーとして属しているグループに変更することができます。
第1引数ファイル名には、ファイルへのパスを指定します。
第2引数グループには、グループ名あるいはグループ番号を指定します。
<?
# ファイルのグループの変更
$filename='shared_file.txt';
$format="%s's Group ID @ %s: %d\n";
printf($format, $filename, date('r'), filegroup($filename));
// shared_file.txt's Group ID @ Mon, 04 May 2009 23:28:31 +0900: 0
chgrp($filename, 8);
printf($format, $filename, date('r'), filegroup($filename));
// shared_file.txt's Group ID @ Mon, 04 May 2009 23:28:31 +0900: 0
?>
chmod
ファイルのモードを変更する
unknown
指定したファイルのモードを指定したモードに変更します。
第1引数ファイル名には、ファイルへのパスを指定します。
第2引数モードには、ファイルのモードを指定します。 モードは自動的には8進数とみなされません。 そのため、"g+w"のような文字列は正しく動作しません。 意図した操作を行うには、モードの前にゼロをつける必要があります。
<?
# 間違った例
chmod("/somedir/somefile", 755); // 10進数:おそらく間違い
chmod("/somedir/somefile", "u+rwx,go+rx"); // 文字列:正しくない
# 正しい例
chmod("/somedir/somefile", 0755); // 8進数:正しいモードの値
?>
モードは3つの8進数による数値で構成され、「所有者自身」、「所有者が属するグループ」、「その他のユーザー」の順でアクセス制限を設定します。 1つ1つの数字はその対象となるユーザーに対し許可を与えます。
- 1 - 実行権限
- 2 - ファイルに対する書込権限
- 4 - ファイルに対する読込権限
必要な権限に合わせて数値を加算します。
<?
# 所有者に読み込み、書き込みの権限を与え、その他には何も許可しない。
chmod("/somedir/somefile", 0600);
# 所有者に読み込み、書き込みの権限を与え、その他には読み込みだけ許可する。
chmod("/somedir/somefile", 0644);
# 所有者に全ての権限を与え、その他には読み込みと実行を許可する。
chmod("/somedir/somefile", 0755);
# 所有者に全ての権限を与え、所有者が属するグループに読み込みと実行を許可する。
chmod("/somedir/somefile", 0750);
?>
chown
ファイルの所有者を変更する
unknown
指定したファイルの所有者を指定したユーザーに変更します(スーパーユーザーのみ)。 成功し場合にTRUE、失敗した場合にFALSEを返します。
第1引数ファイル名には、ファイルへのパスを指定します。
第2引数ユーザーには、ユーザー名あるいはユーザー番号を指定します。
<?
# 使用するファイル名とユーザ名
$file_name= "foo.php";
$path = "/home/sites/php.net/public_html/sandbox" . $file_name ;
$user_name = "root";
# ユーザを設定します
chown($path, $user_name);
# 結果を確認します
$stat = stat($path);
print_r(posix_getpwuid($stat['uid']));
/*
array(7) {
["name"]=>
string(13) "php.net"
["passwd"]=>
string(1) "x"
["uid"]=>
int(148864)
["gid"]=>
int(148910)
["gecos"]=>
string(13) "php.net"
["dir"]=>
string(25) "/home/sites/php.net"
["shell"]=>
string(13) "/sbin/nologin"
}
*/
?>
clearstatcache
ファイルのステータスのキャッシュをクリアする
unknown
lstat()、stat()、file_exists()、is_writable()、is_readable()、is_executable()、 is_file()、is_dir()、is_link()、filectime()、fileatime()、filemtime()、fileinode()、 filegroup()、fileowner()、filesize()、filetype()、fileperms()を使用すると、PHPはパフォーマンス向上のためにファイルのステータスをキャッシュします。 この関数は、そのキャッシュをクリアしたいときに使用します。 返り値はありません。
例えば、file_exists()関数を使用してファイルの存在確認をした場合、PHPがファイルのステータスをキャッシュしているとファイルが削除しても存在すると判断されてしまうことがあります。 これを回避するには、file_exists()関数をコールする前に、この clearstatcache()関数を使用します。
オプションの第1引数clear_realpath_cache(PHP v5.3.0~)には、realpathキャッシュをクリアするか否かを指定します。 デフォルトはFALSE(クリアしない)です。
オプションの第2引数ファイル名(PHP v5.3.0~)は、realpathキャッシュを特定のファイル名にクリアする場合に指定します。 clear_realpath_cacheがTRUEの場合にのみ使用可能です。
<?
$filename = "sample.txt";
// file_exists()関数 のステータスのキャッシュをクリア
clearstatcache();
if (file_exists($filename)) {
// filetime()関数 のステータスのキャッシュをクリア
clearstatcache();
//date()関数で返り値をフォーマット
$lastupd = date("Y年m月d日", filemtime($filename));
echo "最終更新日:".$lastupd; //最終更新日:2005年02月13日
}
?>
copy
ファイルをコピーする
unknown
コピー元ファイルをコピー先ファイルにコピーします。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数コピー元ファイルには、コピー元ファイルへのパスを指定します。
第2引数コピー先ファイルには、コピー先ファイルへのパスを指定します。 URLを指定した場合、既存ファイルへの上書きをラッパーがサポートしていない場合にはコピーが失敗します。 なお、コピー先のファイルが既に存在する場合は、上書きされますので注意指定ください。
オプションの第3引数context(PHP v5.3.0~)には、strem_context_create()で作成した有効なコンテキストリソースを指定します。
ファイルを移動する場合は、rename()関数を使用してください。
<?
$file = 'sample.txt';
$newfile = 'sample.txt.bak';
if (!copy($file, $newfile)) {
echo "ファイルコピー失敗";
}else{
echo "ファイルコピー成功";
}
?>
dirname
パスからディレクトリ部分を返す
unknown
パスからディレクトリ名を返します。
パスからファイル名を取得する場合は、basename()関数を使用してください。
Windows 環境ではパスの区切り文字として、スラッシュ、バックスラッシュの両方が使用されます。 その他の環境では、スラッシュとなります。
<?
$url = "http://f32.aaa.livedoor.jp/~azusa/index.php";
echo dirname($url)."<br>"; // 'http://f32.aaa.livedoor.jp/~azusa'
$pass = "./~azusa/index.php";
echo dirname($pass)."<br>"; // './~azusa'
#指定した文字列にスラッシュがない場合、
#カレントディレクトリを示すドット(.)が返される。
$pass = "c:/";
echo dirname($pass)."<br>"; // '.'
?>
disk_free_space
ディレクトリの利用可能なスペースを返す
unknown
指定したディレクトリの利用可能なバイト数を浮動小数点型で返します。
第1引数ディレクトリにはファイルシステムのディレクトリあるいは、CドライブやDドライブなどのディスクパーティションを指定します。
diskfreespace()はこの関数のエイリアス(別名)です。
<?
# $dfは「/」で利用可能なバイト数
echo $df = disk_free_space("/")."<br>"; // 98332717056
# Windowsの場合:
echo disk_free_space("C:")."<br>"; // 9803583488
echo disk_free_space("D:")."<br>"; // 98332717056
?>
disk_total_space
ディレクトリ全体のサイズを返す
unknown
指定したディレクトリの利用可能な総バイト数を浮動小数点型で返します。
第1引数ディレクトリにはファイルシステムのディレクトリあるいは、CドライブやDドライブなどのディスクパーティションを指定します。
<?
# $dfは「/」で利用可能なバイト数
echo $df = disk_total_space("/")."<br>"; // 99057045504
# Windowsの場合:
echo disk_total_space("C:")."<br>"; // 20974428160
echo disk_total_space("D:")."<br>"; // 99057045504
?>
fclose
ファイルポインタを閉じる
unknown
開いたファイルポインタを閉じます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
ファイルポインタは、有効なファイルポインタであり、fopen()またはfsockopen()関数で正常にオープンされたファイルを指している必要があります。
<?
$fname='sample.txt';
#ファイルポインタをオープン
$fp = fopen($fname, 'r');
#ファイルの中身を変数に格納
$str = fread($fp, filesize($fname));
#ファイルポインタを閉じる
fclose($fp);
?>
feof
ファイルポインタがファイルの終端に達しているか調べる
unknown
ファイルポインタがEOFに達しているか、エラーの場合にTRUEを返し、それ以外の場合にFALSEを返します。
ファイルポインタは、有効なファイルポインタであり、fopen()またはfsockopen()関数で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
- 無効なファイルポインタを指定するとエラーが発生し、EOFがTRUEを返すことができないため無限ループに陥る可能性があるので注意してください。
- fwrite()関数などにより移動した場合はEOFを検出しますが、fseek()関数でファイルポインタをファイルの終端まで移動させても、EOFは検出されません。
<?
/* 【sample.txt】の中身
あいうえお
かきくけこ
さしすせそ
*/
$fname = "sample.txt";
$cnt = 0;
$fp = fopen( $fname, "r");
//終端に達するまでループ */
while(!feof($fp)){
$lines[$cnt] = fgets($fp);
$cnt++;
}
fclose($fp);
print_r($lines);
//Array ( [0] => あいうえお [1] => かきくけこ [2] => さしすせそ )
?>
<?
$fname='sample.txt';
#ファイルポインタをオープン
$fp = fopen($fname, 'r');
#ファイルポインタがファイルの終端に達するまで
#1行ずつファイル内容を出力
while(!feof($fp)){
echo fgets($fp);
}
#ファイルポインタを閉じる
fclose($fp);
?>
fflush
出力をファイルにフラッシュする
unknown
バッファリングされたすべての出力を指定したファイルポインタのリソースに強制的に書込ます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数ファイルポインタは、有効なファイルポインタであり、fopen()またはfsockopen()で正常に開かれまだ閉じられていないファイルを指している必要があります。
<?
$filename='bar.txt';
$file=fopen($filename, 'r+');
rewind($file);
fwrite($file, 'Foo');
fflush($file);
ftruncate($file, ftell($file));
fclose($file);
?>
fgetc
ファイルポインタから1文字取り出す
unknown
指定したファイルポインタから1文字だけ取り出して返します。 EOFの場合にはFALSEを返します。
第1引数ファイルポインタは、有効なファイルポインタであり、fopen()またはfsockopen()で正常に開かれまだ閉じられていないファイルを指している必要があります。
この関数が返す値がFALSEでなく、0や""といった値を返す場合もあるため、 この関数の返り値を調べるには、===演算子を使用してください。
<?
$fp=fopen('somefile.txt', 'r');
if(!$fp){
echo 'somefile.txt をオープンできませんでした';
}
while(false!==($char=fgetc($fp))){
echo "$char<br>";
}
// s<br>a<br>m<br>p<br>l<br>e<br>
?>
fgetcsv
CSVファイル読込
unknown
区切り文字で区切られた値を要素とする配列(数字添字配列)を生成して返します。
fgets()関数と似ていますが、行をCSVフォーマット(カンマ区切り)として読込処理を行い、読み込んだフィールドを含む配列を返すところが異なります。
EOFに達した場合を含み、エラーが発生した場合にFALSEを返します。 CSVファイルの空行はNULLフィールドを1つだけ含む配列として返されるのでエラーにはなりません。
取得した各データの左右にあるホワイトスペース (タブ、半角スペース、改行文字)は自動的にカットされます(バージョンによっては改行のみカット)。
第1引数のファイルポインタは有効なものであり、fopen()、poppen()、fsockopen()関数で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
第2引数のバイト数は、CSVファイルにある最大行長より大きいバイト数を指定します(PHP5からはオプション引数に変更)。 省略した場合は、最大行長は無制限となるため、やや処理が重くなります。
オプションの第3引数区切り文字は1文字のみ指定できます。
省略した場合は、デフォルトのカンマ(,
)が使用されます。
オプションの第4引数囲い子(PHP4.3.0~)は1文字のみ指定できます。デフォルトはダブルクオーテーション("
)。
囲い子を指定した場合、囲い子で括られた部分は区切り文字に関係なく、左右のホワイトスペースもカットされることなく、1つの要素になります。
\
の後ろにある囲い子はエスケープされて無効になります。
オプションの第4引数エスケープには、エスケープ文字(1文字のみ)を設定します。 デフォルトはバックスラッシュです。
<?
//CSVファイルから配列生成(fgetcsv使用例)
/*
【food.csvの中身】
fruit 1 リンゴ
fruit 2 バナナ
fruit 3 ブドウ
yasai 1 ポテト
yasai 2 トマト
*/
//food_ary[分類][連番] = [食物名];
$food_ary = Array();
$fname = "food.csv";
$fp = fopen($fname, "r");
$fsize = filesize($fname);
while($dat = fgetcsv($fp, $fsize, "\t")){
$food_ary[$dat[0]][$dat[1]] = chop($dat[2]);
}
fclose($fp);
print_r($food_ary);
/*
Array
(
[fruit] => Array
(
[1] => リンゴ
[2] => バナナ
[3] => ブドウ
)
[yasai] => Array
(
[1] => ポテト
[2] => トマト
)
)
*/
?>
fgets
fopen()関数で開いたファイルから1行取り出す
unknown
fopen() で開いたファイルポインタから(最大バイト数-1)バイト数だけ読込、それを返します。 エラーが発生した場合にFALSEを返します。
最大バイト数省略すると自動的に1024バイト(日本語で512文字分)が適用されます。
この関数は(最大バイト数-1)バイト数分読み込んだか、改行文字を検出したか、EOFに達した時点で読込を終えます。 つまり、最大1行分しか読み込めません。
<?
//CSVファイルから配列生成(fgets使用例)
/*
【food.csvの中身】
fruit 1 リンゴ
fruit 2 バナナ
fruit 3 ブドウ
yasai 1 ポテト
yasai 2 トマト
*/
//food_ary[分類][連番] = [食物名];
$dat = "";
$fname = "food.csv";
$food_ary = Array();
$fsize = filesize($fname) + 1;
$fp = @fopen($fname, "r");
while($line = fgets($fp, $fsize)){
$dat = explode("\t", chop($line));
$food_ary[$dat[0]][$dat[1]] = $dat[2];
}
@fclose($fp);
print_r($food_ary);
/*
Array
(
[fruit] => Array
(
[1] => リンゴ
[2] => バナナ
[3] => ブドウ
)
[yasai] => Array
(
[1] => ポテト
[2] => トマト
)
)
*/
?>
fgetss
fopen()関数で開いたファイルから、HTMLやPHPタグを除去して出力する
unknown
fopen() で開いたファイルポインタから1行読込、HTMLタグとPHPタグを除去して出力します。 オプションの第3引数除去しないタグで指定したタグは除去されません。
オプションの第2引数最大バイト数(PHP5~)で指定したバイト数まで読込ます。 デフォルトは1024バイト(日本語で512文字分)です。
<?
//「test.html」から、<br>以外のタグを取り除いて、全て出力
/*【test.html】の中身
<html>
<head><title>Untitled</title></head>
<body>
Hello World!
</body>
</html>
*/
$fp = fopen("test.html", "r");
while(($point = fgetss($fp, 1024, "<br>")) !== false){
echo $point;
}
fclose($fp);
/*
Untitled
Hello World!
*/
?>
file
ファイルからデータを全部読み込む・出力する
unknown
ファイル名の内容を全て読込、各行(改行文字も含む)を各要素にセットした配列を返します。 エラーが発生した場合はFALSEを返します。
オプションの第2引数インクルードパス使用にTRUEを指定すると、インクルードパス内のファイルも扱えるようになります(デフォルトはFALSE)。
ファイル位置を含んだエラーメッセージを非表示にするには、@file ( filename )
という風に関数の頭にエラー演算子(@)を付けて使用します。
<?
/*
【sample.txtの中身】
あいうえお
かきくけこ
さしすせそ
*/
$fname = "sample.txt";
$lines = file($fname);
while(list($num, $line) = each($lines)){
echo $num."行:" . $line . "<br>\n";
}
/*
0 行: あいうえお
1 行: かきくけこ
2 行: さしすせそ
*/
?>
file_exists
ファイル存在確認
unknown
ファイル名が存在する場合にTRUE、存在しない場合にFALSEを返します。
ファイル情報のキャッシュのクリアファイルを読み込んだり、書込処理などをする場合、当の処理対象であるファイルが存在しなかったり、指定した処理が許可されていないとエラーが発生します。
この関数を使って、ファイルが書込可能であるか、ファイルが存在するかなど、処理前にファイルの状態をチェックすることで、これらのエラーを回避できます。
<?
$fname = "sample.txt";
if(file_exists ($fname)) echo "存在します";
else echo "存在しません";
//存在します
?>
file_get_contents
ファイルの内容を全て読込、そのまま文字列として返す
unknown
ファイル名に指定したファイルの内容を全て文字列として読込ます。 失敗した場合にFALSEを返します。 readfile()関数と異なり、ファイル内容を出力しないで変数に代入することができます。
オプション引数のオフセットと最大長を指定した場合は、オフセットで指定した位置から読込を開始し、maxlenバイト数分だけファイル内容を文字列として読込ます。 それ以外は、file()関数と同じです。
ファイル位置を含んだエラーメッセージを非表示にするには、@file_get_contents ( filename )
という風に関数の頭にエラー演算子(@)を付けて使用します。
オプションの第2引数インクルードパス使用にTRUEを指定すると、インクルードパス内のファイルも扱えるようになります(デフォルトはFALSE)。
オプションの第3引数コンテキストには、stream_context_create()で作成したコンテキストのリソースを指定します。 独自のコンテキスを使用する必要がない場合は、NULLを指定してください。
オプションの第4引数オフセット(PHP v5.1.0~)には、読込を開始する位置を指定します。
オプションの第5引数最大長(PHP v5.1.0~)には、読込むデータの最大バイト数を指定します。
<?
/* sample.txtの中身
あいうえお
かきくけこ
さしすせそ
*/
$filename = "sample.txt";
//ファイル内容を変数に格納
$content = @file_get_contents($filename);
//改行コードを<br>に置換
$content = str_replace("\r\n","<br>",$content);
echo $content;
/*
あいうえお<br>かきくけこ<br>さしすせそ
*/
?>
file_put_contents 
文字列をファイルに書き込む
unknown
この関数は、fopen()、fwrite()、fclose()を続けてコールしてデータをファイルに書き込むのと同じ動作になります。
ファイル名に指定したファイルが存在しない場合は、新規にファイルを作成します。 存在する場合はそのファイルを上書きします。 ただし、FILE_APPENDフラグが設定されている場合は、データをファイルに上書きせずに追記します。
返り値としてファイルに書き込まれたバイト数を返します。 失敗した場合はFALSEを返します。
第1引数ファイル名には、データを書込ファイルへのパスを指定します。
第2引数データには、書き込むデータを指定します。 文字列、配列、ストリームリソースのいずれかを指定することができます。 データガストリームリソースの場合は、ストリームのバッファに残っている内容が指定したファイルにコピーされます。 これは、stream_copy_to_stream()の挙動と似ています。
オプションの第3引数フラグには、下記のフラグを指定することができます。 組み合わせて指定する場合は、OR(|)演算子で連結します。
フラグ | 説明 |
---|---|
FILE_USE_INCLUDE_PATH | ファイルをインクルードディレクトリから探します。 |
FILE_APPEND | ファイルが既に存在する場合、データを上書きせずに追記します。 |
LOCK_EX | 書込処理中にファイルに対する排他ロックを確保します。 |
FILE_TEXT(PHP v6~)( | データをテキストモードで書込ます。unicodeが有効な場合のデフォルトエンコーディングはUTF-8です。他のエンコーディングを設定するには、独自のコンテキストを作成するか、あるいはstream_default_encoding()でデフォルトを変更します。このフラグはFILE_BINARYと併用することはできません。 |
FILE_BINARY(PHP v6~) | データをバイナリモードで書込ます。コレはデフォルトの設定で、FILE_TEXTと併用することはできません。 |
オプションの第4引数コンテキストには、stream_context_create()で作成したコンテキストリソースを指定します。
<?
$file='somefile.txt';
# ファイルをオープンして既存のコンテンツを取得
$current=file_get_contents($file);
# 新しい人物をファイルに追加
$current .= "John Smith\n";
# 結果をファイルに書き出す
echo file_put_contents($file, $current); // 18
/*
▼ファイルの内容
sample
John Smith
*/
?>
fileatime
ファイルの最終アクセス時刻を取得
unknown
ファイル名に最後にアクセスした時刻をUNIXタイムスタンプで返します。 エラーが発生した場合にFALSEを返します。
出力可能な形式にするには、返り値をdate()関数でフォーマットすればOK。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "sample.txt";
//date()関数で返り値をフォーマット
$lastaccess = date("Y年m月d日", fileatime($filename));
echo "最終アクセス日:".$lastaccess; //最終アクセス日:2005年02月13日
?>
filectime
ファイルの属性が更新された最終更新時刻を取得
unknown
ファイル名の属性(パーミッション、オーナー、グループ、その他の権限)が変更された場合に、ファイルが更新されたと見なし、属性が変更された最終更新時刻をUNIXタイムスタンプで返します。 エラーが発生した場合にFALSEを返します。
出力可能な形式にするには、返り値をdate()関数でフォーマットすればOK。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "sample.txt";
//date()関数で返り値をフォーマット
$lastaccess = date("Y年m月d日", filectime($filename));
echo "最終属性更新日:".$lastaccess; //最終属性更新日:2005年02月13日
?>
filegroup
ファイルのグループIDを取得
unknown
ファイル名のオーナーのグループIDを数値で返します。 失敗した場合にFALSEを返し、E_WARNINGレベルのエラーが発生します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "./log/log.txt";
echo $perms = filegroup($filename); //10000
?>
fileinode
ファイルのinode番号を取得
unknown
ファイル名のinode番号を返します。失敗した場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "./log/log.txt";
echo $perms = fileinode($filename); //14154752
?>
filemtime
ファイルの最終更新時を取得
unknown
ファイル名の内容が更新された時間をUNIXタイムスタンプで返します。 エラーが発生した場合にFALSEを返します。
出力可能な形式にするには、返り値をdate()関数でフォーマットすればOK。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "sample.txt";
//date()関数で返り値をフォーマット
$lastupd = date("Y年m月d日", filemtime($filename));
echo "最終更新日:".$lastupd; //最終更新日:2005年02月13日
?>
fileowner
ファイルのオーナーのユーザーIDを取得
unknown
ファイル名のオーナーのユーザーIDを数値で返します。 失敗した場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "./log/log.txt";
echo fileowner($filename); //10900
?>
fileperms
ファイルの許可属性を取得
unknown
ファイル名の許可属性を返します。エラーが発生した場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$perms = fileperms('sample.txt');
# 8進数としてファイルの許可属性を取得
echo substr(sprintf('%o', $perms), -4); //0666
# 完全な許可属性を取得
if (($perms & 0xC000) == 0xC000) {
$info = 's'; // Socket
} elseif (($perms & 0xA000) == 0xA000) {
$info = 'l'; // Symbolic Link
} elseif (($perms & 0x8000) == 0x8000) {
$info = '-'; // Regular
} elseif (($perms & 0x6000) == 0x6000) {
$info = 'b'; // Block special
} elseif (($perms & 0x4000) == 0x4000) {
$info = 'd'; // Directory
} elseif (($perms & 0x2000) == 0x2000) {
$info = 'c'; // Character special
} elseif (($perms & 0x1000) == 0x1000) {
$info = 'p'; // FIFO pipe
} else {
$info = 'u'; // Unknown
}
# オーナー権限
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));
# グループユーザー権限
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));
# その他ユーザー権限
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));
echo $info; //-rw-rw-rw-
?>
filesize
ファイルサイズを取得
unknown
ファイル名のファイルサイズを返します。 失敗した場合にFALSEを返し、E_WARNING レベルのエラーが発生します。
PHPの数値型は符号付整数なので、2GB より大きなファイルは期待と反する値を返すことがあります。
そのためファイルサイズが 2~4GB ある場合は、返り値をsprintf('%u', filesize(ファイル名));
としてフォーマットしてください。
<?
$fname = "sample.txt";
//ファイルサイズの取得
$fsize = filesize($fname);
echo "ファイルサイズ:" . $fsize ." byte"; //ファイルサイズ:34 byte
//2GB~4GBのファイルサイズの場合は sprintf()関数を使用してフォーマットする
echo sprintf('%u', $fsize);
?>
filetype
ファイルタイプを取得
unknown
ファイル名の型をfifo、char、dir、block、link、file、unknownのいずれかで返します。 ファイル名が存在しない場合など失敗した場合にFALSEを返します。 またこの関数は stat コールに失敗したり、未知のファイルタイプであった場合に E_NOTICEレベルのエラーが発生します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
echo filetype('./sample.txt'); // file
echo filetype('./include'); // dir
//存在しない場合は FALSE を返す
var_dump(filetype('./hoge')); //bool(false)
?>
flock
ファイルをロックする
unknown
ファイルポインタが指すファイルを指定したロックモードでロックし、成功した場合にTRUE、失敗した場合にFALSEを返します。
通常は、ロック中にロックしようとすると「ブロック(開放されるまでそこで待機)」されますが、LOCK_SH | LOCK_NBやLOCK_EX | LOCK_NBのように指定すると、ロック中でもブロックせずに、ただFALSEを返してスルーします。
アンロックしなくても、クローズすれば自動的にロックは開放されます。
値 | 説明 |
---|---|
LOCK_SH | 共有ロック(読み手) 同じモードでのロックはブロックしない。 |
LOCK_EX | 排他的ロック(書き手) アンロックされるまで排他的にブロックする。 |
LOCK_NB | ノンブロック 「LOCK_SH | LOCK_NB」や「LOCK_EX | LOCK_NB」のように指定する。 ロック中のときはブロックを行わずにFALSEを返す。 |
LOCK_UN | アンロック ロックを開放する |
<?
$fname = "sample.txt";
$fp = fopen($fname, "w"); //書込専用で開く
flock($fp, LOCK_EX); //ロック実行(書込時)
fwrite($fp, "あいうえお"); //先頭から書き込み
flock($fp, LOCK_UN); //ロック解除
fclose($fp); //ファイルを閉じる
?>
fopen
ファイルをオープンする
unknown
ファイル名をオープンします。 ファイルがオープンできなかった場合にFALSEを返し、Warningが発生します。
ファイル位置を含んだエラーメッセージを非表示にするには、@fopen ( filename )
という風に関数の頭にエラー演算子(@)を付けて使用します。
オプションの第3引数インクルードパス使用にTRUEを指定すると、インクルードパス内のファイルも扱えるようになります(デフォルトはFALSE)。
オプションの第4引数コンテキストには、stream_context_create()で作成したコンテキストリソースを指定します。
ファイルをオープンした後は、必ずfclose()で、ファイルをクローズしてください。
モード | 説明 |
---|---|
r | 読込専用で開く ファイルポインタをファイルの先頭に置く。 |
r+ | 読込/書込用で開く ファイルポインタをファイルの先頭に置く。 |
w | 書込専用で開く ファイルポインタをファイルの先頭に置き、ファイルサイズをゼロにする。 ファイルが存在しない場合は、ファイルが新規に作成される。 |
w+ | 読込/書込用で開く ファイルポインタをファイルの先頭に置き、ファイルサイズをゼロにする。 ファイルが存在しない場合は、ファイルが新規に作成される。 |
a | 書込専用で開く ファイルポインタをファイルの終端に置く。 ファイルが存在しない場合は、ファイルの新規に作成される。 |
a+ | 読込/書込用で開く ファイルポインタをファイルの終端に置く。 ファイルが存在しない場合は、新規に作成される。 |
<?
#相対パス、絶対パス(URL)の両方で指定可能
$fp = fopne("./counter/count.txt","r");
$fp = fopen("http://www.sample.com/counter/count.txt","r");
#カウンターの例
$fp = @fopen("count.txt", "r+");//読み書きモードでオープン
$count = fgets($fp, 10);//10バイトまで取得
@fclose($fp);//ファイルを閉じる
printf("%05d", $count); //5桁にフォーマットして表示
?>
fpassthru
fopen()関数で開いたファイルの内容を全て出力
unknown
ファイルポインタをEOFまで読み込んで出力し、読み込んだバイト数を返します。 エラーが発生した場合にFALSEを返します。
第1引数ファイルポインタは有効なファイルポインタであり、fopen()またはfsockopen()関数で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
<?
/* sample.txt の中身
Hello World!
*/
$fp = fopen("sample.txt", "r");
$a=fpassthru($fp);
fclose($fp);
echo $a;
//Hello World! 14
?>
fputcsv 
行をCSV形式にフォーマットし、ファイルに書き込む
unknown
フィールドで配列として渡された行をCSVとしてフォーマットし、ファイルポインタで指定したファイルに書込ます。 一番最後に改行が追加されます。 返り値として、書き込んだ文字列の長さを返します。 失敗した場合はFALSEを返します。
第1引数ファイルポインタは有効なファイルポインタであり、fopen()またはfsockopen()関数で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
第2引数フィールドには、値の配列を指定します。
オプションの第3引数区切り文字には、フィールドの区切り文字(1文字のみ)を指定します。 デフォルトはカンマ区切りです。
オプションの第4引数囲い文字には、フィールドを囲う文字(1文字のみ)を指定します。 デフォルトはダブルクウォートです。
<?
$list=array (
'aaa,bbb,ccc,dddd',
'123,456,789',
'"aaa","bbb"'
);
$fp=fopen('file.csv', 'w');
foreach ($list as $line) {
echo fputcsv($fp, split(',', $line)); // 17 12 20
}
fclose($fp);
/*
▼ファイルの内容
aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""
*/
?>
fread
fopen()関数で開いたファイルを、バイナリモードで指定したバイト数分読み込む
unknown
ファイルポインタから、ファイル内容をバイナリモードで読込、最大バイト数読み込んだか、EOFに達した時点で読込を終えます。
Windows 環境では、バイナリとテキストファイルの形式が異なるため、fopen()の引数にb(バイナリモード)を指定してファイルをオープンする必要があります。
<?
/* sample.txtの中身
あいうえお
かきくけこ
さしすせそ
*/
function FileRead($filename) {
$str = "";
// バイナリモードでオープン
$fp = @fopen($filename, "rb" );
//ファイル内容を全て変数に読み込む
if($fp) {
$str = @fread($fp, filesize($filename)+1);
}
@fclose($fp);
// 改行コードの前に<br>を挿入
$str = nl2br($str);
return $str;
}
echo FileRead("sample.txt");
/*
あいうえお<br>
かきくけこ<br>
さしすせそ
*/
?>
fscanf
フォーマットに基づいてファイルからの入力を処理する
unknown
sscanf()に似ていますが、ファイルポインタから入力を取得し、指定したフォーマットに基づいて解釈を行います。
この関数はコールされる度に、ファイルから1行ずつ読込ます。 引数が2つの場合は、処理された値は配列として返されます。 オプション引数を指定した場合は、代入された値の数が返されます。 そのため、オプション引数は参照渡しにする必要があります。
第1引数ファイルポインタは有効なファイルポインタであり、fopen()で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
第2引数フォーマットには、フォーマット文字列を指定します。 sprintf()を参照してください。
オプションの第3引数...には、オプションで代入する値を指定します。
<?
$handle=fopen("users.txt", "r");
while($userinfo=fscanf($handle, "%s\t%s\t%s\n")){
list ($name, $profession, $countrycode)=$userinfo;
echo $name."/".$profession."/".$countrycode."<br>";
}
fclose($handle);
/*
javier/argonaut/pe
hiroshi/sculptor/jp
robert/slacker/us
luigi/florist/it
*/
?>
fseek
ファイルポインタを移動する
unknown
ファイルポインタをオフセットバイト目にセットします。 成功した場合に0、失敗した場合に-1を返します。
オプションの第3引数位置設定を指定すると、それにオフセットを加えた位置に設定されます。 デフォルトはSEEK_SET。ファイルの先頭からのバイト数目となります。 位置設定は、以下の3つの定数を指定できます。
EOFより先の位置にシークしてもエラーとはならないので注意してください。
定数 | 内容 |
---|---|
SEEK_SET | ファイルの先頭からオフセットバイト目(デフォルト) |
SEEK_CUR | 現在位置からオフセットバイト目 |
SEEK_END | ファイルの終端からオフセットバイト目(ファイルの終端より手前に設定するには、オフセットに負の値を指定する) |
<?
//カウンター
$fname = "count.dat";
$fp = fopen($fname, "r+");
flock($fp, LOCK_EX);
$counter = fgets($fp,10);
$counter++;
//ファイルポインタを先頭へ移動
fseek($fp, 0); //rewind($fp);でもOK
fputs($fp, $counter);
flock($fp, LOCK_UN);
fclose($fp);
//カウンター表示
echo $counter."人目";
?>
fstat
ファイルポインタからファイルに関する情報を取得する
unknown
指定したファイルポインタによって開かれたファイルの統計情報を取得し、配列として返します。 この関数は、stat()に似ていますが、ファイル名の変わりにオーオプンしたファイルポインタを指定する点が異なります。 配列のフォーマットは、stat()を参照してください。
第1引数ファイルポインタは有効なファイルポインタであり、fopen()で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
<?
# ファイルをオープンする
$fp=fopen("somefile.txt", "r");
# 統計情報を収集する
$fstat=fstat($fp);
# ファイルをクローズする
fclose($fp);
# 連想配列部のみ表示する
echo nl2br(print_r(array_slice($fstat, 13), true));
/*
Array
(
[dev] => 0
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 0
[size] => 18
[atime] => 1241502353
[mtime] => 1241498031
[ctime] => 1241492883
[blksize] => -1
[blocks] => -1
)
*/
?>
ftell
ファイルの読み書き用ポインタの現在位置を返す
unknown
指定したファイルポインタの読み書き用ポインタの現在位置を返します。 返り値は、ファイルポインタが示すファイルポインタの位置(ファイルストリーム上のオフセット位置)を整数で返します。 エラーが発生した場合はFALSEを返します。
第1引数ファイルポインタは有効なファイルポインタであり、fopen()またはpopen()で正常にオープンされたファイルで、まだfclose()で閉じられていないファイルを指している必要があります。
<?
# ファイルをオープンし、データを読み込む
$fp=fopen("somefile.txt", "r");
$data=fgets($fp, 12);
# ファイルポインタの位置を取得する
echo ftell($fp); // 8
# ファイルをクローズする
fclose($fp);
?>
ftruncate
ファイルを指定した長さに丸める
unknown
ファイルポインタがを引数として、ファイルを指定したサイズに丸めます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数ファイルポインタには、書込モードでオープンしたファイルポインタを指定します。
第2引数サイズには、ファイルを丸める大きさを指定します。 サイズがファイルサイズより大きい場合は、NULLバイトを用いてファイルを拡張します。 小さい場合には、余分なデータが削除されます。
<?
# ファイルをオープンする
$filename = 'somefile.txt';
$handle = fopen($filename, 'r+');
# ファイルを丸める
ftruncate($handle, rand(1, filesize($filename)));
rewind($handle);
# 丸めたファイルの内容を読み込んで表示
echo fread($handle, filesize($filename));
fclose($handle);
?>
fwrite / fputs
ファイル書込
unknown
int fputs ( resource ファイルポインタ, string $文字列[, int $最大バイト数] )
ファイルポインタが指す位置に文字列を書込、書き込んだバイト数を返します。 エラーが発生した場合にFALSEを返します。
最大バイト数を指定した場合、書込サイズは最大バイト数に制限されます。
第1引数ファイルポインタには、fopen()でオープンしたファイルポインタを指定します。
第2引数文字列には、ファイルに書き込む文字列を指定します。
オプションの第3引数最大バイト数を指定した場合は、最大バイト数分の書込が完了した時点、あるいは文字列が終わりに達した時点のいずれかの早い方の時点で書込が中止されます。
fput()関数は、fwrite()関数のエイリアスです。
<?
//カウンター
$fname = "count.dat";
$fp = fopen($fname, "r+");
flock($fp, LOCK_EX);
$counter = fgets($fp,10);
$counter++;
fseek($fp, 0);
fputs($fp, $counter); //fwrite($fp, $counter);でもOK
flock($fp, LOCK_UN);
fclose($fp);
//カウンター表示
echo $counter."人目";
?>
glob
パターンにマッチするパス名を探す
unknown
libcのglob()関数で使用されるルールに基づいて、パターンにマッチするすべてのパス名を検索します。 返り値としてマッチするファイル/ディレクトリを含む配列を返します。 マッチするファイルが見つからなかった場合には空の配列を返します。 失敗した場合はFALSEを返します。
第1引数パターンには、パターンを指定します。
オプションの第2引数フラグには下記を指定することができます。
フラグ | 説明 |
---|---|
GLOB_MARK | 各ディレクトリにスラッシュを追加します。 |
GLOB_NOSORT | ディレクトリに存在するファイルを返します(ソートはされません)。 |
GLOB_NOCHECK | 検索パターンにマッチするファイルが見つからない場合に、 検索パターン自身を返します。 |
GLOB_NOESCAPE | バックスラッシュによるメタ文字のクォートを行いません。 |
GLOB_BRACE | {a,b,c}を展開し「a」、「b」あるいは「c」のいずれかにマッチさせます。 |
GLOB_ONLYDIR | パターンにマッチするディレクトリのみを返します。 |
GLOB_ERR(PHP v5.1.0~) | (ディレクトリが読めないなどの) 読込エラー時に停止します。デフォルトではエラーは無視されます。 |
<?
# 拡張子がTXTのファイルを探す
foreach(glob("*.txt") as $filename)x{
echo "$filename size " . filesize($filename) . "\n";
}
/*
shared_file.txt size 0
somefile.txt size 41
users.txt size 94
*/
?>
is_dir
ディレクトリかどうか調べる
unknown
ファイル名が存在し、かつディレクトリである場合にTRUEを返します。 そうでない場合にFALSEを返します。 ファイル名には相対パスを指定します。 そのためカレントディレクトリから相対的にチェックされます。
この関数の返り値はキャッシュされます。 キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
// ファイル名がディレクトリでない場合はFALSEが返る
var_dump(is_dir('sample.txt')) . "\n"; //bool(false)
//カレントディレクトリからの相対パス
var_dump(is_dir('./include')) . "\n"; //bool(true)
//カレントディレクトリ
var_dump(is_dir('.')); //bool(true)
//一つ上のディレクトリ
var_dump(is_dir('..')); //bool(true)
?>
is_executable
ファイルが実行可能かどうか調べる
unknown
ファイル名が存在し、かつ実行可能である場合にTRUEを返します。 そうでない場合にFALSEを返します。
PHP5.0.0以降、Windows 環境でも使用できるようになりました。
<?
if (PHP_VERSION >= "5.0.0") {
$filename = '/home/vincent/somefile.sh';
if (is_executable($filename)) {
echo $filename.' は実行可能です';
} else {
echo $filename.' は実行不可です';
}
}
?>
is_file
通常ファイルかどうかを調べる
unknown
ファイル名が存在し、かつ通常のファイルである場合にTRUEを返します。 そうでない場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "./sample.txt";
if (is_file($filename)) echo "通常のファイルです";
else echo "通常のファイルではありません";
?>
is_link
ファイルがシンボリックリンクかどうか調べる
unknown
ファイル名が存在し、かつシンボリックである場合にTRUEを返します。 そうでない場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename="sample.txt";
if (is_link($filename)){
echo "シンボリックリンクです";
echo nl2br(print_r(lstat($filename),true));
}else{
echo "シンボリックリンクではありません";
echo nl2br(print_r(stat($filename),true));
}
?>
is_readable
ファイルが読込可能か調べる
unknown
ファイル名が存在し、かつ読込可能である場合にTRUEを返します。 そうでない場合にFALSEを返します。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = 'sample.txt';
if (is_readable($filename)) echo '読み込み可能です';
else echo "読み込み不可です";
?>
is_uploaded_file
HTTP POST によりアップロードされたファイルかどうかを調べる
unknown
ファイル名が、HTTP POSTによりアップロードされたファイルである場合にTRUEを返し、そうでない場合にFALSEを返します。 悪意のあるユーザーがアップロードファイルを偽装することを防止するのに有用です。
この関数は、\_FILES['userfile']['tmp_name']
のような引数を指定する必要があります。
また\_FILES['userfile']['name']
は、サーバにアップロードしたファイルでないと動作しません(ローカルファイル×)。
<?
//アップロードフラグ
$upd_flg = false;
//アップロード先のディレクトリヘのパスを設定
$upDir = "C:\\Program Files\\Apache Group\Apache2\\htdocs\\test\\";
//「アップロード」ボタンが押下されたら実行
if($_POST['btnupload']){
//アップロードされたファイルであれば処理を続行
if(is_uploaded_file($_FILES['UploadFile']['tmp_name'])) {
echo "'" . $_FILES['UploadFile']['tmp_name'] . "'は、HTTP POST で正常にアップロードされたファイルです<br>\n";
$fpass = $upDir.$_FILES['UploadFile']['name'];
//アップロードしたファイルを移動
move_uploaded_file($_FILES['UploadFile']['tmp_name'], $fpass);
$upd_flg = true;
}else{
echo "'" . $_FILES['UploadFile']['tmp_name'] . "'は、偽装されたアップロードファイルの可能性があります<br>\n";
$fpass = '';
$upd_flg = false;
}
}
?>
<?
//ENCTYPE属性に、MULTIPART/FORM-DATA を指定
echo "<form enctype='multipart/form-data'
action='".basename($_SERVER['SCRIPT_NAME'])."'
method='post'>";
// ファイルをアップロードするには、対象となるファイル名を指定
// INPUTのTYPE属性に"file"を指定すると、「参照」ボタンが表示される
echo "アップロードするファイル:<input type='file' name='UploadFile' size='40'><br>";
// アップロード後のファイル名を変更する場合は必ず指定
echo "新しいファイル名(任意): <input type='text' name='NewName' size='40'><br>";
// アップロードするファイルの最大バイト数を指定
echo "<input type='hidden' name='MAX_FILE_SIZE' value='10000'>";
// アップロードボタン(フォーム送信ボタン)
echo "<input type='submit' name='btnupload' value='アップロード'> ";
// フォームのクリアボタン
echo "<input type='reset' value='クリア'>";
echo "</form>";
?>
<?
// 送信されたデータ確認
echo nl2br(print_r($HTTP_POST_FILES,true));
/*
Array(
[UploadFile] => Array(
[name] => sample.txt
[type] => text/plain
[tmp_name] => C:\WINDOWS\TEMP\php167.tmp
[error] => 0
[size] => 34
)
)
*/
echo nl2br(print_r($HTTP_POST_VARS,true));
/*
Array (
[NewName] => sample.txt.bak
[MAX_FILE_SIZE] => 10000
[btnupload] => アップロード
)
*/
?>
is_writable / is_writeable
ファイルが書込可能かどうか調べる
unknown
bool is_writeable ( string $ファイル名 )
ファイル名が存在かつ書込可能な場合にTRUEを返し、そうでない場合にFALSEを返します。 ファイル名にはディレクトリ名を指定できるので、ディレクトリが書込可能かどうかも調べられます。
is_writeable()関数は、is_writable関数のエイリアスです。
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename = "sample.txt";
if(is_writable ($filename)) echo "書き込み可";
else echo "書き込み不可";
?>
link 
ハードリンクを作成する
unknown
リンク対象にリンクの名前でハードリンクを作成します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
PHP v.5.3.0~、Windows環境でも動作するようになりました。
<?
# ハードリンクの作成
$source = 'source.ext'; // これは、既存のファイル名です
$dest = 'newfile.ext'; // これは、リンク先としたいファイル名です
link($source, $dest);
?>
linkinfo 
リンクに関する情報を取得する
unknown
リンクに関する情報を取得します。 この関数を使用して、パスに指定したリンクの存在確認を行うことができます。 返り値として、lstatシステムコールで返されたUnix C言語のstat構造体のst_devフィールドを返します。 失敗した場合は0を返します。 エラーが発生した場合はFALSEを返します。
第1引数パスには、リンクへのパスを指定します。
PHP v.5.3.0~、Windows環境でも動作するようになりました。
<?
# リンクに関する情報を取得する
echo linkinfo('/vmlinuz'); // 835
?>
lstat
ファイルまたはシンボリックリンクに関する情報を取得する
unknown
ファイル名(ファイル または シンボリックリンク)についての統計情報を返し、失敗した場合にFALSEを返します。 stat()関数と動作は同じですが、ファイル名がシンボリックリンクの場合に、ファイルの実体ではなくシンボリックリンクの統計情報を返す点が異なります。
<?
$filename="./sample.txt";
echo nl2br(print_r(lstat($filename),true));
/*
658800 Bytes
Array
(
[0] => 2
[1] => 0
[2] => 33206
[3] => 1
[4] => 0
[5] => 0
[6] => 2
[7] => 34
[8] => 1146619931
[9] => 1146619931
[10] => 1146619931
[11] => -1
[12] => -1
[dev] => 2
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 2
[size] => 34
[atime] => 1146619931
[mtime] => 1146619931
[ctime] => 1146619931
[blksize] => -1
[blocks] => -1
)
*/
?>
mkdir
ディレクトリを作成する
unknown
パス名に指定したディレクトリを作成し、パーミッションをモードに設定します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数パスには、ディレクトリへのパスを指定します。
オプションの第2引数モードには8進数でパーミッションの値を指定します。 デフォルトは0777(最も緩いアクセス制限)。 ※Windows環境ではモードは無視されます。
ディレクトリを削除する場合は、rmdir()関数を使用してください。
<?
mkdir ("/path/to/my/dir", 0700);
?>
move_uploaded_file
アップロードされたファイルを移動
unknown
指定したファイル名のファイルが有効なアップロードファイルであるなら、移動先ファイル名で指定したファイル名に移動します。
ファイル名が有効でない場合、あるいは移動に失敗した場合は、FALSEを返し、警告が発生します。 移動先ファイル名が既に存在する場合は、上書きされますので注意してください。
第1引数ファイル名には、アップロードしたファイルのファイルへのパスを指定します。
第2引数移動先ファイル名には、ファイルの移動先のパスを指定します。
<?
//ファイルフラグ
$upd_flg = false;
//アップロード先のディレクトリヘのパスを設定
$upDir = "C:\\Program Files\\Apache Group\\Apache2\\htdocs\\test\\";
//「アップロード」ボタンが押下されたら実行
if($_POST['btnupload']){
//テンポラリファイル名がある場合
if(is_uploaded_file($_FILES['UploadFile']['tmp_name'])){
echo "'" . $_FILES['UploadFile']['tmp_name'] . "'は、HTTP POST で正常にアップロードされたファイルです<br>\n";
if($_POST['NewName'] != ''){
//ファイル名を変更する場合
$fpass = $upDir . $_POST['NewName'];
}else{
//ファイル名を変更しない場合
$fpass = $upDir . $_FILES['UploadFile']['name'];
}
move_uploaded_file($_FILES['UploadFile']['tmp_name'], $fpass);
$upd_flg = true;
}else{
echo "'" . $_FILES['UploadFile']['tmp_name'] . "'は、偽装されたアップロードファイルの可能性があります<br>\n";
$fpass = '';
$upd_flg = false;
}
}
?>
<?
//ENCTYPE属性に、MULTIPART/FORM-DATA を指定
echo "<form enctype='multipart/form-data'
action='".basename($_SERVER['SCRIPT_NAME'])."'
method='post'>";
// ファイルをアップロードするには、対象となるファイル名を指定
// INPUTのTYPE属性に"file"を指定すると、「参照」ボタンが表示される
echo "アップロードするファイル:<input type='file' name='UploadFile' size='40'><br>";
// アップロード後のファイル名を変更する場合は必ず指定
echo "新しいファイル名(任意): <input type='text' name='NewName' size='40'><br>";
// アップロードするファイルの最大バイト数を指定
echo "<input type='hidden' name='MAX_FILE_SIZE' value='10000'>";
// アップロードボタン(フォーム送信ボタン)
echo "<input type='submit' name='btnupload' value='アップロード'> ";
// フォームのクリアボタン
echo "<input type='reset' value='クリア'>";
echo "</form>";
?>
<?
// 送信されたデータ確認
echo nl2br(print_r($HTTP_POST_FILES,true));
/*
Array(
[UploadFile] => Array(
[name] => sample.txt
[type] => text/plain
[tmp_name] => C:\WINDOWS\TEMP\php167.tmp
[error] => 0
[size] => 34
)
)
*/
echo nl2br(print_r($HTTP_POST_VARS,true));
/*
Array (
[NewName] => sample.txt.bak
[MAX_FILE_SIZE] => 10000
[btnupload] => アップロード
)
*/
?>
parse_ini_file
設定ファイルをパースする
unknown
ファイル名で指定したiniファイルを読み込み、連想配列としてその設定値を返します。 失敗した場合はFALSEを返します。 初期ファイルの構造は、php.iniの構造と同じです。
第1引数ファイル名には、パースしたいiniファイルのファイル名を指定します。
オプションの第2引数process_sectionsにTRUEを指定すると、セクション名と設定が含まれた多次元配列を取得することができます。 デフォルトはFALSEです。
オプションの第3引数scanner_mode(PHP v5.3.0~)にINI_SCANNER_RAWを指定すると、オプションの値はパースされません。 デフォルトは、INI_SCANNER_NORMALです。
<?
/* ▼sample.iniの内容
; これは設定ファイルのサンプルです。
; php.ini と同様、';' で始まる行はコメントです。
[first_section]
one = 1
five = 5
animal = BIRD
[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"
[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"
*/
define('BIRD', 'Dodo bird');
# セクションを無視してパースする
$ini_array=parse_ini_file("sample.ini");
echo "<pre>".print_r($ini_array, true)."</pre>";
/*
▼出力結果
Array
(
[one] => 1
[five] => 5
[animal] => Dodo bird
[path] => /usr/local/bin
[URL] => http://www.example.com/~username
[phpversion] => Array
(
[0] => 5.0
[1] => 5.1
[2] => 5.2
[3] => 5.3
)
)
*/
# セクションを意識してパースする。
$ini_array=parse_ini_file("sample.ini", true);
echo "<pre>".print_r($ini_array, true)."</pre>";
/*
▼出力結果
Array
(
[first_section] => Array
(
[one] => 1
[five] => 5
[animal] => Dodo bird
)
[second_section] => Array
(
[path] => /usr/local/bin
[URL] => http://www.example.com/~username
)
[third_section] => Array
(
[phpversion] => Array
(
[0] => 5.0
[1] => 5.1
[2] => 5.2
[3] => 5.3
)
)
)
*/
?>
pathinfo
ファイルパスに関する情報を返す
unknown
パス指定したファイルパスに関する情報を有する連想配列を返します。 オプションを使用すると、すべての要素を選択しない限り、返り値が文字列となります。
第1引数パスには調べたいファイルパスを指定します。
オプションの第2引数オプションには、どの要素を返すかを、下記の定数の組み合わせで指定します。 デフォルトはすべての要素を返します。
- PATHINFO_DIRNAME - ディレクトリ名
- PATHINFO_BASENAME - ファイル名
- PATHINFO_EXTENSION - 拡張子
- PATHINFO_FILENAME - ファイル名(拡張子なし) ※PHP v5.2.0~
<?
$path_parts=pathinfo('index.html');
# ディレクトリ名
echo $path_parts['dirname'], "\n";
# ファイル名
echo $path_parts['basename'], "\n";
# 拡張子
echo $path_parts['extension'], "\n";
# ファイル名(拡張子なし)
echo $path_parts['filename'], "\n"; // PHP v5.2.0~
/*
▼出力結果
.
index.html
html
index
*/
# ファイル名と拡張子だけ返す
echo $path_parts=pathinfo('index.html', PATHINFO_EXTENSION); // html
?>
pclose
プロセスへのファイルポインタを閉じる
unknown
popen()で開いたパイプへのファイルポインタを閉じます。 返り値として実行していたプロセスの終了ステータスを返します。
第1引数ファイルポインタに指定するポインタは有効なポインタであり、popen()によって正常にオープンされたポインタである必要があります。
<?
$handle=popen("index.html", "r");
echo pclose($handle); // 1
?>
popen
プロセスへのファイルポインタを開く
unknown
コマンドで指定したコマンドのフォークによってできたプロセスへのパイプを開きます。 エラーが発生した場合はFALSEを返します。
この関数は、fopen()で返されるファイルポインタと同様のポインタを返しますが、それは読み書きのいずれか一方でのみ使用される一方方向のストリームであり、pclose()によって閉じられなければならない点が異なります。 このポインタは、fgets()、fgetss()。fwrite()のいずれかで使用することができます。
<?
$handle=popen("/bin/ls", "r");
?>
readfile
指定したファイルの内容を読み込んで、その全てを出力
unknown
ファイル名を読み込んで出力し、ファイルから読み込んだバイト数を返します。 エラーが発生した場合にFALSEを返します。
ファイル位置を含んだエラーメッセージを非表示にするには、@readfile ( filename )
という風に関数の頭にエラー演算子(@)を付けて使用します。
オプションの第2引数インクルードパス使用にTRUEを指定すると、インクルードパス内のファイルも扱えるようになります(デフォルトはFALSE)。 インクルードパスは、php.ini のインクルードパスを指定しますが、デフォルトでは含まれていません。

<?
# ダウンロードの強制
$file='/content/img/pic1.png';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
<?
/* 【sample.txt】
あいうえお
かきくけこ
さしすせそ
*/
readfile("sample.txt");
//あいうえおかきくけこさしすせそ
//ソースを表示すると以下のように改行されている
あいうえお
かきくけこ
さしすせそ
?>
rename
ファイルをリネーム(移動)する
unknown
ファイル名をリネーム後ファイルにリネームします。 成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
//現在のファイル名
$fname = "sample.txt";
//変更後のファイル名
$frename = "change.txt";
if(rename ($fname, $frename)) echo "リネーム成功";
else echo "リネーム失敗";
?>
rewind
ファイルポインタの位置を先頭に戻す
unknown
ファイルポインタで指定したファイルのポインタの位置を、ファイルの先頭に戻します。 成功した場合にTRUE、失敗した場合にFALSEを返します。 返り値が違う以外、fseek ( ファイルポインタ, 0 ) と同じ動作です。
第1引数ファイルポインタは有効なポインタで、fopen()で正常に開かれたファイルポインタである必要があります。
追記モード('a'または'a+')でファイルを開いた場合は、ポインタの位置は関係なくファイルにデータが追記されます。
<?
//カウンター
$fname = "count.dat";
$fp = fopen($fname, "r+");
flock($fp, LOCK_EX);
$counter = fgets($fp,10);
$counter++;
//ファイルポインタを先頭へ移動
rewind($fp); //fseek($fp, 0);でもOK
fputs($fp, $counter);
flock($fp, LOCK_UN);
fclose($fp);
//カウンター表示
echo $counter."人目";
?>
rmdir
ディレクトリを削除する
unknown
ディレクトリを削除します。成功した場合にTRUE、失敗した場合にFALSEを返します。 ディレクトリが空でなかったり、パーミッションに削除する権限がない場合もFALSEとなります。
ディレクトリを作成する場合は、mkdir()関数を使用してください。
<?
$dirname = "../sample";
// ディレクトリ作成
mkdir($dirname, 0700);
// ディレクトリ削除
if(rmdir($dirname)) echo "'" . $dirname ."' の削除に成功しました";
else echo "ディレクトリ削除失敗";
?>
stat
ファイルに関する情報を取得
unknown
ファイル名に指定したファイルに関する統計情報を返します。 失敗した場合にFALSEを返し、Warningが発生します。
ファイル名がシンボリックリンクの場合は、シンボリックリンクではなくファイル自体の統計情報が返されます。 シンボリックリンクの統計情報を取得したい場合は、lstat()関数を使用してください。
ファイルの統計情報は、以下の要素を持つ配列です。 ゼロベース(添字は数値)の配列に加えて、各パラメータごとに連想配列としてもアクセス可能です(※PHP4.0.6~)。
数値 | 連想配列 (PHP4.0.6~) | 説明 |
---|---|---|
0 | dev | デバイス番号 |
1 | ino | inode 番号 |
2 | mode | inode プロテクトモード |
3 | nlink | リンク数 |
4 | uid | 所有者のユーザ ID |
5 | gid | 所有者のグループ ID |
6 | rdev | inode デバイス の場合、デバイスの種類(*) |
7 | size | バイト単位のサイズ |
8 | atime | 最終アクセス時間 (Unix タイムスタンプ) |
9 | mtime | 最終修正時間 (Unix タイムスタンプ) |
10 | ctime | 最終 inode 変更時間 (Unix タイムスタンプ) |
11 | blksize | ファイル IO のブロックサイズ(*) |
12 | blocks | ブロックの確保数 |
この関数の返り値はキャッシュされます。
キャッシュをクリアするには、clearstatcache()関数を使用します。
<?
$filename="./sample.txt";
echo nl2br(print_r(stat($filename),true));
/*
658800 Bytes
Array
(
[0] => 2
[1] => 0
[2] => 33206
[3] => 1
[4] => 0
[5] => 0
[6] => 2
[7] => 34
[8] => 1146619931
[9] => 1146619931
[10] => 1146619931
[11] => -1
[12] => -1
[dev] => 2
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 2
[size] => 34
[atime] => 1146619931
[mtime] => 1146619931
[ctime] => 1146619931
[blksize] => -1
[blocks] => -1
)
*/
?>
tempnam
一意のファイル名を生成する
unknown
一意なテンポラリファイル名のファイルを指定したディレクトリに指定します。 パーミッションは0600に設定されます。 指定したディレクトリが存在しない場合は、システムのテンポラリディレクトリにファイルを生成し、そのファイル名を返します。 失敗した場合は、FALSEを返します。
第1引数ディレクトリには、テンポラリファイルを作成するディレクトリを指定します。
第2引数prefixには、作成するテンポラリファイルのプレフィックスを指定します。 Windows環境では、プレフィックスの最初の3文字のみが使用されます。
<?
# 一意のファイル名を生成する
echo $tmpfname=tempnam("/tmp", "ABCDEF"); // C:\WINDOWS\Temp\ABC314.tmp
$handle = fopen($tmpfname, "w");
fwrite($handle, "writing to tempfile");
fclose($handle);
// ここで何か行う
unlink($tmpfname);
?>
tmpfile
テンポラリファイルを作成する
unknown
書込可能なモード(w+)で一意な名前のテンポラリファイルを作成し、ファイルポインタを返します。 このテンポラリファイルは、ファイルがfclose()で閉じられた時、またはスクリプトが終了された時に自動的に削除されます。
返り値としてファイルポインタを返します。 これはfopen()で返されるファイルポインタと同じものです。 失敗した場合はFALSEを返します。
<?
# テンポラリファイルを作成する
$temp=tmpfile();
fwrite($temp, "writing to tempfile");
fseek($temp, 0);
echo fread($temp, 1024); // writing to tempfile
# テンポラリファイルを削除する
fclose($temp);
?>
touch
ファイルの最終アクセス時刻および最終更新日を設定する
unknown
ファイル名で指定したファイルの最終更新日時を、timeで指定した値に設定します。 指定したファイルが存在しない場合は、新しくファイルが作成されます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数ファイル名には、処理したいファイルへのパスを指定します。
オプションの第2引数timeには、設定する時刻を指定します。 省略した場合は、現在時刻(=time())が使用されます。
オプションの第3引数atimeには、指定したファイルの最終アクセス時刻が存在する場合に、その値が設定されます。 存在しない場合は、timeが設定されます。
引数の数に関係なく、アクセス時刻は常に変更されることに注意してください。
<?
$filename="shared_file.txt";
if(touch($filename)){
echo "'$filename'の最終更新日時を現在日時に変更しました";
}else{
echo "'$filename'の最終更新日時を変更できませんでした";
}
// 'shared_file.txt'の最終更新日時を現在日時に変更しました
?>
unlink
ファイルに関する情報を返す
unknown
ファイル名を削除します。成功した場合にTRUE、失敗した場合にFALSEを返します。
ディレクトリを削除する場合は、rmdir()関数を使用してください。
<?
//削除するファイル名
$fname = "test.txt";
if(unlink ($fname)) echo "ファイルを削除しました";
else echo "ファイルが削除できませんでした";
?>