skillup

技術ブログ

PHP

ファイルポインタ関連の操作に関して

投稿日:

CSVの読み込みに関してファイルポインタ関連で色々と整理することがあったのでメモ。

今回やりたかった処理

  1. CSVファイルを読み込み(文字コードがUTF8かはわからない)
  2. 一時ファイルに文字コードを変換したファイルを保存
  3. そこから文字列を読み取る
  4. 一時ファイル削除

結局上記の方法で落ち着きましたが、下記のような方法でも読み込めます。

[PHP] SJISのCSVファイルの文字化けせずに読み込む方法(SplFileObject)

手法の違いとして、直接ファイルを名を指定しているか、ポインタを指定しているかだと思いますが、そこでポインタについて復習。

ファイルポインタとは

思いっきり基礎ですが、ファイルを読み込む時のメモリのアドレス。使う意図としてはより少ないメモリ、より少ない時間で処理を行うため。

処理に関してのメモ。

  • tmpfileはファイル名や中身ではなく、ポインタ(ファイルのどこを読んでいるかを指し示す番地で正確にはメモリのアドレス)。
  • stream_get_meta_dataはポインタを引数にして、ファイルの情報を取得することができる。今回はポインタがわかり、ファイル名がわからないケースなのでこの関数を使う。
  • ftell($fp)で現在のポインタの位置(先頭からのバイト数)
  • rewind($fp)強制的にファイルポインタを先頭に戻す

PHPで一時的なファイルポインタを扱う方法

ファイルポインタに関しての簡単なサンプル

https://github.com/umanari145/phptips/blob/master/filepointer/file_pointer.php

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ロケール情報について

本日、csvファイルを読み込む処理を行っていたんですが、コンソールからコマンドを打つと化けずに、ウェブ上で見ると化けるという現象が発生。 csv,プログラムともに文字コードがutf8で統一していること …

no image

PHPでの空白削除に関して

PHPで空白を削除する方法についてメモします。 trimについて 空白を削除する関数といえばtrimが何といっても一番有名でしょう。

no image

CakePHP3 日付ライブラリ(Time)について

CakePHPには標準でいろいろなライブラリが入っていますが、日付ではCake\I18n\Timeというライブラリが入っています。 内部では3.2より前のバージョンではCarbonだったようですが、そ …

no image

CakePHP2系でのテスト処理

cakePHP2系でのテストの処理について。 PHPでのテストといえばphpunitが有名かと思います。cakePHPでも標準でphpunitがはいっており、ユニットテストを行うことができます。 Co …

no image

PHPにおけるDI

Contents1 DIについての概要2 自分が作った簡単なサンプル(リンクの写経)3 参考リンク DIについての概要 PHPでのDI(Dependency Injection)に関して。 オブジェク …