| 分類 | 関数 | 説明 |
|---|---|---|
| fopen | ファイルまたはURLをオープンする | |
| fclose | オープンされたファイルポインタをクローズする | |
| feof | ファイルポインタがファイル終端に達しているかどうか調べる | |
| fseek | ファイルポインタを移動する | |
| rewind | ファイルポインタの位置を先頭に戻す | |
| fgetc | ファイルポインタから1文字取り出す | |
| ftell | ファイルの読み書き用ポインタの現在位置を返す | |
| fgets | ファイルポインタから1行取得する | |
| fgetss | ファイルポインタから1行取り出し、HTMLタグを取り除く | |
| fgetcsv | ファイルポインタから行を取得し、CSVフィールドを処理する | |
| fputcsv | 行をCSV形式にフォーマットし、ファイルポインタに書き込む | |
| fpassthru | ファイルポインタ上に残っているすべてのデータを出力する | |
| fstat | オープンしたファイルポインタからファイルに関する情報を取得する | |
| stat | ファイルに関する情報を取得する | |
| copy | ファイルをコピーする | |
| rename | ファイルをリネームする | |
| unlink | ファイルを削除する | |
| flock | 汎用のファイルロックを行う | |
| file_exists | ファイルまたはディレクトリが存在するかどうか調べる | |
| is_readable | ファイルが存在し、読み込み可能であるかどうかを知る | |
| バイナリセーフ ※1 | fread | バイナリセーフなファイルの読み込み |
| fwrite (fputs) |
バイナリセーフなファイル書き込み処理 | |
| ファイルの内容 | file_get_contents | ファイルの内容をすべて文字列に読み込む |
| file_put_contents | 文字列をファイルに書き込む | |
| file | ファイル全体を読み込んで配列に格納する | |
| readfile | ファイルを出力する | |
| リンク | link | ハードリンクを作成する |
| linkinfo | リンクに関する情報を取得する | |
| lstat | ファイルあるいはシンボリックリンクの情報を取得する | |
| シンボリックリンク | symlink | シンボリックリンクを作成する |
| is_link | ファイルがシンボリックリンクかどうかを調べる | |
| lchown | シンボリックリンクの所有者を変更する | |
| lchgrp | シンボリックリンクのグループ所有権を変更する | |
| readlink | シンボリックリンク先を返す | |
| パス | pathinfo | ファイルパスに関する情報を返す |
| realpath | 絶対パス名を返す | |
| dirname | 親ディレクトリのパスを返す | |
| basename | パスの最後にある名前の部分を返す | |
| glob | パターンにマッチするパス名を探す | |
| ディレクトリ | mkdir | ディレクトリを作る |
| rmdir | ディレクトリを削除する | |
| is_dir | ファイルがディレクトリかどうかを調べる | |
| グループ | filegroup | ファイルのグループを取得する |
| chgrp | ファイルのグループを変更する | |
| chmod | ファイルのモードを変更する | |
| umask | 現在のumaskを変更する | |
| 所有者 | fileowner | ファイルの所有者を取得する |
| chown | ファイルの所有者を変更する | |
| clearstatcache | ファイルのステータスのキャッシュをクリアする | |
| disk_free_space (diskfreespace) |
ファイルシステムあるいはディスクパーティション上で利用可能な領域を返す | |
| disk_total_space | ファイルシステムあるいはディスクパーティションの全体サイズを返す | |
| fflush | 出力をファイルにフラッシュする | |
| アクセス/更新時刻 | fileatime | ファイルの最終アクセス時刻を取得する |
| filemtime | ファイルの更新時刻を取得する | |
| touch | ファイルの最終アクセス時刻および最終更新日をセットする | |
| filectime | ファイルのinode変更時刻を取得する | |
| fileinode | ファイルのinodeを取得する | |
| fileperms | ファイルのパーミッションを取得する | |
| filesize | ファイルのサイズを取得する | |
| filetype | ファイルタイプを取得する | |
| fnmatch | ファイル名がパターンにマッチするか調べる | |
| fscanf | フォーマットに基づきファイルからの入力を処理する | |
| ftruncate | ファイルを指定した長さに丸める | |
| is_executable | ファイルが実行可能かどうかを調べる | |
| is_file | 通常ファイルかどうかを調べる | |
| is_uploaded_file | HTTP POSTでアップロードされたファイルかどうかを調べる | |
| is_writable (is_writeable) |
ファイルが書き込み可能かどうかを調べる | |
| move_uploaded_file | アップロードされたファイルを新しい位置に移動する | |
| parse_ini_file | 設定ファイルをパースする | |
| parse_ini_string | 設定文字列をパースする | |
| pclose | プロセスのファイルポインタをクローズする | |
| popen | プロセスへのファイルポインタをオープンする | |
| realpath_cache_get | realpathキャッシュ・エントリーを取得 | |
| realpath_cache_size | realpathキャッシュサイズを取得 | |
| set_file_buffer | stream_set_write_bufferのエイリアス | |
| tempnam | 一意なファイル名を生成する | |
| tmpfile | テンポラリファイルを作成する |
※1 バイナリセーフ … NULL文字も安全に処理できる
resource fopen (
string $filename, //
string $mode // ストリームのアクセス形式
[, bool $use_include_path = FALSE // TRUEのとき、include_pathの検索が有効となる
[, resource $context ]] // コンテキスト
)
PHP: fopen - Manual
成功するとファイルポインタが、失敗するとFALSEが返されます。
$modeを「w」や「a」とすると、指定のファイルが存在しないときにはファイルが作成されます。しかしそのファイルまでのパスが存在しないときには、「failed to open stream: No such file or directory」として警告が出力されます。
if (file_exists($filename))
{
$fp = fopen($filename, "r+");
}
else
{
$fp = fopen($filename, "w");
}
bool fclose ( resource $handle )PHP: fclose - Manual
int file_put_contents (
string $filename , // ファイル名
mixed $data // 書き込むデータ
[, int $flags = 0 // オプション
[, resource $context // コンテキストリソース
]] )
PHP: file_put_contents - Manual
$filenameが存在しない場合には作成されます。その$filenameまでのパスが存在しない場合には「failed to open stream: No such file or directory」として処理に失敗します。
書き込むデータは、$dataで
のいずれかを指定できます。このうち配列は、implode()により空文字で連結された文字列として処理されます。
$flagsには下表の値を、論理OR (|) で複数指定できます。
| フラグ | |
|---|---|
| FILE_USE_INCLUDE_PATH | |
| FILE_APPEND | |
| LOCK_EX |
成功した場合には書き込まれたバイト数が、さもなくばFALSEが返されます。
fopen()でファイルを開くとき、モードに「a」か「a+」を指定することにより、ファイルの末尾にデータを書き込めます。
int fwrite (
resource $handle ,
string $string
[, int $length ]
)
PHP: fwrite - Manual
$str = 'abc';
if( $fp = fopen( $filename, 'a' ) )
{
if( flock( $fp, LOCK_EX ) )
{
fwrite( $fp, $str );
flock( $fp, LOCK_UN );
}
fclose( $fp );
}
同一のクエリでも異なる結果を返す場合、キャッシュの有効期限を指示するようにします。さもなくばブラウザなどのキャッシュが参照されてしまい、サーバにリクエストされないことがあります。
string file_get_contents(
string $filename // ファイル名
[, bool $use_include_path = FALSE // インクルードパス
[, resource $context // コンテキストリソース
[, int $offset = -1 // 読み込み開始オフセット
[, int $maxlen // 読み込み最大バイト数
]]]] )
PHP: file_get_contents - Manual
$offsetや$maxlenを指定すれば、ファイルの一部だけを読み込めます。
ファイルが存在しないなど、読み込みに失敗したときはFALSEが返されます。
たとえば「http://example.com/」から読み込むには、次のようにします。
$contents = file_get_contents( 'http://example.com/' );
なおサーバからデータを読み込むならば、cURLの方がより詳細に通信を制御できます。
fgets()では1行分読み込めるため、feof()でファイル終端に達するまでこれをくり返すことでファイル全体を読み込めます。
$url = 'http://example.com/';
$contents = '';
$fp = fopen( $url, 'r' );
if( $fp )
{
while( !feof( $fp ) )
{
$contents .= fgets( $fp );
}
fclose( $fp );
}
string fgets ( resource $handle [, int $length ] )PHP: fgets - Manual
bool feof ( resource $handle )PHP: feof - Manual
バイナリのデータも文字列と同様に読み込めます。ただしデータは文字列として返されるため、数値として扱うにはord()で、16進の文字列にはbin2hex()で変換します。
$fp = fopen( $filename, 'rb' ); $str = fread( $fp, 1 ); $dec = ord( $str );
bool mkdir (
string $pathname
[, int $mode = 0777
[, bool $recursive = FALSE
[, resource $context
]]] )
PHP: mkdir - Manual
mkdir( 'dir' );
mkdir( 'dir/aaa/bbb', 0705, TRUE );
実行時に「No such file or directory in ***」として失敗するならば、$pathnameまでの親ディレクトリが存在しているか確認します。そのとき$recursiveをTRUEとすると、親ディレクトリも作成されます。
たとえばHTMLならばhref="/"と記述することで、ローカルでもリモートでもルートディレクトリを示します。しかしPHPにおいては、ローカルではWindows、リモートではLinuxのように異なる環境の場合には、異なる場所を示すことになります。
たとえば、
file_get_contents( '/sample.php' );
とすると、
のようなパスを読もうとします。これに対処するには、
file_get_contents( $_SERVER[ 'DOCUMENT_ROOT' ].'/sample.php' );
とします。なお$_SERVER[ 'DOCUMENT_ROOT' ]は、dirname( __FILE__ )と記述しても同じです。URIとファイルディレクトリ -- ごく簡単なHTMLの説明 - The Web KANZAKI
または、それぞれの環境でinclude_pathディレクティブで参照するディレクトリを適切に指定しておけば、パスの違いを気にせず済みます。
mixed pathinfo (
string $path
[, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
PHP: pathinfo - Manual
print_r( pathinfo( 'C:\dir\sample.php' ) ); // Array // ( // [dirname] => C:\dir // [basename] => sample.php // [extension] => php // [filename] => sample // ) print_r( pathinfo( '/home/user/www/dir/sample.php' ) ); // Array // ( // [dirname] => /home/user/www/dir // [basename] => sample.php // [extension] => php // [filename] => sample // )
string dirname( string $path )PHP: dirname - Manual
echo( dirname( 'C:\dir\sample.php' ) ); // C:\dir echo( dirname( '/home/user/www/dir/sample.php' ) ); // /home/user/www/dir
$mtime = filemtime( $filename );PHP: filemtime - Manual
または、
$stat = stat( $filename ); $mtime = $stat[ 'mtime' ];PHP: stat - Manual
$stat = fstat( $fp ); $mtime = $stat[ 'mtime' ];PHP: fstat - Manual
stat()ではなく、fstat()です。
fopen()でファイルを開くときに、任意のHTTPヘッダを指定できます。
$options = array(
'http'=>array(
'method'=>'GET',
'header'=>"User-Agent: Mozilla/5.0\r\n".
"Accept-language: ja\r\n"
)
);
$context = stream_context_create( $options );
$fp = fopen( $url, 'r', FALSE, $context );
User-Agentを指定するだけならば、
ini_set( 'user_agent', 'Mozilla/5.0' ); $fp = fopen( $url, 'r' );
として、設定オプションに値を設定する方法もあります。
| プロトコル | 説明 |
|---|---|
| file:// | ローカルファイルシステムへのアクセス |
| http:// | HTTP(s) URLへのアクセス
(HTTPSを利用するには、OpenSSLを有効にする) |
| ftp:// | FTP(s) URLへのアクセス |
| php:// | さまざまな入出力ストリームへのアクセス |
| zlib:// | 圧縮ストリーム |
| data:// | データ (RFC 2397) |
| glob:// | パターンにマッチするパス名の検索 |
| phar:// | PHPアーカイブ |
| ssh2:// | Secure Shell 2 |
| rar:// | RAR |
| ogg:// | オーディオストリーム |
| expect:// | 対話的プロセスストリーム |
| php://stdin | |
| php://stdout | |
| php://stderr | |
| php://input | 読み込み専用のストリーム。リクエストのbody部から、生のデータを読み込む |
| php://output | 書き込み専用のストリーム。printやechoと同じ方法で、出力バッファへ書き込む |
| php://fd | |
| php://memory | |
| php://temp | |
| php://filter |