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

nginx上でのcakePHP

cakePHP上をCentOS,nginx上で公開するときのメモなどを。 cakeのversionは2.5です。 /var/www/html/sampleapp直下にプログラムを配置するものとします。 …

no image

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

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

no image

laravelのmigrationに関して

DBのカラムの保守などをする場合のmigrationに関して。 ポツポツ使っていたのですが、しっかりまとめてなかったのでここでまとめて見ようかと思います。 Contents1 カラム定義2 実際の実行 …

no image

laravelでのredis活用

以前下記エントリーでredisの活用について書きました。 インメモリデータベース redis 一般的な使用法ですと登録できるデータはstring,list,hashのような比較的単純な形しか登録できな …

no image

cakePHPでのCSVダウンロード

cakePHPにてCSVのダウンロードなんぞを。 以前このエントリーでCSVダウンロードに関しては取り扱ったのですが、 ボタンを押す ファイルダイアログが開く パスを選ぶ 意図したデータを正常にダウン …