忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

phpで画像ファイルの縦横サイズを取得する

PHPって本当に沢山の関数があるのですが、最近画像ファイルの縦横サイズを取得する関数があることを知りました。

getimagesize関数

関数に関する詳しい情報は上記リンク先を参照してみてください。

使い方は超簡単、単に関数に画像ファイルのパスを渡すだけです。

Ex)
$ret = getimagesize('banner_1_468x60.gif');
var_dump($ret);

実行結果:
array(7) {
  [0]=>
  int(468)
  [1]=>
  int(60)
  [2]=>
  int(1)
  [3]=>
  string(23) "width="468" height="60""
  ["bits"]=>
  int(7)
  ["channels"]=>
  int(3)
  ["mime"]=>
  string(9) "image/gif"
}

ファイルはローカルファイルだけでなくリモートにあるファイル(アクセス許可はされていないといけません)も可能みたいです。

面白いのは、HTMLのimgタグ等に用いれるように「width="468" height="60"」といったStringも返してくれるところ。

なんか、ほんとPHPって便利な関数が多いですねw

PR

【fuelPHP】トランザクション

fuelPHPでDBのトランザクション処理を書いたけど、うまく動作しない・・・ググってみるとmigrationファイルでテーブルのCreate文でちゃんとInnoDBを指定しないといけないのでした。

Mysqlで普通ストレージエンジンを指定しない場合MyISAMなのでそりゃそうですよね。。。

【PHP】mcryptによる暗号化・複合化テスト

ググればいくらでも出てくるんだけど、自分で動作確認済みのソースを覚書的に書いておこうと思った。

// $emailを暗号化、復号化するテスト

$key = '0DOaw8daCLq6';
$email = 'hogehoge@hoge.com';
$iv = 'Jh8GHrP3';
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CFB, '');
echo 'iv size: '.mcrypt_enc_get_iv_size($td)."\n";
// 暗号化
mcrypt_generic_init($td, $key, $iv);
$encrypted = base64_encode(mcrypt_generic($td, $email));
echo 'encrypted: '.$encrypted."\n";
mcrypt_generic_deinit($td);
// 複合化
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, base64_decode($encrypted));
echo 'decrypted: '.$decrypted."\n";
mcrypt_generic_deinit($td);
mcrypt_module_close($td);


$ivと$keyの2つが暗号化、復号化の為の鍵になってる。

FuelPHPのORM覚え書き

FuelPHPのORMモデルのリレーション定義で、「cascade_save」っていうのがある。

多分、これをtrueにするとsave()した時に親子(孫)関係のモデルも一気にDBに書き込んでくれるのだと思うけど、実際に使ってみたところ、親のモデルでsave()しても親のモデルだけが保存された。
子(孫)のモデルでsave()したら親のモデルも保存された。

具体的にはこんな感じ

Model_User
    protected static $_has_many = array(
            'shops' => array(
                'key_from' => 'id',
                'model_to' => 'Model_Shop',
                'key_to' => 'user_id',
                'cascade_save' => true,
                'cascade_delete' => false,
            )
    );

Model_Shop
    protected static $_belongs_to = array(
            'user' => array(
                'key_from' => 'user_id',
                'model_to' => 'Model_User',
                'key_to' => 'id',
                'cascade_save' => true,
                'cascade_delete' => false,
            )
    );
    protected static $_has_many = array(
            'options' => array(
                'key_from' => 'id',
                'model_to' => 'Model_Option',
                'key_to' => 'shop_id',
                'cascade_save' => true,
                'cascade_delete' => false,
            )
    );
Model_Option
    protected static $_belongs_to = array(
            'shop' => array(
                'key_from' => 'shop_id',
                'model_to' => 'Model_Shop',
                'key_to' => 'id',
                'cascade_save' => true,
                'cascade_delete' => false,
            )
    );

上記3つのモデルをそれぞれnewしてアトリビュートをセットしていき、リレーションを繋ぎ、最後にModel_Optionをsave()するとOK。Model_Userをsave()しても保存されるのはModel_Userだけだった。

$user = new Model_User();
$user->name = 'ほげ';
$shop = new Model_Shop();
$shop->name = 'Hoge';
$shop->user = $user;
$option = new Model_Option();
$option->val = 1;
$option->shop = $shop;
$option->save();     // $user->save(); だとうまくいかない

って、書いてて何故か分かった気がする。
子と孫側からは繋げてるけど、親側からは繋げていないからか。

最後に
$user->shops[] = $shop;
$shop->options[] = $option;

って書けば、$user->save()で孫まで保存されるのではないかと。