skillup

技術ブログ

PHP

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

投稿日:2018年11月18日 更新日:

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

今回やりたかった処理

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

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

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

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

ファイルポインタとは

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

処理に関してのメモ。

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

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

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

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

-PHP
-

執筆者:


comment

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

関連記事

no image

cakePHPでの多対多について

cakePHPで多対多のリレーションを使う機会があったので、その時のメモなどを。 多対多を説明するときには例によってブログの投稿(Item)とタグ(Tag)の関係が一番わかりやすいですね。 Conte …

no image

form以外でのPOST送信(というかHTTP通信全般)

前回の記事に引き続きですが、APIを叩く側はformでデータを送るのではなく、コードの中にPOSTする処理を書きます。 選択肢としては curlコマンドを使う file_get_contentsを使う …

no image

PHPでの画像トリミング&縮小

PHPにて画像のトリミング&縮小処理があったんで、メモ。 仕様は下記の通り 16:9の画像(解像度:5168×2907)を高さを維持して4:3にする。つまり横長だった画像比を変えるので、両サイドを取り …

no image

PHPでのログ出力 PHP monolog

PHPでデバッグするときは、画面上にvar_dumpで情報を見ていたのですが、これができない場面ではログへの出力を行うことになります。 いままではフレームワークに標準でついてたんですが、これを機に一般 …

no image

CakePHP2系でのテスト処理

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