読者です 読者をやめる 読者になる 読者になる

tmux のインストール

tmux CentOS

環境いじりが楽しいです。
本来のお勉強がおろそかになる諸刃の剣。

ターミナルを複数立ち上げて操作することが多い今日この頃。
複数窓立ち上げると移動が面倒だと感じる今日この頃。

当方環境

OS Windows7
ターミナル Teraterm

Poderosa なんていう便利なタブ機能付きターミナルがあるらしいと聞いて使ってみる。
=> なぜか vim を立ち上げると激重 => 断念

他には何かいい方法はないのか!と調べる

tmux という便利なものがあるらしい <= 今ココ

続きを読む

vim + Xdebug を使用して remote debug

php vim

Xdebug をインストール中にハマって検索を掛けて問題を解決しようとしたら、別の面白そうなことが載ってた。

続きを読む

Xdebug

php CentOS

デバッグにvar_dump()を多用してる今日この頃。
Xdebug なるものがどうも便利らしいとの情報。お試しで入れてみる。

Xdebug のインストール pecl コマンドを使うらしい。

pecl ってなんぞ

PECL(ピクル、PHP Extension Community Library)は、PHPで利用できる拡張ライブラリ(パッケージ)を提供しているサービス。

PECLで提供されるライブラリはCで記述されているため、PHPで記述されたPEARのライブラリよりも高速に動作する。PECLにより提供されるライブラリはPHPの拡張モジュールとしてインストールされる。
==== 中略 ===
PECLのインストール用には、PEAR同様に「pecl」コマンドが提供されている。インストール方法もほぼPEARと同じだが、インストール後に設定ファイル(php.ini)の「extension」でインストールしたモジュールを指定する必要がある点が異なる。

参照:wikipedia

続きを読む

samba

CentOS samba

VMwarePlayer 内のデータをいちいちFTPクライアントソフトでアップ、ダウンロードするのがめんどくさくなってきた。
なのでSambaをインストールするお!

Samba

Samba - ご先祖様はきっと農民。
Samba サーバの設定 - ご先祖様はきっと農民。

こんな感じで一応メモは取ってたけど、やるのは初。

続きを読む

SSL

SSL CentOS

SSLの設定メモ

mod_ssl のインストール

インストールされているか確認
yum info mod_ssl
インストールされていなければ、インストール
yum install mod_ssl

Apacheの再起動

service httpd restart

これだけで、一応動く

続きを読む

fgetcsv と ロケール

php

お勉強してて、軽くハマったのでメモ

fgetcsv ってなんぞ

参照:PHP: fgetcsv - Manual

要約すると

csv形式のファイルをfgets()みたいに取得するよ!

じゃあ fgets() でいいんじゃね?

fgets() に動作は似ていますが、 fgetcsv() は行を CSV フォーマットのフィールドとして読込み処理を行い、 読み込んだフィールドを含む配列を返すという違いがあります

配列で返してくれるところがミソと。

ハマり箇所

fgetcsv() でファイルを読み込んで、読み込んだ配列を foreach() で回して表示させると日本語が表示されない。
ソースはこんな感じ

csvファイル読み込み
public function getMessageData() {
   $dataFilePath = "./hogehoge.dat";

   // ファイルよりCSVデータ取得
   $fp = fopen($dataFilePath, 'r');
   $data = array();
   while ($row = fgetcsv($fp)) {
       $data[] = $row;
   }
   fclose($fp);
 
   return $data;
}
呼び出し
// メッセージデータ取得、表示
$data = getMessageData();

// メッセージデータをもとに表のHTML生成
foreach ($data as $row) {
    echo '<tr>';
    echo sprintf('<td>%s<td>', $row[0]);
    echo sprintf('<td>%s<td>', $row[1]);
    echo sprintf('<td>%s<td>', $row[2]);
    echo '</tr>';
csvファイル

1,てすと名前,テストめっせじ

実行した結果

1 空白 空白

と、テスト名前とテストめっせじが表示されない。

原因

注意:

この関数はロケール設定を考慮します。
もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。

文字コード。おまえか。

参照:PHP: setlocale - Manual

ちなみに

LANGの文字コードはこんな感じ

[riceplanting@localhost MessageBoard]$ echo $LANG
ja_JP.UTF-8
対策
// メッセージデータ取得
public function getMessageData() {
    setlocale(LC_ALL, 'ja_JP.UTF-8');
    // ファイルよりCSVデータ取得
    $fp = fopen($this->dataFilePath, 'r');
    $data = array();
    while ($row = fgetcsv($fp)) {
        $data[] = $row;
    }
    fclose($fp);
    
    return $data;
}

こいつを追加したら、無事日本語も表示されました。

setlocale(LC_ALL, 'ja_JP.UTF-8');


地味に、ファイルの文字コードを調べるのがわからない。
nfkコマンドとかでいいのかなーっと。

glob — パターンにマッチするパス名を探す

php
あるディレクトリ内のファイルを確認したい時、まず思いついたのが
  • system()
$list = system("ls -la");

システムコマンドを使うのは何かと拙いだろうと。

次に、調べて発見したのが
<?php
$dir = "/etc/php5/";

// 既知のディレクトリをオープンし、その内容を読み込みます。
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}
?>

一般的には、これが使われてるのかな?使われているのを見た気もする。

opendir() を使えばいいかなと思っていたら

便利な関数があるらしい
参照:PHP: glob - Manual
参照:blog.paz-para.com » Blog Archive » PHPでカレントディレクトリのファイルを取得する
参照:PHPのglob()がすっごい便利だった件 | IDEA*IDEA

パターンにマッチするパス名を探す

glob() は正規表現を使えたりできるのが魅力らしい。
正規表現を使わなくても、カレントディレクトリ内のファイルを取得、表示したい場合

foreach (glob("*.txt") as $filename) {
  echo "$filename size " . filesize($filename) . "\n";
}

すっきり!