ファイルの操作
仕事で使ったもの学んだもの、プライベートで使ってみたもの学んだもののメモのまとめです。
随時更新します。
関数
関数 | 説明 |
---|---|
file_get_contents(ファイル名) | ファイルの内容を全て書き込む |
file_put_contents(ファイル名, 文字列) | 文字列をファイルに書き込む |
fgets() | ファイルのデータを一行ずつ取得する |
fopen() | ファイルへの接続をオープンし、ファイルにアクセスする際に使用する変数としてファイルポインタ(ファイルハンドラ)を返す |
is_readable() | ファイルの読み込みに関するアクセス権(パーミッション)を点検、読み込み可能であるかどうかを知る |
chmod(変更するファイル名, 変更後のパーミッション) | パーミッションを変更する |
fclose() | オープンされたファイルポインタをクローズする |
fread() | バイナリセーフなファイルの読み込み |
fwrite() | バイナリセーフなファイル書き込み処理 |
file() | ファイル全体を読み込んで配列に格納する |
file_exists() | ファイルまたはディレクトリが存在するかどうか調べる |
stream_set_timeout() | ストリームにタイムアウトを設定する |
popen() | プロセスへのファイルポインタをオープンする |
stream_context_create() | ストリームコンテキストを作成する |
umask() | 現在の umask を変更する |
mb_convert_encoding() | 指定した文字列を指定した文字コードに変換し、返す |
feof() | ファイルポインタがファイルの終端にあるか調べる |
fgetcsv() | カンマ区切りでこうせされたCSVファイルの行を読み込む |
fputcsv() | カンマ区切りでこうせされたCSVファイルの行を出力する |
fgetc() | ファイルから一文字を取り出す |
header() | HTTPヘッダー情報を送信するときに使用 |
- file_get_contentsとfile_put_contentsは、ローカルファイルだけでなくリモートファイルに対しても読み書きを行うことができる
- ファイルにアクセスする関数を利用する場合、ディスク容量やパーミッション(ファイルへのアクセス権)など、エラーの原因を常にチェックする必要がある
用語
用語 | 説明 |
---|---|
スクリーンスクレイピング | ほかのWebサイトの画面情報を切り出し、画面の内容から情報を抽出して利用すること |
ファイルポインタ | ファイルへのアクセスが可能になる特別な変数, ファイルを編集するための現在位置を表し、ポインタが先頭にある場合はファイルの一番最初から読み書きを行う |
HTTPヘッダー | HTTPによる「リクエスト(要求)→レスポンス(応答)」の流れで、どのような情報をリクエストして、どのようなコンテンツを受け取るかを定義するためのもの |
- スクリーンスクレイピングを行う場合、対象のWebサイトが明示的に情報を公開しているパブリックドメインであることを確認する必要がある
モードにアクセスしてファイルにアクセスする
$ファイルポインタ = fopen(ファイル名, ファイルのモード)
ファイルへのアクセス手順
- fopen()関数を利用して、ファイルへの接続をオープンにする
- fgets()関数を利用して、ファイルに対して読み込みを行う
- fclose()関数を利用して、ファイルをクローズする
ファイルエラー処置
ファイル処理関数のエラーはfalseが帰るが、0が入力されていた場合0を返してしまう。そのため、phpでは0はfalseと判定されるため、「$test === false」を使う必要がある
ファイルアクセスの脆弱性
- ディレクトリトラバーサルの脆弱性・・・Webサーバ側で公開ファイルへのアクセス制御は行えるが、フォームデータに「.」や「..」といったパス指定を行う特殊文字が含まれていると、公開設定をしていないファイルにアクセスできる場合がある
- そのため、realpath()を使用し、返還後のファイル名を受け入れてよいかを判断する方法が良い
以下参照させていただいた記事です。
https://qiita.com/dodonki1223/items/e3d2c4a032b129e1f6ce
https://www.php.net/manual/ja/function.fopen.php