vim + Xdebug を使用して remote debug
Xdebug をインストール中にハマって検索を掛けて問題を解決しようとしたら、別の面白そうなことが載ってた。
参考にしたサイト
- PHPをXDebugとVimでデバッグする (Ubuntu 8.10編とCentOS 5.4/4.5編) - 山歩きプログラマー
- XdebugとVimを使ったPHPのリモートデバッグ | 株式会社インターエデュ・ドットコム
- Xdebug + VimでPHPのWebアプリをステップ実行してみた - Lounge Programmers Killer
面白そうなので実装してみるお!
Xdebug
デバッグに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
fgetcsv と ロケール
お勉強してて、軽くハマったのでメモ
fgetcsv ってなんぞ
要約すると
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 バイトエンコーディングは間違って読み込まれます。
文字コード。おまえか。
対策
// メッセージデータ取得 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 — パターンにマッチするパス名を探す
あるディレクトリ内のファイルを確認したい時、まず思いついたのが
- system()
$list = system("ls -la");
システムコマンドを使うのは何かと拙いだろうと。
次に、調べて発見したのが
- opendir() 参照:PHP: opendir - Manual
<?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