fuelphp

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。