日々修行

カテゴリ: PHP

久々に更新。
ブログやってたのを忘れるくらい久々に更新w

忙しすぎて手が腱鞘炎になっちゃうし、まだまだ忙しいのは終わらんね;

ある案件でハマりにハマったので書いとく。
日本語の文献も少ないし、誰かのためになれば・・・

Linux+PHP+Access


PHPでAccessファイルを読まなきゃならんことになった。
そいつをMySQLにデータ吐き出しして利用する。

思いつくいたのは、ODBCでAccessファイルに接続すると言うもの。

まず、MdbTools を インストールする。
https://github.com/brianb/mdbtools

まぁこれはすんなり行きました。
odbc.ini
odbcinst.ini
など色々いじって。

次にPHPのPDOを使って接続する。

何とかDBには接続できた。

SQLを投げる・・・

・・・・

・・・・



何度やってもダメ、どう設定を変えてもダメ。

PHPをオプションを変えて何度もコンパイルしなおしたがダメ。

試しに id, name カラムが 3行程度のサンプルテーブルを作成
table1
idname
1yamada
2suzuki

「SELECT * from table1」を投げて帰ってきたのが以下の内容
array(
  [0]=array(
    [id] = 1,
    [name] =
  ),
  [0]=array(
    [id] = 2,
    [name] =
  )
);

ん?文字列がダメっぽい。

mb_convert系を試すも全滅

で、いろいろ調べると、マルチバイトが怪しい。

たまたま見つけた記事で、

MDBTools のコマンドで mdb-export なるものを発見!

はい。ここで、今までの全部忘れてください。

PDO?odbc_connect?そんなの必要ありません!

mdbtools さえあれば!

これでmdb(accdb)をCSV形式で吐き出せるとな!!!

試しにtable1を吐き出す。

# mdb-export test.mdb table1
id,name
1,"yamada",
2,"suzuki",
...

おお!!!

こいつを > output.csv に吐けばCSVが完成!!
なんて素晴らしい!!

あと、テーブル名一覧を吐き出す関数 mdb-tables も便利。

以下のコマンドで、
#mdb-tables test.mdb
table1 table2 ...

とスペース区切りでmdbに内包されているテーブル名が取れる。

PHPで
$tables = exec("mdb-tables file.mdb"); //table一覧取得
これをexplodeして配列化して、
foreachでループしてやりゃ後は好きにできるじゃん!
foreach($tables as $tbl){
  $csv = array();
  exec("mdb-export file.mdb $tbl", $csv);
}

*.accdb でも行けます。


mb_convert_kana()で変換されない現象があった。



よくわからんがエンコードが鍵らしい。



mb_internal_encoding("UTF-8");

↑この一行を前に挿入すると無事変換された。



覚えとけ!


ある画像(img_A)がimagecolortransparentを使っても変化が無かった。



この機能はTrueColorイメージにしか対応して無いみたい;



なので



imagecreatetruecolorでimg_Aと同じサイズのTrueColorイメージを作成して、

imagecopyresampledでさっきのTrueColorイメージとimg_Aを合成してTrueColorイメージにする。



元画像 $img_A

$x = imagesx(img_A);

$y = imagesy(img_A);

$img_B = imagecreatetruecolor($x,$y);

imagecopyresampled($img_B,$img_A,0,0,0,0,$x,$y,$x,$y);

imagedestroy($img_A);



でimg_Bがimg_Aを元にコピーされたTrueColorイメージに。



$kuro = imagecolorallocate(0,0,0);

imagecolortransparent($img_B,$kuro);



で黒が透明になる。



バグなのかどうか知らないけど、黒しか透過できない;

知ってる人いたらおせ~て~

このページのトップヘ