2012年07月11日
講義097日目
------------------------------1H------------------------------
------------------------------2H------------------------------
★リリース実習
●SVN
・staging環境のソースをtrunkにコミット
svn ci -m ""
・staging環境で発生したエラーを解消する
問題点を開発に報告する
☆バイナリファイルを16進数で編集するエディタとかがある
意図的に壊れたファイルを作るなどができる
------------------------------3H------------------------------
------------------------------4H------------------------------
★リリース実習
●バリデーション
・バリデーションを色々と試行錯誤
ユーザ新規登録モジュールを作成
カスタムバリデータの作成
ユーザネーム、メールアドレスの重複をチェックするバリデータ
バリデーションconfirm.ymlを作成
------------------------------5H------------------------------
★リリース実習
●dev.shonanbbs.comの問題点解決
・画像のエラーを解消
カスタムバリデータの作成
/lib/validate/myUploadImageValidator.class.phpの作成
●バリデーターの拡張
・sfFileValidatorの拡張
validator側を編集
class myUploadImageValidator extends sfFileValidator
{
public function execute(&$value, &$error)
{
//画像の正常性チェック(myUtil使用)
$id = myUtil::getFileExtId($value["tmp_name"]);
//(myUtil未使用の場合)
//$ids = @getimagesize($value["tmp_name"]);
//$id = ids[2];
$image_types = sfConfig::get("sf_image_types");
if(@exif_imagetype($value["tmp_name"]) !== $id || !array_key_exists($id, $image_types)){
$error = $this->getParameter("mime_type_error");
return false;
}
//php.iniの画像サイズを超える
if($value["error"] === 1){
$error = $this->getParameter("max_size_error");
return false;
}
if(!parent::($value, $error)){
return false;
}
return true;
}
}
・yml側の編集
fields:
content:
required:
msg: 内容を入力してください。
nickname:
required:
msg: 名前を入力してください。
photo:
file: True
sfFileValidator:
mime_types:
- 'image/gif'
- 'image/jpeg'
- 'image/png'
- 'image/x-png'
- 'image/pjpeg'
mime_types_error: GIFとPNGとJPEGの画像のみ許可されます
max_size: 512000
max_size_error: 最大のサイズは512KBです
------------------------------6H------------------------------
★リリース実習
●SVN
・dev環境の変更をbranchesにコミットする
・staging環境で試しのmergeをする
svn merge --dry-run -r 現在のリビジョン:HEAD(最新のリビジョン) svn://localhost/shonanbbs/branches
問題が無ければ
svn merge --dry-run -r 現在のリビジョン:HEAD(最新のリビジョン) svn://localhost/shonanbbs/branches
staging環境で動作の確認ができたらコミットする
・本番環境でsvn up
コンフリクトが発生してたら解消
・ディレクトリの書き込み権限を確認
・サーバのメンテナンスを表示してたhtaccessを元に戻して完了
-----------------------------memo------------------------------
☆参照渡し
&$valueとかを使うと容量が軽い
2012年7月11日水曜日
2012年7月8日日曜日
2012年07月08日 講義094日目
2012年07月08日
講義094日目
------------------------------1H------------------------------
★symfony復習
●画像のアップロード
・imagesフォルダへの書き込み権限変更
[ユーザ名@localhost web]$ chmod -R 777 ./images
☆symfony fix permsで変更は戻らない
・拡張子の正常性、ファイルの正常性チェック
画像であるかどうかチェックするロジックを追加する
アップロードされてきたファイル名をそのままDBに入力するロジックだと、
画像以外のファイルもアップロードされてしまい危険
例)悪意のあるphpファイル、スクリプトなども通ってしまい実行されてしまう
●settings.ymlに追記
・settings.ymlを修正
image_types:
1: gif
2: jpg
3: png
ここで入力したキー値を元にsfConfig::get('sf_image_types')で拡張子を作成
☆getimagesize()で取得できる定数で判断
●executeSubmit()の修正
・/lib/にmyUtil.class.phpを設置する
myUtil.class.php内の拡張子の判断に利用する関数部分
public static function getFileExtId($filePath)
{
$info = @getimagesize($filePath);
return $info[2];←
}
public static function getFileExt($filePath)
{
$id = myUtil::getFileExtId($filePath);
$image_types = sfConfig::get('sf_image_types');←ここでsettings.ymlを読み込んでる
return '.'.$image_types[$id];
}
・executeSubmit()の修正
//セットした値をデータベースに反映させる
$comment->save();
if($photo["tmp_name"])
{
$filename = $comment->getId().".jpg";
$this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
$comment->setPhoto($filename);
$comment->save();
}
↓
//セットした値をデータベースに反映させる
$comment->save();
if($photo["tmp_name"])
{
$filename = $comment->getId().myUtil::getFileExt($photo["tmp_name"]);
$this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
$comment->setPhoto($filename);
$comment->save();
}
------------------------------2H------------------------------
★symfony復習
●画像ファイルへのバリデーション
・default/validate/submit.ymlの修正
☆ファイルのバリデーター
fields:
image:
file: True
required:
msg: 画像ファイルをアップロードしてください
追加記述部分ここから↓
sfFileValidator:
mime_types:
- 'image/jpeg'
- 'image/png'
- 'image/x-png'
- 'image/pjpeg'
mime_types_error: PNGとJPEGの画像のみ許可されます
max_size: 512000
max_size_error: 最大のサイズは512KBです
・許可するファイルの修正
mime_types:
- 'image/gif'
・エラーメッセージ部分の修正
mime_types_error: GIFとPNGとJPEGの画像のみ許可されます
・ファイルのサイズ制限の修正
☆apaheの上限、symfonyの上限(ほぼコレをチェック)など、phpの上限(apaheと密接)などがあるので各設定も確認する
☆photoカラムのファイル名末尾に.が付いているレコードが存在すると挙動が怪しくなる
------------------------------3H------------------------------
------------------------------4H------------------------------
★リリース実習
●自分のサイトの公開準備
・色々と途中でやばい
------------------------------5H------------------------------
★リリース実習
●SVN
・特定のファイルをリポジトリから除外するために
リポジトリに登録するときに該当のファイルを除外しておく
コミットしない
例)config/databases.yml
config/propel.ini
web/index.php
web/backend/index.php
web/images/comment/*
・現在の環境にupdateさせる
svn upでリポジトリと一致させる
svn stat -uで確認
?をsvn addでリポジトリに追加させる
・特定のファイルをコミット対象外にする
svn propedit svn:ignore cache
viで開くので*を記述する(全てを対象外にするために)
svn propedit svn:ignore log
viで開くので*を記述する(全てを対象外にするために)
・svn up
・
[ユーザ名@localhost dev.shonanbbs.com]$ svn list svn://サーバIP(local環境ならlocalhost)/shonanbbs/branches/cache/
backend/
front/
tmp/
・cache下のファイルを確認
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/backend -m ""
リビジョン 10 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/front -m ""
リビジョン 11 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/tmp -m ""
・log下のファイルを確認
リビジョン 13 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/log/front_dev.log -m ""
リビジョン 14 をコミットしました。
これでリポジトリからcacheとlogが削除された
・svn upを実行
リポジトリ情報を元に、cache下のファイルが消える
・symfony ccでキャッシュが生成される
------------------------------6H------------------------------
★リリース実習
●SVN
・バージョン管理外に置きたいファイルの操作(必ずしも管理外に置かなくてもいい)
config/databases.yml
config/propel.ini
web/index.php
web/backend/index.php
web/images/comment/*←データベースのカラムと結びつくのではずす
●
☆重要☆database.ymlとpropel.iniの退避
cpコマンドを使い、開発環境下のdatabase.ymlおよびpropel.iniを末尾に_bkをつけるなどして退避
・プロジェクト直下で
svn propedit svn:ignore config
・viの中に、対象とするファイル名を記述
databases.yml
propel.ini
・configディレクトリをコミット
svn ci -m ""
・svn list svn://サーバIP/プロジェクト名/branches/config/
でconfig下のファイルを確認
・リポジトリのソースを消す
svn rm svn://サーバIP/プロジェクト名/branches/config/databases.yml -m ""
svn rm svn://サーバIP/プロジェクト名/branches/config/propel.ini -m ""
・svn upする
リポジトリの情報を元に、config下のファイルが消える
退避したファイルの名前を元通りにし、ブラウザから確認
-----------------------------memo------------------------------
講義094日目
------------------------------1H------------------------------
★symfony復習
●画像のアップロード
・imagesフォルダへの書き込み権限変更
[ユーザ名@localhost web]$ chmod -R 777 ./images
☆symfony fix permsで変更は戻らない
・拡張子の正常性、ファイルの正常性チェック
画像であるかどうかチェックするロジックを追加する
アップロードされてきたファイル名をそのままDBに入力するロジックだと、
画像以外のファイルもアップロードされてしまい危険
例)悪意のあるphpファイル、スクリプトなども通ってしまい実行されてしまう
●settings.ymlに追記
・settings.ymlを修正
image_types:
1: gif
2: jpg
3: png
ここで入力したキー値を元にsfConfig::get('sf_image_types')で拡張子を作成
☆getimagesize()で取得できる定数で判断
●executeSubmit()の修正
・/lib/にmyUtil.class.phpを設置する
myUtil.class.php内の拡張子の判断に利用する関数部分
public static function getFileExtId($filePath)
{
$info = @getimagesize($filePath);
return $info[2];←
}
public static function getFileExt($filePath)
{
$id = myUtil::getFileExtId($filePath);
$image_types = sfConfig::get('sf_image_types');←ここでsettings.ymlを読み込んでる
return '.'.$image_types[$id];
}
・executeSubmit()の修正
//セットした値をデータベースに反映させる
$comment->save();
if($photo["tmp_name"])
{
$filename = $comment->getId().".jpg";
$this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
$comment->setPhoto($filename);
$comment->save();
}
↓
//セットした値をデータベースに反映させる
$comment->save();
if($photo["tmp_name"])
{
$filename = $comment->getId().myUtil::getFileExt($photo["tmp_name"]);
$this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
$comment->setPhoto($filename);
$comment->save();
}
------------------------------2H------------------------------
★symfony復習
●画像ファイルへのバリデーション
・default/validate/submit.ymlの修正
☆ファイルのバリデーター
fields:
image:
file: True
required:
msg: 画像ファイルをアップロードしてください
追加記述部分ここから↓
sfFileValidator:
mime_types:
- 'image/jpeg'
- 'image/png'
- 'image/x-png'
- 'image/pjpeg'
mime_types_error: PNGとJPEGの画像のみ許可されます
max_size: 512000
max_size_error: 最大のサイズは512KBです
・許可するファイルの修正
mime_types:
- 'image/gif'
・エラーメッセージ部分の修正
mime_types_error: GIFとPNGとJPEGの画像のみ許可されます
・ファイルのサイズ制限の修正
☆apaheの上限、symfonyの上限(ほぼコレをチェック)など、phpの上限(apaheと密接)などがあるので各設定も確認する
☆photoカラムのファイル名末尾に.が付いているレコードが存在すると挙動が怪しくなる
------------------------------3H------------------------------
------------------------------4H------------------------------
★リリース実習
●自分のサイトの公開準備
・色々と途中でやばい
------------------------------5H------------------------------
★リリース実習
●SVN
・特定のファイルをリポジトリから除外するために
リポジトリに登録するときに該当のファイルを除外しておく
コミットしない
例)config/databases.yml
config/propel.ini
web/index.php
web/backend/index.php
web/images/comment/*
・現在の環境にupdateさせる
svn upでリポジトリと一致させる
svn stat -uで確認
?をsvn addでリポジトリに追加させる
・特定のファイルをコミット対象外にする
svn propedit svn:ignore cache
viで開くので*を記述する(全てを対象外にするために)
svn propedit svn:ignore log
viで開くので*を記述する(全てを対象外にするために)
・svn up
・
[ユーザ名@localhost dev.shonanbbs.com]$ svn list svn://サーバIP(local環境ならlocalhost)/shonanbbs/branches/cache/
backend/
front/
tmp/
・cache下のファイルを確認
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/backend -m ""
リビジョン 10 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/front -m ""
リビジョン 11 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/tmp -m ""
・log下のファイルを確認
リビジョン 13 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/log/front_dev.log -m ""
リビジョン 14 をコミットしました。
これでリポジトリからcacheとlogが削除された
・svn upを実行
リポジトリ情報を元に、cache下のファイルが消える
・symfony ccでキャッシュが生成される
------------------------------6H------------------------------
★リリース実習
●SVN
・バージョン管理外に置きたいファイルの操作(必ずしも管理外に置かなくてもいい)
config/databases.yml
config/propel.ini
web/index.php
web/backend/index.php
web/images/comment/*←データベースのカラムと結びつくのではずす
●
☆重要☆database.ymlとpropel.iniの退避
cpコマンドを使い、開発環境下のdatabase.ymlおよびpropel.iniを末尾に_bkをつけるなどして退避
・プロジェクト直下で
svn propedit svn:ignore config
・viの中に、対象とするファイル名を記述
databases.yml
propel.ini
・configディレクトリをコミット
svn ci -m ""
・svn list svn://サーバIP/プロジェクト名/branches/config/
でconfig下のファイルを確認
・リポジトリのソースを消す
svn rm svn://サーバIP/プロジェクト名/branches/config/databases.yml -m ""
svn rm svn://サーバIP/プロジェクト名/branches/config/propel.ini -m ""
・svn upする
リポジトリの情報を元に、config下のファイルが消える
退避したファイルの名前を元通りにし、ブラウザから確認
-----------------------------memo------------------------------
2012年7月6日金曜日
2012年07月06日 講義093日目
2012年07月06日
講義093日目
------------------------------1H------------------------------
★symfony復習
●ヘルパー
・テンプレート側で使う関数
フォームヘルパー
バリデーションヘルパー
リンクヘルパー
routhing.ymlで設定したリンク先を使うこともできる
・テンプレート側
<?php echo link_to("サイトマップ","@sitemap_sub")?>
・routhing.yml
sitemap_sub:
url: /sitemap
param: { module: default, action: sitemap }
・ヘルパーのカスタマイズ
授業で使ったページャ用のヘルパーはsymfonyで用意されたものではなく自作のヘルパー
<?php use_helper("MyPagerQuery", "Validation")?>
引数は一つ以上もつことができる
☆バリデーションの流れ
①submitボタン押す
②sfValidateクラスが動く
③作成したmodule/validate/submit.ymlのエラーチェックを確認
④executeHandleErrorが動く
⑤ヘルパーのform_errorが実行され、エラーがでる←ヘルパー<?php use_helper("Validation")?>が機能する場所はココ
<?php echo form_error("");?>でエラーメッセージを表示させる
------------------------------2H------------------------------
★symfony復習
●部品化
・パーシャル
テンプレートのみ
指定したモジュールのテンプレートを読み込む場合は
include_partial("モジュール名/テンプレート名")
複数のモジュールで使用する場合、apps/templateに設置する
その場合は、include_partial("global/テンプレート名")で呼び出す
☆パーシャルでデータを渡す
テンプレート側
<?php include_partial("global/page_discription", array("mes" => "コメントの詳細ページ"))?>
パーシャル側
<?php echo $mes?>で変数として受け取れる
配列も受け取ることができる
注意:変数が存在しない場合にエラーが出てしまうので
<?php echo (isset($mes))?$mes:"メッセージなし";?>
のように三項演算子でチェックしておくのがいい
------------------------------3H------------------------------
★symfony復習
●部品化
・スロット
データの部品化
メタ情報を書き換えたりするときに使う
・テンプレート
<?php slot("footer_mes");?>
内容
<?php end_slot;?>
・レイアウト
<?php include_slot("footer_mes");?>
☆has_slot()
slotがあるか確認する関数、返り値はtrueかfaulse
☆スロット内でパーシャルを呼び出したりとかも可能
------------------------------4H------------------------------
★symfony復習
●部品化
・コンポーネント
ロジックとテンプレート
・action
components.class.php
・template
_テンプレート名Success.php
・componentだけのモジュールを作成する
・compshareモジュールを作成
symfony init-mod front compshareコマンドを打つ
・components.class.php
class compshareComponents extends sfComponents{
public function executeAccessCheck()
{
}
}
・_accessCheck.php
コンポーネントのテンプレートにはSuccessは付けない
・default/template/sitemapSuccess.phpでコンポーネントを呼び出す
<?php include_component("compshare", "accessCheck")?>
------------------------------5H------------------------------
★symfony復習
●エラーチェック
・backendにnews_addモジュールを追加
newsを投稿できるactionを作成
public function executeSubmit()
{
//データベースに接続
$news = new News;
$news->setTitle($this->getRequestParameter("title"));
$news->setArticle($this->getRequestParameter("article"));
$news->setDeleteFlg("n");
$news->save();
$this->redirect("/");
}
・バリデーション(エラーチェックを入れる)のために
送信先のアクション名でvalidate/submit.ymlの作成
・yamlファイルの項目
・required:
入力されているかどうかをチェック
☆注意☆
フォームのmethodは"post"でないとバリデーションが効かない
------------------------------6H------------------------------
★symfonyテスト
-----------------------------memo------------------------------
講義093日目
------------------------------1H------------------------------
★symfony復習
●ヘルパー
・テンプレート側で使う関数
フォームヘルパー
バリデーションヘルパー
リンクヘルパー
routhing.ymlで設定したリンク先を使うこともできる
・テンプレート側
<?php echo link_to("サイトマップ","@sitemap_sub")?>
・routhing.yml
sitemap_sub:
url: /sitemap
param: { module: default, action: sitemap }
・ヘルパーのカスタマイズ
授業で使ったページャ用のヘルパーはsymfonyで用意されたものではなく自作のヘルパー
<?php use_helper("MyPagerQuery", "Validation")?>
引数は一つ以上もつことができる
☆バリデーションの流れ
①submitボタン押す
②sfValidateクラスが動く
③作成したmodule/validate/submit.ymlのエラーチェックを確認
④executeHandleErrorが動く
⑤ヘルパーのform_errorが実行され、エラーがでる←ヘルパー<?php use_helper("Validation")?>が機能する場所はココ
<?php echo form_error("");?>でエラーメッセージを表示させる
------------------------------2H------------------------------
★symfony復習
●部品化
・パーシャル
テンプレートのみ
指定したモジュールのテンプレートを読み込む場合は
include_partial("モジュール名/テンプレート名")
複数のモジュールで使用する場合、apps/templateに設置する
その場合は、include_partial("global/テンプレート名")で呼び出す
☆パーシャルでデータを渡す
テンプレート側
<?php include_partial("global/page_discription", array("mes" => "コメントの詳細ページ"))?>
パーシャル側
<?php echo $mes?>で変数として受け取れる
配列も受け取ることができる
注意:変数が存在しない場合にエラーが出てしまうので
<?php echo (isset($mes))?$mes:"メッセージなし";?>
のように三項演算子でチェックしておくのがいい
------------------------------3H------------------------------
★symfony復習
●部品化
・スロット
データの部品化
メタ情報を書き換えたりするときに使う
・テンプレート
<?php slot("footer_mes");?>
内容
<?php end_slot;?>
・レイアウト
<?php include_slot("footer_mes");?>
☆has_slot()
slotがあるか確認する関数、返り値はtrueかfaulse
☆スロット内でパーシャルを呼び出したりとかも可能
------------------------------4H------------------------------
★symfony復習
●部品化
・コンポーネント
ロジックとテンプレート
・action
components.class.php
・template
_テンプレート名Success.php
・componentだけのモジュールを作成する
・compshareモジュールを作成
symfony init-mod front compshareコマンドを打つ
・components.class.php
class compshareComponents extends sfComponents{
public function executeAccessCheck()
{
}
}
・_accessCheck.php
コンポーネントのテンプレートにはSuccessは付けない
・default/template/sitemapSuccess.phpでコンポーネントを呼び出す
<?php include_component("compshare", "accessCheck")?>
------------------------------5H------------------------------
★symfony復習
●エラーチェック
・backendにnews_addモジュールを追加
newsを投稿できるactionを作成
public function executeSubmit()
{
//データベースに接続
$news = new News;
$news->setTitle($this->getRequestParameter("title"));
$news->setArticle($this->getRequestParameter("article"));
$news->setDeleteFlg("n");
$news->save();
$this->redirect("/");
}
・バリデーション(エラーチェックを入れる)のために
送信先のアクション名でvalidate/submit.ymlの作成
・yamlファイルの項目
・required:
入力されているかどうかをチェック
☆注意☆
フォームのmethodは"post"でないとバリデーションが効かない
------------------------------6H------------------------------
★symfonyテスト
-----------------------------memo------------------------------
登録:
投稿 (Atom)