2014年 1月 の投稿一覧

fuelphpでファイルにserializeして保存したデータがunserializeできなかった

バージョンはfuelphp1.7
はまったのでメモ。

タイトル通りに、serializeされたデータをtaskからファイルに保存。

File::create(DOCROOT.'/public/', 'test.dat', $data);

それを以下の様に呼び出してunserializeしたが Error at offset 0 of 2 的なエラーで止まってしまった。

$file = \File::get(DOCROOT.'test.dat');
$data['test'] = $file->read();
$data['test'] = Format::forge($data['test'], 'serialize')->to_array();

が、普通にfile_get_contentsで取得すると回避できた。

$data['test'] = file_get_contents(DOCROOT.'test.dat');
$data['test'] = Format::forge($data['test'], 'serialize')->to_array();

PHP でシリアライズしたデータが壊れてしまう場合は base64_encode をする

上記も試したがダメだった。結局なんでか良くわからなかった。

俺がアホなんだろうか。

誰か教えて下さい。

さくらVPSでfuelphp1.7をインストールして初期設定までのメモ

毎回調べんのめんどくせーので自分用にメモ。

基本的には、公式のドキュメント を見た方が正しいのでそちらを参照。

環境

OS:CentOS release 6.4 (Final)
PHP:PHP 5.4.23 (cli)
Server version: Apache/2.2.15 (Unix) バーチャルホストで運用

インストール

任意のディレクトリに移動して

$ curl get.fuelphp.com/oil | sh

これだけでfuelphp自体のインストールは完了。

プロジェクト作成

インストールが完了したら、任意のプロジェクト名でプロジェクトを作成する。

複数プロジェクト作る場合も、下記のコマンド叩くだけでfuelphpをインストールする必要はない。

$ oil create プロジェクト名

実行すると以下の様なエラー文が出る。

Error – date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in COREPATH/classes/fuel.php on line 161

fuelphpのdefault_timezoneを設定しろみたいなエラーなので設定する。

$ vi /任意のディレクトリ/プロジェクト名/fuel/app/config/config.php

以下の部分を変更

//'default_timezone'   => null,
'default_timezone'   => 'Asia/Tokyo',

次にプロジェクト名のディレクトリに移動して、ディレクトリのパーミッションを設定してくれるコマンドを叩く。

php oil refine install

なんて親切なんだ。

そしてバーチャルホストのドキュメントルートを

/任意のディレクトリ/プロジェクト名/public/

に変更してApacheを再起動する。
プロジェクトに割り当てたURLにアクセスすればwelcomeページが表示されるはずだ。

デフォルトルートを変える

/fuel/app/config/routes.php に設定が書いてるのでここを変更する。

<?php
return array(
 '_root_' => 'welcome/index',  // The default route
 '_404_'  => 'welcome/404',    // The main 404 route
 'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);

エラーを非表示にする

/public/index.php にエラー制御が記述してあるのでここを変更。
error_reporting(-1);
ini_set('display_errors', 1);

/fuel/app/bootstrap.php に環境のモード切替の設定がある。
デフォルトはDEVELOPMENT(開発環境)なので
PRODUCTION(本番環境)にするとエラーの詳細が表示されなくなる。

//Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::PRODUCTION);

オリジナルのconfigファイルを使う

開発したアプリ独自の設定は別ファイルだと色々とやりやすい。

/fuel/app/config以下に任意のファイル名で作成して、config.phpで読み込ませることができる。

例えば、config_facebook.phpと言うファイルを作成した場合ファイルの中身はこんな感じに記述する。

<?php
return array(  'facebook' => array(
   'init' => array(
   'appId'  => '***********',
   'secret' => '***********',
  ),
 ),
);

そして /fuel/app/config/config.php の下の方にあるconfigの部分を変更

// 'config'  => array(),
'config'  => array(
'config_facebook' => null,
),

でおk。

FavTubeをfuelphpとbootstrap3を使ってリニューアルしました。

新年明けましておめでとうございます。私だ。

1/5に FavTube をリニューアルしました。

お正月はいつもつまらんTVを見て、ごろごろして無為に時間を過ごしていたのだけれどいい加減いかんなこれ

と年末辺りから思っていた。大人だし。

正月休みを利用してサイトをリニューアルするかと計画して12月から色々と準備をしていた。

課題として

  1. phpフレームワークを使う
  2. cssフレームワークをbootstrap2からbootstrap3に更新する
  3. youtubeAPIのバージョン3を使う

この3つがあった。

課題1、phpフレームワークを使う

リニューアル前は、生でphpを書いていた。

ページも2ページしかないし、DBも使って無かったし一人で開発してるしわざわざフレームワークを使う意義も見いだせなかったから。

しかし、新しい機能案や計画している新サイトを構築して行くに当たりいい加減使うかと言う結論に。

前々から目を付けていた laravelfuelphp で迷ったがlaravelのインストールに手こずりめんどくさくなりfuelphpを採用した。ドキュメントと使っている人がまだfuelphpの方が多そうだったし。

このスライドを見るときっと興味が湧くと思う。とにかく学習コストも低く便利なフレームワークだ。

fuelに関してはまた別のエントリーで掘り下げて書いて見ようと思う。
ちなみに今年の初買いはfuelの技術本だ。

課題2、cssフレームワークをbootstrap2からbootstrap3に更新する

cssフレームワークは、twitter bootstrap を使っている。

フラットデザインになったbootstrap3に更新した。すっきりとした印象で気にいっている。

動画再生ページのデザインを大きく更新して、ごちゃごちゃとした印象が無くなったかなと思う。モバイルのトップページは特に見やすくなったんじゃないかな?

課題3、youtubeAPIのバージョン3を使う

今回のリニューアルでここが一番ミソであり、苦労した所かも知れない。

以前からの問題で、「歌ってみた」だの「弾いてみた」の動画が検索結果に混ざりこんでいて非常に鬱陶しかった。

なんとかしたかったのだが、以前のAPIのバージョンではキーワードを弾くオプションがあるものの正常な結果が取得出来なかった。

youtube API v3

前に作った時になんでv3使わなかったんだっけ?と思い返した。v3のドキュメントはまだ日本語化されていないので、検索するとv2のドキュメントに辿りつくようになっていたからだ。なんだよその罠。

使ってみるとsearch apiが前は国の指定が出来たのに今回は出来ない仕様になっていてここに本当に悩ませられた。

なぜかというと、例えば「Perfume」で検索すると日本のyoutubeの検索結果ではあの三人組の「Perfume」の楽曲が優先的に返されるのだが「Perfume」と言う言葉は英単語であり「香り」と言う意味を持つ。

これを音楽のカテゴリに限定した動画を取得しても、「Perfume」と言う曲名は無数にある為ブリトニースピアーズの「Perfume」と言う曲が一番最初に返されたりするのだ。

v2を使うと、国指定ができるので上記の様な事態は避けられるが歌ってみたが排除できない。

v3を使うと、国指定が出来ないが歌ってみたは排除できる。

悩んだが、アーティスト別に対応することでv3を選択した。検索キーワードが「Perfume」だったら、ブリトニーは弾くなど個別対応した。

終わりに

今回のリニューアルは、見た目のデザインの刷新もそうだがより質のいいプレイリストを提供できる様になったので満足の行く物となった。新機能として、開発中の物があるのだがそれはまたリリースしたらお知らせします。