2011年3月25日金曜日

3/25覚書

1時間目は遅刻

やること
昨日の復習
1.bbs2をbk.bbs2にリネームしてバックアップ
mv bbs2 bk.bbs2
2.front backend mypage
各アプリケーション作成およびdefaultモジュール作成。
3.backendとmypageで/区切りのURLでアクセス
4.frontアプリケーションのレイアウトを変更。

2時間目

1時間目続き。
30分から復習

3時間目
mypageは出るがbackendが出ない。はて。
/bbs2/web/backend/backend.phpの
../../にiが入ってた_| ̄|○
直った。

ちなみにでらっちが/web/main.cssと/apps/front/templates/layout.phpの
中身メールでくれてるよ。昨日とおとといのおいらの記事にもあるけど。
でらっちのみてね~。

member_addはいいのかなあ・・・・・・。

4時間目
retrieveByPK(1);のKは基本

困ったときのデバッグとシンボリックリンク
http://www.shonanbbs.com/front_dev.php
画面が真っ白のときはここを見ればエラーが書いてある。

で、デバッグバーの画像がまだ引っ張れてないので関連付け
bbs2/webで下記実行
ln -s /usr/share/pear/data/symfony/web/sf ./sf

sf -> /usr/share/pear/data/symfony/web/sf
が出ていればデバッグページでF5で出てくるよ。

backendやmypageなどのほかのページには、各ディレクトリへ移動してから
各_dev.phpの../を2個にしておくよ。

ln -s ../sf sf
上の階層(web)からsfを引っ張ってくるよ。

CSSも同じスタイルでよければ
ln -s ../CSS CSS
でつくよ。

セキュリティ上非常に危険なため、リリース前には必ず_dev.phpは削除する。

5時間目
Criteria(クライテリア)による条件指定
WHEREの代わりに使う。

$c = new Criteria();

$c->add(テーブル名Peer::カラム大文字, 指定する値, 条件)
条件を書かない場合はカラム=値と等しい場合となる。
SQL文だとこうなるけど
select * from member whwre id =1;
Symfonyではこうなる

//最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //IDが1のデータ
  //$c->add(MemberPeer::ID, 1);

  //member+sで複数にする。1行分のデータを引き出す。
  $members =MemberPeer::doSelectOne($c);

  //指定したIDのみ1行だけ引き出す。
  $member = MemberPeer::retrieveByPK(2);
  //$memberを表示させる。
  //print $member->getNickname();

  print_r ($members);

ソース出すとこうなる。データは配列で受け取る。
Member Object
(
    [id:protected] => 1
    [nickname:protected] => yamazaki
    [mailaddress:protected] => ****@gmail.com
    [password:protected] => 
    [created_at:protected] => 
    [alreadyInSave:protected] => 
    [alreadyInValidation:protected] => 
    [validationFailures:protected] => Array
        (
        )

    [_new:private] => 
    [_deleted:private] => 
    [modifiedColumns:protected] => Array
        (
        )

)

☆DBから名前のデータを引き出す。

action.class.php
  //最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);

indexSuccess.php
{を使うとわかりにくいので、:<?php endforeach;?>で囲う。

<?php foreach ($members as $member):?>
<?php echo $member->getNickname();?><br>
<?php endforeach;?>

☆練習問題
名前とメールアドレスをテーブルに出力+CSSで整形

indexSuccessのソース

<div class="tblData">
<table>
 <tr>
  <th>名前</th>
  <th>メールアドレス</th>
 </tr>
 <?php foreach ($members as $member):?>
 <tr>
  <td><?php echo $member->getNickname();?></td>
  <td><?php echo $member->getMailaddress();?></td>
 </tr>
 <?php endforeach;?>
</table>
</div>

MAINCSS
.tblData table {
border-collapse:collapse;
font-size:93%;
margin:5px 0;
}
.tblData th {
background:none repeat scroll 0 0 #EEEEEE;
color:#333333;
font-weight:bold;
padding:5px;
width:120px;
}
.tblData th, .tblData td {
border:1px solid #ddd;
paddig: 5px 10px;
}


6時間目
☆Criteria(クライテリア)による条件指定

条件
Criteria::EQUAL
Criteria::NOT_EQUAL

//最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //IDが1のデータ
  //$c->add(MemberPeer::ID, 1);

  //IDがyamazakiのデータ select * from member where nickname ;
  //$c->add(MemberPeer::NICKNAME, 'yamazaki', Criteria::NOT_EQUAL);

  //like指定
  //$c->add(MemberPeer::NICKNAME, "%yama%", Criteria::LIKE);

  //日付指定検索
  //$c->add(MemberPeer::CREATED_AT, "2011-03-01", Criteria::GREATER_THAN);

  //複数条件
  //$c1 = $c->getNewCriterion(MemberPeer::CREATED_AT, "2011-03-01", Criteria::GREATER_THAN);
  //$c2 = $c->getNewCriterion(MemberPeer::NICKNAME, "ya%", Criteria::LIKE);
  //$c1->addOr($c2);
  //$c->add($c2);

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);

忘れてたUPDATE
日付修正ID指定込み
update member set created_at ='2011-03-25' where id =2;
名前文字化け修正ID指定込み
update member set nickname =('名前') WHERE id =2;


☆練習問題 テーブルの上に検索欄追加。余裕のある人はcommentも呼び出して。
indexSuccess側
<form action="/" method="POST">
名前:<input type="text" name="keyword">
<input type="submit" name="send" value="送信"></form>

action側
  //最初に必ずセット select * from member;と同じ。
  $c = new Criteria();
  //シンプルなlike検索機能
  $keyword = $this->getRequestParameter("keyword");
  if($keyword !=""){
  $c->add(MemberPeer::NICKNAME, "%".$keyword."%", Criteria::LIKE);
  }

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);


commentに何も入れてなかった。サンプルに残そー。

insert into comment (nickname,content,created_at) values ('山崎','腰が痛い','2011-03-25');
insert into comment (nickname,content,created_at) values ('みっくみく','ボカロボカロ','2011-03-25');
insert into comment (nickname,content,created_at) values ('サンレッド','コードナンバー046','2011-03-25');
insert into comment (nickname,content,created_at) values ('ウサコッツ','アニマル怪人','2011-03-25');

2011年3月24日木曜日

3/24覚書

1時間目
腰痛&腹痛のため掃除はお休み。
・EclipceでShift+Ctrl+Fキーで勝手に整形してくれる。超便利。
(でも今までの感覚からするとちょっと見づらいかな;)
・☆練習問題解説編
user_addモジュールにinput、confirm、resultのactionを入れよう。
ページの内容は名前を入力→確認→完了の流れで作ろう。
できたらMENUの下に会員登録ってリンクつけてね。

ファイル自体が壊れたりエラーが多い時はPuTTYで削除かディレクトリごと

2時間目

・☆練習問題解説編続き
・メールアドレスの処理を追加
・bbs2にbackendアプリ追加
symfony init-app backend

frontは記事表示を担当。backendで管理機能を担当。
frontコントローラーのリクエストを受けるのはindex.php。
frontアプリケーションのfrontコントローラーはindex.php。

backendコントローラーのリクエストを受けるのはbackend.php。
backendアプリケーションのbackendコントローラーはbackend.php。

backendにdefaultmodule追加
bbs2で以下実行
symfony init-module backend default

2番目以降のURLは省略不可。
ブラウザでアクセスするときは
http://www.shonanbbs.com/backend.php/default/index
SEO的にまずいので/で簡略化だけど3時間目で。

3時間目

アプリ―コントローラーの関係

見栄えの問題やSEO上の考慮から
http://www.shonanbbs.com/backend/default
でアクセスできるように設定する。

1.cd /home/teacher/bbs2/web
に移動

2.backendディレクトリを作成
mkdir backend

3.backend.php backend_dev.phpをbackendディレクトリへ移動
mv backend.php backend_dev.php ./backend

4.htaccessディレクトリをbackendディレクトリへコピー
cp .htaccess ./backend

5.backendディレクトリへ移動
cd backend

6..htaccessの内容を変更する
vi .htaccess
RewriteBaseとRewriteRuleを以下のように変更

8行目
#RewriteBase /の#をとる
22行目
RewriteRule ^(.*)$ /backend/backend.php [QSA,L]
に変更する。

7.backend.phpを開いて下記に変更
3行目
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../..'));
/..を1階層増やすだけ。

8.http://www.shonanbbs.com/backend/defaultでアクセスできることを確認。

☆練習問題
mypageアプリを新規追加してbackendと同じようになってみよう。

4時間目

☆練習問題
mypageアプリを新規追加してbackendと同じようになってみよう。

の答え合わせ。

☆YAML
ヘッダー情報はYAML、ymlファイルで管理。
/bbs2/apps/front/config/view.yml

metas:
title: SHONANBBS
に変更し、
symfony cc(CCはキャッシュクリア)
ymlを変更したら必ずsymfony ccを行い、F5でページ更新。

ここの詳しい話は後日。
5時間目
metasの内容を以下に変更。

description: 課題掲示板です。
keywords: WEBエンジニア養成科,php,Symfony
language: ja

変更したらsymfony ccを行い、F5でページ更新。

■出ないとき
キャッシュをクリアする権限をユーザーでなくrootですると、Symfony ccが正常終了しない。
bbs2で
chown -R ユーザー:ユーザー /cache
でキャッシュの権限をユーザーに変更しなおすか、

chown -R755 ユーザー:ユーザー /cache
+パーミッション変更やてみる。


個別に書きたいときは各metasの項目を削除しlayout.phpで直書きか後日行う部品化を使う。

CSSも stylesheets: [main]
標準のCSS正規パス /home/yamazaki/bbs2/web/css/main.cssに存在する。
書き足したいときはカンマ+スペースで区切る
stylesheets: [main, mypage, ・・・]

javascripts: []もある。今はいじらないけど。

has_layout: on

actionの出力結果をレイアウトしなくていいときはoffにできるよ。

layout: layout
layout.phpを使うという意味。名称変更可能。

☆データベース
SQL を使用せずにデータベースを操作する、O/Rマッピングを使う。

O/R マッピングとは、「オブジェクト」と「リレーショナルデータベース」を
マッピング(対応付け)することです。
O/R マッピングは実装時のデータベース操作にかかわる煩雑な作業を軽減してくれます。

SQLのデータの記述はルールが無いため複雑になりやすい。

O/Rマッピングはルールが決まっているので作業効率が上がる。

とりあえずrootでmysqlログインするよー

ログインしたらcreate database study;でDB作成。
show database;でstudyの存在を確認したら

GRANT ALL ON study.* TO ユーザー名@"localhost" IDENTIFIED BY "パスワード";
flush privileges;

ホスト名は同じサーバーならlocalhost、外部からならIPアドレス。

しかし・・・・・・なぜかflush privileges;ができない
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
になってしまう。

回避策
use mysql;

を実行し下記コピペ。

CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

も一回flush privileges;でようやく完了。

6時間目
comment、member、テーブル作成。

create table comment (
id int not null auto_increment,
nickname text,
content text,
created_at datetime,
primary key(id)
);

create table member (
id int not null auto_increment,
nickname text,
mailaddress text,
password text,
created_at datetime,
primary key(id)
);

☆Symfonyでのデータベース接続
/bbs2/config/databases.yml
#をすべて取る。

mysql://root@localhost/dbnameを変更
mysql://ユーザー名:パスワード@localhost/study
エンコード設定とプログラムの記述注意点
YAMLは先頭部分の記述は半角スペース2個をひとつと判断している。
この部分の構成は崩さないように。

all:
  propel:
    class:          sfPropelDatabase
    param:
      dsn:          mysql://ユーザー名:パスワード@localhost/study
      encoding: utf8


/bbs2/config/propel.iniの以下を変更

propel.database.createUrl = mysql://root@localhost/
propel.database.url = mysql://root@localhost/bbs2


propel.database.createUrl = mysql://ユーザー名:パスワード@localhost
propel.database.url = mysql://ユーザー名:パスワード@localhost/study

☆schema.ymlを作成する(DB作成後のみ処理可能)
モデルを作成するための設計書にあたるschema.ymlを作成する。
DBを見に行って接続情報・テーブル情報を引き出し、データファイルを作るための設計書を作成。

一般ユーザーでbbs2から実行。
symfony propel-build-schema

vi /bbs2/config/schema.yml
で中身にcommentテーブルなどが出ている。

次にモデルファイルを作成。
bbs2で実行
symfony propel-build-model

cd lib/modelの中身にcommentPeer.phpとmemberPeer.phpができていればおk。

?? テーブル構造に変化があったらschemaとmodel再生成。
独自追加したい場合はschema.ymlとDB両方とも手書き修正。
自動生成させるとせっかく変えた設定が上書きされてしまう。

7時間目

データ入れます。
set names sjis;
忘れないでねー。

INSERT INTO member (nickname, mailaddress) VALUES
('yamazaki', 's****@gmail.com');
INSERT INTO member (nickname, mailaddress) VALUES
("みっくみく", "mmd@gmail.com");
INSERT INTO member (nickname, mailaddress) VALUES
("サンレッド", "sunred@gmail.com");
INSERT INTO member (nickname, mailaddress) VALUES
("ウサコッツ", "usako@gmail.com");

停電なんでここまで。

2011年3月23日水曜日

3/23覚書

腰痛のため4時間目後半から参加。
詳しくは講習の記録をご参照くだされ。

☆準備でちゃんと聞けなかったところ
actions.class.phpの
public function executeIndex()
indexSuccess.php
太字の箇所は同じ名前にする。

ちょっと言い換えてみる。
actions.class.phpで
public function execute動的処理()
出力処理Success.php
この関係は同じ変数で管理するというイメージがいいのかな。
あと大事なこと。executeの後の項目名は最初大文字で。しないと動かないよ。



☆URLとアクションの関係
Symfonyではモジュール+アクションのページ構成が基本となる。
【例】
member_addモジュールのinputアクションにアクセスするとき。
http://www.shonanbbs.com/member_add/input

あと、Virtualhostの設定間違えてた・・・_| ̄|○ゴメンヨー
<VirtualHost *:80>
    ServerName www.kikin.com
    DocumentRoot /home/kikin/web

    <Directory "/home/kikin/web">
        AllowOverride All
        Options -Includes -ExecCGI
    </Directory>

</VirtualHost>

<VirtualHost *:80>
    ServerName www.shonanbbs.com
    DocumentRoot /home/user(要修正)/bbs2/web

    <Directory "/home/user(要修正)/bbs2/web">
        AllowOverride All
        Options -Includes -ExecCGI
    </Directory>
</VirtualHost

以上を踏まえて練習問題。
☆bbs2にblogモジュールを作って出力。

1.PuTTYから一般ユーザーでbbs2に移動→以下実行
symfony init-module front blog
Eclipceに移動→F5で/bbs2/apps/front/modules/blogができてるよ。

2.そこのaction.class.phpを開いたら、
$this->forward('default', 'module');をコメントアウトか
return sfView::SUCCESS;に置き換えちゃおう。

これの意味の詳しいのは基金訓練WEBで。
基本return sfView::SUCCESS;しか使わないようだけどね。

3./blog/templatesのindexSuccess.phpに何か書いてみよう。

4.http://www.shonanbbs.com/blogにアクセス。


5時間目
CSSのこと。

まあこれもFizzBuzzできてりゃなーんとなくわかると思う。
Symfony+CSS使いはかーなーり、重宝されるそうな。
CSSはテンプレサイトいっぱいあるし、見た目で選べるから楽だよ。

CSSでIDは1ページにひとつだけ。クラスは何個でもOK。
実際に作ってみました。

/bbs2/apps/front/templates/layout.php
ちょっとだけ崩れてるかも。ごめんよう。
<div id="header">
SHONANBBS
</div>

<div id="contentWrappr">
<div id="contentLeft">
<?php echo $sf_data->getRaw('sf_content') ?>
</div>

<div id="contentRight">
MENU
<a href="/member_add/input">会員登録</a>
</div>

<div class="clr"></div>
</div>

<div id="footer">
COPYRIGHT © SHONANBBS
</div>

/* */CSSのコメントアウトだよー。
/bbs2/web/css/main.cssの記述
ちょっと違ってるかもだけどごめん。

/* ヘッダ情報 */
#header {
border-bottom:1px solid #ddd;
margin-bottom:10px;
background-color:#228b22;
}
/* ページ全体のレイアウト */
#contentWrappr {
width:850px;
margin:0 auto;
}
/* 左段落レイアウト */
#contentLeft {
width: 600px;
float: left;
}
/* 右段落レイアウト */
#contentRight {
width: 250px;
float: right;
}
/* フッター情報 */
#footer {
border-bottom: 1px solid #ddd;
margin-bottom:10px;
}
/* フロート処理クリア */
.clr {
clear: both;
}

つかCSS久々過ぎて構文吹っ飛んでたさ・・・。
思い出したら馬鹿さ加減でもうね。・ ゚・。* 。 +゚。・.。* ゚ + 。・゚・(ノД`)

ちょっとメモ。
デバッグ用アドレス*****_dev.php/
【例】front_dev.php/

☆練習問題

user_addモジュールにinput、confirm、resultのactionを入れよう。
ページの内容は名前を入力→確認→完了の流れで作ろう。
できたらMENUの下に会員登録ってリンクつけてね。

ちょwwwレヴェル高杉wwwww
でした。
その前の段階のあることをやってなかったもんで;

同時進行でやるとケアレスミス多発でした。
構文は間違ってないのにページ出ねえぇええええ!

☆どうもPOSTやGETの説明だったみたい。

actionでは
$this->変数 = $this->getRequestParameter("変数");
これだけでPOSTもGETも処理するんだって。

defaultのaction.class.phpに記述。
  public function executeIndex()
  {
 $this->name = $this->getRequestParameter("name");
 $this->address = $this->getRequestParameter("address");
 $this->hobby = $this->getRequestParameter("hobby");
   return sfView::SUCCESS;
  }
で、View側。
HELLO! ENOSHIMA!<br>

私の名前は<?php echo $name;?>です。<br>
住所は<?php echo $address;?>です。<br>
趣味は<?php echo $hobby;?>です。<br>

<hr>

<form action="/" method="POST">
名前:<input type="text" name="name"><br>
住所:<input type="text" name="address"><br>
趣味:<input type="text" name="hobby"><br>
<input type="submit" name="send" value="送信">
</form>

このとき最初は表示されなくて、すごく悩んでいたんでつが・・・気づかなかったんでつよ。
formがfromとか。

なんかね、もう。ばかばかばかばかばかばか。

あとは、別actionのページ作ってください、ってとき。
newsSuccess.phpと書かねばならないところを、
news.Success.phpとか書いてた・・・・・・・・・・・・。


・ ゚・。* 。 +゚。・.。* ゚ + 。・゚・(ノД`)


それからやっとこの意味がわかった。

対応するビューは各モジュールのtemplatesディレクトリに次のような命名ルールで関連付けられています。

アクション名 + ビューの種類.php

わかるとなんでもないことなんだよなああああああああああ。

明日は這ってでも行くんで、腰痛よ、治まってくれ~~~~。


以下超ネタバレ。今後のために自力解決推奨。

1.PuTTY一般ユーザーからbbs2で以下実行
symfony init-module front member_add

2.action.class.phpを下記に変更
  public function executeConfirm()
  {
 $this->name = $this->getRequestParameter("name");
   return sfView::SUCCESS;
  }
  public function executeInput()
  {
   return sfView::SUCCESS;
  }
  public function executeResult()
  {
   $this->name = $this->getRequestParameter("name");
   return sfView::SUCCESS;
  }

3.以下のページ作成
/bbs2/apps/front/modules/member_add/templates/confirmSuccess.php
中身
名前:<?php echo $name;?>です。<br>

<hr>

<form action="/member_add/result/" method="POST">
<input type="hidden" name="name" value="<?php echo $name;?>">
<input type="submit" name="send" value="完了">

</form>

/bbs2/apps/front/modules/member_add/templates/inputSuccess.php
中身
メンバ登録!<br>

<hr>

<form action="/member_add/confirm/" method="POST">
名前:<input type="text" name="name"><br>
<input type="submit" name="send" value="確認">
</form>
/bbs2/apps/front/modules/member_add/templates/resultSuccess.php
中身
完了しました。

4.http://www.shonanbbs.com/member_add/inputでテスト。

2011年3月22日火曜日

3/22覚書

1時間目
1.USBからkikinフォルダをコピー
・rootからkikinユーザー作成(パスワードは任意)
2.FFFTPをあげてkikinで新規ホスト作成。IPアドレスはVMWare playerと一緒
3.接続できたらkikinディレクトリへ1.でコピーした中身をすべてアップロード
4.vi /etc/httpd/conf/httpd.conf
を開き下記追加
<VirtualHost *:80>

    DocumentRoot /home/kikin/web
    ServerName www.kikin.com
    ErrorLog logs/kikin.com-error_log
    CustomLog logs/kikin.com-access_log common

    <Directory ~/home/kikin/web~>
        AllowOverride All
        Allow from All

        Options -Includes -ExecCGI
    </Directory>
</VirtualHost>
ちょっと上にあるNameVirtualHost *:80の前の#取ってね。

5.Apache再起動
/etc/init.d/httpd restart
実行

httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

ってなればおkだよ
6.C:\WINDOWS\system32\drivers\etc\hosts\hosts.confをエディタで開いて
192.168.***.***(自分のIP) www.kikin.com
を入れて保存。

2時間目
開始8分で停電。
今後の課題用WEBアプリの設計図を作成。
自分の好きなこと、やりたいことでおkだけど、思いつかない人はブログ。

3時間目
お昼挟んで停電復旧。
1~2時間目でやりきれなかった処理を終わらせる。

4時間目
パーミッション変更コマンド
cd /home/でhomeディレクトリに移動して、以下コマンド実行
chmod -R 755 kikin
kikinディレクトリのパーミッション(アクセス権)を775に変更する。

cd /home/kikin/config/
でディレクトリ移動し、
vi config.php
でconfig.phpを開く。
su - kikin
でkikinユーザーへ移動し、
symfony fix-perms
でパーミッション修正。
symfony cc


5時間目
cd /home/kikin/web/
に移動
tar -xvzf img.tar.gz
で解凍
一般ユーザーへ変更し以下を実行
mkdir bbs2
bbs2ディレクトリ作成
cd bbs2
bbs2ディレクトリへ移動

symfony init-project bbs2
symfonyプロジェクト作成


アプリケーションファイル作成
symfony init-app front

アプリケーションの中にデフォルトモジュール作成
symfony init-module front default


6時間目

vi /etc/httpd/conf/httpd.conf
を開いて下記追加
<VirtualHost *:80>
        ServerName www.shonanbbs.com
        DocumentRoot /home/自分のユーザー名/bbs2/web

        <Directory ~/home/自分のユーザー名/bbs2/web~>
                AllowOverride All
                Options -Includes -ExecCGI
        </Directory>
</VirtualHost>

/etc/init.d/httpd restart
で再起動


リモート・システム・エクスプローラー

リモート・システム・エクスプローラーは、Eclipse3.4で新設された機能。
Eclipseのワークスペースの外のディレクトリーやファイルを参照できる。
(要するにWindowsのエクスプローラーやftpツールと同じ)
リモート・システム・パースペクティブ

メニューバーの「ウィンドウ(W)」→「パースペクティブを開く(O)」→「その他(O)」で
「リモート・システム・エクスプローラー」を選択すると「リモート・システム」パースペクティブが開く

左側ウィンドウで右クリック→新規→接続→SSHのみでOK→ホスト名は自分のIP。
貼り付ければ接続名も勝手に入る。ID/PASS保存チェック。で完了。

確認メッセージはすべてはい。
/home/ユーザー名/bbs2/apps/front/modules/defalut/actions/actions.class.phpを開き、
$this->forward('default', 'module');を削除して
return sfView::SUCCESS;に置き換え。
/home/ユーザー名/bbs2/apps/front/modules/defalut/actions/indexSuccess.phpに
hello enoshima!
とでもいれませう。
保存したら次にPuTTYで一般ユーザーでbbs2フォルダへ移動し、
symfony fix-perms
symfony cc
実行。
これでhelloでたらおk。

※なぜかうまくいかーん状況。
理由はタイプミスですた;
cd apps/front/modules/
でモジュールの中見たらdefalutになってた_| ̄|○
rm -rf defalut/でリネームして落ち着きますた。

明日は地震の埋め合わせの開講。木曜日3/24と5/9は7時間授業やるぞー。

2011年3月11日金曜日

3/11覚書

1時間目
いよいよサーバー構築。
まずは準備

★Firewall設定
SELinux( エスイーリナックス)解除。
ELinuxとは強制アクセス制御 (MAC) 機能を付加するモジュールの名称。
Linuxデフォルトのセキュリティソフト。
これがあるとサーバーの動作、つか学習の邪魔なので無効化して止めます。

VMWare player起動→PuTTYをrootでログイン
◎vi /etc/sysconfig/selinuxを実行。
◎6行目にSELINUX=enforcing(有効)とあるので

◎SELINUX=disabled(無効)に変更。
行数は:set numberでわかるよ!

◎rebootでCent OS再起動を命令。これをしないと設定が反映されない。
PuTTYいったん終了
Cent OSでログイン画面が出たらPuTTYでrootログイン。
getenforceを実行してdisabledと出れば成功。違ってたら◎やり直し。

以下から1行ずつコピペでEnter。一文字でも間違えるとサーバー機能喪失で大変なのでコピペ。

iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#ルールクリア
iptables -F

#icmp(ping) と自端末からの入力を許可
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

#Web、FTP、POP、smtp による接続を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#ssh による接続を許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#TCP の接続開始と応答、FTP データなどを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ルールをセーブする
/etc/init.d/iptables save

vi /etc/sysconfig/iptablesを開いて
INPUT ACCEPT [51:3934](数字は各自異なる)になっていればおk
INPUT DROPの場合はACCEPTに変更

2時間目
★Apacheの設定

Apacheとはhttpを利用するために必要なプログラム。
yum -y install httpd
でインストール。
yum →インストール用コマンド
-y →確認メッセージをすべてYESにするオプション。
httpd →Apacheソフトウェアのインストーラー

Complete!で終了。

RUNレベル設定 →Linuxの動作モードレベルのこと。
Windowsスタータップと捉えておk。たいていは7つ設定。
基本は2-5に切り替えるが、実行させたら自動で割り当ててくれるので気にしなくていい。

/sbin/chkconfig httpd on
/sbin/chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ってなってればおk
できたら
/etc/init.d/httpd start
/etc/init.d/httpd restart
の順で実行。OKが出れば大丈夫。

★MySQLインストール

yum -y install mysql-serverを実行。
completeまで待つ。
出たら
vi /etc/my.cnfで設定ファイルを開く。
[mysqld]の下に下記追加。
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
さらに[mysqld_safe]の項目の下に追加。

[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqldump]
default-character-set = utf8

そしてRUNレベル設定。
/sbin/chkconfig mysqld on
/sbin/chkconfig --list mysqld

mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ってなってればおk。
そんでMySQLサーバー起動。
/etc/init.d/mysqld start
MySQL を起動中: [ OK ]
mysqldのdはdemon、裏側で実行するプログラム、プロセスと同意義。
MySQLの動作を支える縁の下の力持ち

そしたらプロンプトと同じように
mysql -u root
rootで入る。パスワードはまだ決めてませんので、ていうか
いままでのMySQLと動いている場所が違うので、既存ユーザーは使えません。
データもありません。これから作ります。


★vsftpdのインストール
サーバーにFTPプロトコルのリクエストを受け取るためのプログラム
HTTPとは別にアップロードに必要。
yum -y install vsftpd
completeで完了。

/sbin/chkconfig vsftpd on
/sbin/chkconfig --list vsftpd

vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
こうなってたらおk

3時間目
★FFFTPにVMWareの接続設定を保存。
接続名はVMWare。IPアドレスはPuTTYのifconfigで確認だよ。
ユーザー名はPuTTYで決めた一般ユーザーとパスワードを使うよ。


☆うまく接続できなかった場合☆
vfftpdの設定不備かSElinuxの設定不備のどちらかの可能性高し。


★PHPインストール
yumで入れるとVer5.1になってしまうので、手動インストールで最新Verへ。
取得先のGPG-KEY 取得
rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
DL先の設定
vi /etc/yum.repos.d/utterramblings.repo
を実行し、開いたら中は何も無いので下記コピペ
内容はDL先をローカルからサーバーに変更する。
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
保存したらつぎ~

yum -y install php
でphpインストール。下も続けて1行ずつ
yum -y install php-devel
yum -y install php-common
yum -y install php-gd php-mbstring php-pdo php-mcrypt php-mysql php-ncurses php-xml

php -vでVer確認
PHP 5.2.16 (cli) (built: Dec 17 2010 14:09:03)
でおk

★Symfonyインストール
yum -y install php-pear
pear channel-discover pear.symfony-project.com
pear install symfony/symfony-1.0.20

symfony -V(大文字)で
symfony version 1.0.20と出れば完了

開発環境準備ここまで

PuTTY、VMWare、FFFTP終了。
VMWare再起動したらCent OSを削除。
自力でCent OS再インストールして。
今日やったこと全部自力でやり直せ。と。

4時間目

再インストール続き。
面倒だから工程省略。
IP変わらなかったんでPuTTY設定生きるよ。
PuTTYセキュリティ警告。出たらここははいで通した。めんどいから。

ここから地震のため混乱;

5時間目
2回目reboot忘れたからFTPログインできなかった・・・reboot2回目後正常。
作業完了。

6時間目
再インストール一通り終わったら、自分のIPをブラウザで入れてApacheが出るか確認。
出たら

cd /var/www/html/
でhtmlフォルダに移動。
vi index.html
作成したらhello! world!と入れて保存。
ls -al
でファイル確認。
IP開きなおすと、index.htmlで保存した文字が出てくる。

以上をゆっきー&ばおさんへレクチャーして終了。
バーミッションの設定とかどうなるのかなー。

2011年3月10日木曜日

3/10覚書

大前提:フォルダという表記は今後ディレクトリにします。

1時間目
vi新規作成から、前回の復習。

2時間目
PuTTY即ログイン
ただしwindws、OSのログインパスワード、セキュリティが確立している状態でのみ推奨。
デスクトップにputtyのショートカットを作成
ショートカットを右クリックし、プロパティをクリック
リンク先を以下のように修正し、OKをクリック
"C:\Program Files\PuTTY\putty.exe" -load 接続セッション名 -l "ユーザ名" -pw "パスワード"
そのショートカットをランチャーに設定すると、毎回ユーザ情報を入力する必要がなくなります。

それからclnchへそのショートカットドラッグ。名前は自分でわかれば何でもおk。

そんでホットキー設定。
CraftLaunch(クラフトランチ)だよ。
以下ランチャーと呼ぶよー。
入れたらクリックしてCキーを押せばConfigが出るから十字キーで選択してEnter。
ホットキー割り当て選択してEnter。
Ctrl+Shift+Spaceキー同時押ししてC-S-Spaceと画面にでたらEnter。
確認方法はランチャー以外の箇所をクリックするとランチャーに日付と時刻が出るよ。
Ctrl+Shift+Spaceキー同時押ししてランチャーが黒くなれば成功だよ。
いちいちクリックしなくていいから楽ちんなのだ。


残りの時間はviの操作の練習。
画面移動Shift+H(high)、M(middle)、L(Low)

3時間目
vi操作続き

文頭、文末の処理がちょいと面倒だね。
そんなときのためにShift+$があるんだけどねー。
ただ、endキーで慣れてるんでちょっと使いづらいねえ。
ちなみにvi側で選択=コピーのキャッシュはこっち側で貼り付け可能だよー。

上級者向けつかいいんちょから。
vi コマンドリファレンス

☆UNIXコマンド

|パイプ
【例】ls -al |wc 
wcはファイルの行数、単語数、サイズを表示
|(パイプ)でつなげて結果を表示させる。
>リダイレクション
【例】ls -al > test.txt
>はリダイレクト。コマンド情報をファイルに出力できる。
vi test.txtで開くとls -alの内容が中に記述されている。
【例】ls -al |wc > test2.txt
というふうにつなげることもできる。
wcの結果をtest2.txtに出力させるという命令。

ディレクトリ移動
cd(カレントディレクトリの意)
cd ..でひとつ上の階層へ。

/home/yamazaki
[yamazaki@localhost ~]$ cd ..(いっこ上の階層)
[yamazaki@localhost home]$ pwd(現在地表示)
/home
[yamazaki@localhost home]$ cd ..
[yamazaki@localhost /]$ pwd
/

戻り方は2通り。どちらでも同じディレクトリを開く。
[yamazaki@localhost ~]$ cd /home/yama
[yamazaki@localhost ~]$ cd ../yama
直前のディレクトリに戻るのに、cd -もできるよー。

★豆知識★
ls -alしたときに右端の文字が青かったらディレクトリを示す。
赤かったら圧縮されている。

ディレクトリ作成
mkdir ディレクトリ名

ファイルの削除
rm ファイル名

ディレクトリごと削除するにはオプション -rを付ける
rはrecursive(再帰的)の略
rm -r ディレクトリ名

ファイル(ディレクトリ)移動
mv ファイル(ディレクトリ)名 移動先
【例】mv yama1.txt /home/yamazaki/yama1/

ファイルコピー&別ディレクトリへ移動
【例】cp 0310-01.txt yama1.txt | xargs mv yama1.txt /home/yamazaki/yama1/

4時間目
catコマンド
内容表示。
【例】cat test4.txt
長いファイルの場合は|moreで1画面を出し、Enterで1行ずつ見える。
【例】cat test4.txt | more

headコマンド
ファイルの先頭内容10行を見ることができる。-nで行数指定可能。
【例】head -n 3 yama1.txt

tail -f リアルタイムにファイルの末尾内容10行を見ることができる。-nで行数指定可能。
サーバーのログファイルをチェックするときに使う。
【例】tail -f -n 3 yama1.txt

ファイルの圧縮、解凍
複数指定もこんな感じで。
【例】tar -cvzf ptest.tar.gz test2.txt test3.txt test4.txt

cronコマンド
今はコマンドの元が無いので使えませぬ。

findコマンド
検索機能。
場所も名前もわからないときは【例】find / -name ファイル名で検索すればいいのだ。
日付で出すのも有効。
今のぼくらは【例】find ./ -mtime -1で出てくるのだ。
昨日作ったばかりだからね。

5時間目
grepコマンド
検索対象の文字とファイル内容が一致するか検索
練習準備
yama1、2、3のディレクトリにtest.txt作成。
内容は
test
hello
nya
nyanya
を適当に入れる。入れる項目はすべて同じにはしません。ちょっとだけ変えます。
grep -r -l test ./
今のディレクトリすべてを対象に、testという言葉が入っているか調べて、
パターンに一致した行を含むファイル名だけを出力する。
ほかhelloやnyaでも調べる。

lnコマンド
Windowsショートカットと一緒
classや画像のインクルード時に活用。
ln -s リンク元( 実体) リンク名
【例】ln -s yama1 ya1

duコマンド(rootで入ってから操作)。
指定したディレクトリ内の全てのファイルとディレクトリサイズを確認する時に使う。
【例】du -k /var
ディレクトリ全体のサイズを確認する場合はオプション sをつける。
【例】du -s /var
ファイルサイズをわかりやすくするには-hをつける。
【例】du -s -h /var

killコマンド
プロセス強制終了。
各プロセスはtopで確認。右端のCOMMANDだよ。

wgetコマンド
直ダウンロード&サーバーうp

xargs(エックスアーグズ)コマンド
xargsは、標準入力から受け取ったものを引数として、他のコマンドを起動するコマンドです。
【例】find ./ -name "hello*" | xargs rm -f
今のディレクトリからhelloを含むものを探し、さらに削除します。
発展系
【例】find ./ -type d -name "yama" | xargs ls -la
今のディレクトリからディレクトリ名にyamaを含む項目のみリスト表示します。

6時間目
今日の復習

vi終了したーい:q!だたね; いまいち掴めん・・・。
コマンド入力中にEnterしちゃった→Ctrl+Cで抜けます。

IDManagerをメモ帳代わりにすると今後楽。
ホットキーCtrl+I+OでIDManager起動できるお。

おすすめサイト

UNIXコマンド推奨。

いまさらxargsの便利さを主張してみる
条件にヒットしたファイルを ~/backup にコピーする
Loadaverageが50以上?はてな掲示板より 例題のような感じ。
ロードアベレージが86.29 実体験の様子。

2011年3月8日火曜日

3/8覚書

1時間目
お掃除。
VMWAREとCentOSのインストール。
ファイルサイズがGB単位なのでUSBメモリでコピー。
っても待ち時間にVMWAREはDLした。
さすがにUSBが一個なので時間かかる・・・・・・。

2時間目
ファイルコピー終わらず・・・・・
USB2個あればなぁwwww

3時間目
vmware とは、クライアントのマシンに仮想サーバを構築するためのソフト。
開発現場でも、vmware で個人用開発環境を構築し、
そこで開発したプログラムを本番環境に移すという開発フローを取っている人が多い。

vmware playerのインストール
* vmware playerをダウンロードする
* ダウンロードしたVMware-player-3.1.2-301548.exeをクリックしインストールを開始する
* すべて「次へ」で最後にパソコンの再起動を行なう
* デスクトップに出来ているvmware player のショートカットをクリックし起動する。

次回からは起動してCent OS選択して仮想マシンの再生→PuTTYで実行。

CentOSのインストール

コピーしたCentOS-5.5-i386-bin-DVD.isoを
マイドキュメントに生成されたMy Virtual Machinesへドラッグ。
マウスカーソルの動作はCent OSかWindowsか切り替えが必要。
Cent OSから戻るときはCtrl+Altで抜ける。
サーバー管理者パスワードは6文字以上で設定。
細かい手順は訓練サイトみて。
☆POINT
【Desktop-Gnome】のチェック除外→Cent OSのデスクトップ画面を使わない。
つかサーバーなんだし要らないよ。重くなるし。現場環境に合わせるのだ。
【今すぐカスタマイズ】で選択し左メニューから【開発】、右のセレクトボックスで
【レガシーなソフトウェアの開発】と【開発ツール】、【開発ライブラリ】にチェック
これをしないとコンパイルの際にライブラリが無いといわれてしまう。

4時間目
rootでログイン。さっき決めたパスワード(非表示)を入力して
root@localhostが出たら成功。
ifconfigを入力してinet addrの192.168.~をメモ。
putty起動してホストにメモった192.168.~を入力。ポートはデフォルト22まま。
セッション接続名は任意だがVMWAREとでもつけて保存。
そして開き、またrootとパスワード(ここも非表示)

Cent OSはあまりいじらないが、
root(管理者)ユーザーのままだと危険なので別ユーザーを作る。

☆以降PuTTYで操作。
PuTTYでuseradd 半角ユーザー名。変化無ければ作成成功。
パスワードはpasswd ユーザー名で変更可能
パスワードを聞かれるので2回パスワードを入力する
exitでPuTTY終了。PuTTY再起動で設定したユーザー名とパスワードでログイン。

あとセッション切れ防止のための処理。
まずは設定したセッション選択して読み込み。


左側メニューの接続からkeepaliveの数値を300に変更して、
セッションを再度選択して保存。


☆文字化け時の対策はUTF-8(CJK)を選択。変換と同じ処理で保存オヌヌメ。

su(switch userコマンド)で追加したユーザになり、自分のルートディレクトリを表示する
ちなみに[ユーザー名@localhost~]$は一般ユーザー。
[ユーザー名@localhost~]#は管理者です。


ユーザー変更は
su ユーザー名で変更。suだけだとrootへスイッチ(ただし権限は元ユーザーのまま)。
ここからexitすると元のユーザーに戻る。
su -を実行するとスイッチ先のユーザーの権限(環境変数)へ移行できる。

【練習】
・ユーザーを新規追加。

5時間目

VI操作
UNIX 環境の標準テキストエディタ
特徴
* コマンドモードとテキスト入力モードがある。
* 独特なキー操作
* 軽い
他にemaxというエディタもあるが、VIが標準装備。
コマンド
pwd 自分のディレクトリ表示
ls -al自ディレクトリのファイル一覧を表示


vi test.textで作成。最初はコマンドモードなのでテキスト入力モードへ切り替え。
iキーで変更可能。ESCでコマンドモードに変わる。
保存はESC押してから:wq!で保存され、コマンドモードに戻る。小文字でコマンドと認識。
wq(Write & Quit)!(強制)
vi 既存ファイル名(拡張子必須)で既存ファイルが開ける。

6時間目
Hキー:左
Lキー:右
Kキー:上
Jキー:下

キーボードでカーソル移動。マウスが無かった時代に
ホームポジションでカーソル移動ができるようにした工夫。
文字がある箇所のみ→キーで次の行に移動できるが、
文字が続いていない場合はJキーで下げる必要がある。

文字挿入はESCでコマンドでカーソル移動、iキーで挿入、ESCでコマンド移動
おまけに行が続くとJキー/Kキーで下の行えらべねええええええ。

コピー&ペースト
コピーしたい箇所を選択するだけでコピーされ、右クリックで貼り付け
行数表示
:set numberで行数表示/:set no numberで非表示

補完機能
ファイル名の先頭文字を入れてTabキーを押すと補完し、複数の場合は候補表示してくれる。

ていうかここ参照でいいような。
細かい解説
viコマンド リファレンス

その中間かな?解説
vi / vim コマンド一覧

大きな文字でやさしく解説
viエディタでの編集・操作コマンド