goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ZendにおけるMVC(Javaフレームワークとの違い)その2

2012-11-06 13:16:42 | PHP
シリーズ「ZendにおけるMVC(Javaフレームワークとの違い)」の続き

前回は、Zendの画面構成を書きました。
 で、そこでの問題点として、


例えば、現在表示している画面が、index/index.phtml画面だったとする。
 この中のフォームタグのactionの指定が、
   ans/kotae
 だったとすると、
   AnsController.phpのAnsControllerクラス内のkotaeメソッドが呼ばれ、
 次に表示される画面は、
   ans/kotae.phtml
 となる。



 つまり、入力内容の判定をする前に、次の画面の行き先を指定する・・・ということは無茶なので(入力値を元にDBを検索して次の画面遷移が決まることもある。会員のランクによって画面が違うようなケース)、何とかしたい。この問題解決方法について考えるのが、今日の御題




■問題点と解決策について

 結局、イベント処理部分と次の画面遷移が分離してないことが問題なので、
 無理やり分離する。



・次の画面遷移はコントロール内のアクションメソッドにおいて
   $this->_forward('アクション名','コントローラー名');
 で指定するとする




 その場合、次の画面名(コントローラー名)がわかっていないと書けない。
 こんな規則を導入する。



・画面名は、コントローラー名のControllerの前の部分と同じで、
 Viewにおいて、 scriptの下に置くフォルダー名と一致する
 (ここまでは、Zendのきまり)

 そして、画面は、かならず、そのフォルダの中のindex.phtmlに記述するものとする
 (ここが今回決めたこと)

 したがって、コントローラーの中にindexActionが存在する



 そして、画面でボタンをクリックすると、イベントが発生する。
 このとき起動されるアクションは、Formタグのactionで指定されることになる。


・画面上のボタン等のイベントは、Formタグのactionによって、行く先のURLが
 指定される。
  (ここまでは、HTML・PHPの規約)
 このとき、action先は=現在の画面/アクション名
 とし、現在の画面のコントローラーに、アクションを記述する。
 そのアクションから、上述の_forwardをして、次の画面に遷移する



こうすると、きれいにいく。




■サンプル

今、2つの画面がある。

・はじめに、この画面が表示される。

これを、画面名indexとしよう
そして、この画面のボタンを、kotaeという名前にする。

・上記の画面のボタンが押されると、この画面が表示される。


これを、画面名ansとしよう
そして、この画面のボタンを、topという名前にする。




■規約を適用した場合のサンプル構成

画面index,ansそれぞれに、コントローラーをつくり、
画面をindex.phtmlに書く、
すなわちViewは、index/index.phtmlとans/index.phtmlの2つ
コントローラーは、IndexController.phpとAnsController.phpの2つで、
indexActionと、ボタンに対するactionができる。

そうすると、ファイル構成としては、こんな感じになる。



controllers
  |-IndexController.php
  |  中で、indexAction
  |     kotaeAction→ansのindexにフォワード
  |
  *-ansController.php
    中で、indexAction
       topAction→indexのindexにフォワード

views
 *-scripts
    |-index
    |  |
    |  *-index.phtml
    |    Formタグのactionでindex/kotaeを指定
    *-ans
      |
      *-index.phtml
        Formタグのactionでans/topを指定






具体的な、ファイルの中身などは、次回以降にみていく。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ZendにおけるMVC(Javaフレームワークとの違い)その1

2012-11-05 14:43:21 | PHP
Zend PHPのサンプルはいろいろあるが、MVCはこうやれ!
というのを、はっきり書いていないので、ここに書いてみる。
(何回かに分けて書く)

今日はMVCのうち、VとCについて(つまり、画面周り)
抽象論




■基本的な画面構成

以下の構成が基本なようだ

・1画面につき、ボタンが1個ないしは数個ある
・このボタンをクリックすると、サーバーにいって、処理をする




■Zendにおける基本的な考え方

・コントローラーは、大きく2つの部分に分かれる。
   フロントコントローラー:1つのアプリ?に関して1つ
   アクションコントローラー:1画面につき1つのクラス

・ビューは、1画面につき1つのファイル(.phtml)になる




■つまり、画面側からみると、

1画面について、
  1個のコントローラーのファイルが作成され、クラスが記述される
     画面に対応するボタンが、クラス内のアクションになる
  1個のビューのHTMLファイル(phtml)がある
     ビューの名前は、デフォルトでは、コントローラーのアクション名




■ということは(注意点)

・現在表示している画面が、index/index.phtml画面だったとする。
 この中のフォームタグのactionの指定が、
   ans/kotae
 だったとすると、
   AnsController.phpのAnsControllerクラス内のkotaeメソッドが呼ばれ、
 次に表示される画面は、
   ans/kotae.phtml
 となる。

 フォームタグでは、呼び出すメソッドと同時に(デフォルトでなにもしないと)
 次の画面指定までかかわってくるので注意




■Javaとの違い

 Javaのフレームワーク、たとえば、strutsの場合、
 ボタン、つまりアクションは、Actionクラスになる。

 一方、Zendでは、アクションは、メソッドであり、
 アクションを起動するボタンが入っている画面が、
 クラスに相当する。

クラスになるものが違うので注意




■ただ、これは危険

 ただ、Zendのデフォルトのこの方式は、次に表示する画面が予見できる
場合はいいが、そうでないケース、たとえば、DBアクセスをした結果、
処理を振り分けるなどというときには、やりにくい。

 そのため、リダイレクト、フォワード、renderの変更などを使って、イベント処理と次画面表示をわけられる。これについては、別の機会に

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UbuntuでXAMPPをいれてCakePHPを動かすまで

2012-10-05 09:42:52 | PHP

UbuntuでXAMPPをいれてphpMyAdminを動かすまで
http://blog.goo.ne.jp/xmldtp/e/7d58d41c33be01cb28e92e1e022dc886

のつづき。CakePHPでBakeするまで。




■手順

●0.前提
XAMPPは入れた。
Apache,DB(MySQL),PHPは動作しているものとする。
MySQLのデータベース test に、以下のuserテーブル(項目id,name)がある


--------------------- ここから --------------------

●1.ダウンロードしてくる
http://cakephp.jp/から

●2.解凍して、フォルダの名前を変える
  myappとか

●3.そのフォルダをapacheのhtdocs(/opt/lampp/htdocs/)の下にいれる。
   ただし、htdocsにコピー権限がない場合
      sudo chmod 777
   して、コピーできるようにする。コピーするmyappも読み書きできるように

●4.この段階で、ブラウザで確認
  http://localhost/myapp
  ブラウザから、Cake PHPが確認できればOK
   →この段階では、DBに繋がっていないので、DBのエラーが出るならOK
    そうでなく、ファイルの権限のエラーの場合は、権限付与をする
    また Notice (1024):エラーは、表示されたapp/config/core.phpを適当に直す


/**

 * A random string used in security hashing methods.
 */
	Configure::write('Security.salt', 'abcdefg12345');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
	Configure::write('Security.cipherSeed', '1234567890');


なかんじ

    参考
http://gecko.hp2.jp/2010/05/12/cakephp%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%9f%e3%82%89notice-1024%e3%81%8c%e5%87%ba%e3%81%9f%e3%80%82/


●5.コマンドプロンプトを立ち上げて、
   コマンドプロンプトから、上記4で作成したフォルダの下の
   (例では、/opt/lampp/htdoc/myappの下の)
     app/config/database.php.defaultをコピー、
     コピーしたファイル名をdatabase.phpとする
 
●6.コピーしたdatabase.phpを開き、以下のようにDATABASE_CONFIGを修正して保存する
(ユーザー名lampp,パスワードなし、DB名test、プリフィックスなしの場合)

class DATABASE_CONFIG {

public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'lampp',
'password' => '',
'database' => 'test',
'prefix' => '',
//'encoding' => 'utf8',
);

public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'lampp',
'password' => '',
'database' => 'test',
'prefix' => '',
//'encoding' => 'utf8',
);
}

   つまり、ユーザー名、パスワード、データベース名を修正する。

●7.この段階で、ブラウザで確認
  http://localhost/myapp
  ブラウザから、Cake PHPが確認でき、DBに繋がっていればOK
   →つながっていなかったら、myapp/app/config/database.phpを確認

●8.myapp/app/Consoleに行き、

  ※Xampp for Linux(Lampp)の場合
  cake.phpをviで開き、1行目を以下のように書き換える

   下のコマンドをコマンドラインから打つ
     cake bake
   すると、メニューが出る

   ●8-1.はじめに、モデルを作るので、mを入力
     →プライマリーキーなどを聞いてくる。適当に答えて作成する
      たとえば、こんなかんじ


Welcome to CakePHP v2.2.2 Console
---------------------------------------------------------------
App : app
Path: /opt/lampp/htdocs/myapp/app/
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> M
---------------------------------------------------------------
Bake Model
Path: /opt/lampp/htdocs/myapp/app/Model/
---------------------------------------------------------------
Use Database Config: (default/test)
[default] >
Possible Models based on your current database:
1. User
Enter a number from the list above,
type in the name of another model, or 'q' to exit
[q] > 1
Would you like to supply validation criteria
for the fields in your model? (y/n)
[y] > y

Field: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1. alphanumeric 18. mimetype
2. between 19. minlength
3. blank 20. money
4. boolean 21. multiple
5. cc 22. naturalnumber
6. comparison 23. notempty
7. custom 24. numeric
8. date 25. phone
9. datetime 26. postal
10. decimal 27. range
11. email 28. ssn
12. equalto 29. time
13. extension 30. uploaderror
14. inlist 31. url
15. ip 32. userdefined
16. luhn 33. uuid
17. maxlength
34 - Do not do any validation on this field.
---------------------------------------------------------------
... or enter in a valid regex validation string.

[34] > 1
Would you like to add another validation rule? (y/n)
[n] > n

Field: name
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1. alphanumeric 18. mimetype
2. between 19. minlength
3. blank 20. money
4. boolean 21. multiple
5. cc 22. naturalnumber
6. comparison 23. notempty
7. custom 24. numeric
8. date 25. phone
9. datetime 26. postal
10. decimal 27. range
11. email 28. ssn
12. equalto 29. time
13. extension 30. uploaderror
14. inlist 31. url
15. ip 32. userdefined
16. luhn 33. uuid
17. maxlength
34 - Do not do any validation on this field.
---------------------------------------------------------------
... or enter in a valid regex validation string.

[23] > 34
Would you like to define model associations
(hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n

---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name: User
DB Table: `test`.`user`
Validation: Array
(
[id] => Array
(
[alphanumeric] => alphanumeric
)

)

---------------------------------------------------------------
Look okay? (y/n)
[y] > y

Baking model class for User...

Creating file /opt/lampp/htdocs/myapp/app/Model/User.php
Wrote `/opt/lampp/htdocs/myapp/app/Model/User.php`
PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n


   ●8-2.次に、コントローラーを作るので、cを入力
     →クラスメソッドを作るかなど聞いてくる。適当に答えて作成する
      たとえば、こんなかんじ


---------------------------------------------------------------
Bake Controller
Path: /opt/lampp/htdocs/myapp/app/Controller/
---------------------------------------------------------------
Use Database Config: (default/test)
[default] >
Possible Controllers based on your current database:
---------------------------------------------------------------
1. Users
Enter a number from the list above,
type in the name of another controller, or 'q' to exit
[q] > 1
---------------------------------------------------------------
Baking UsersController
---------------------------------------------------------------
Would you like to build your controller interactively? (y/n)
[y] > y
Would you like to use dynamic scaffolding? (y/n)
[n] > y

---------------------------------------------------------------
The following controller will be created:
---------------------------------------------------------------
Controller Name:
Users
public $scaffold;
---------------------------------------------------------------
Look okay? (y/n)
[y] > y

Baking controller class for Users...

Creating file /opt/lampp/htdocs/myapp/app/Controller/UsersController.php
Wrote `/opt/lampp/htdocs/myapp/app/Controller/UsersController.php`
PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n


   ●8-3.そうしたら、ビューを作る。vを入力
     →どんなビューを作るか聞いてくる。適当に答えて作成する
      たとえば、こんなかんじ


---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> V
---------------------------------------------------------------
Bake View
Path: /opt/lampp/htdocs/myapp/app/View/
---------------------------------------------------------------
Use Database Config: (default/test)
[default] >
Possible Controllers based on your current database:
---------------------------------------------------------------
1. Users
Enter a number from the list above,
type in the name of another controller, or 'q' to exit
[q] > 1
Would you like bake to build your views interactively?
Warning: Choosing no will overwrite Users views if it exist. (y/n)
[n] > y
Would you like to create some CRUD views
(index, add, view, edit) for this controller?
NOTE: Before doing so, you'll need to create your controller
and model classes (including associated models). (y/n)
[y] > y
Would you like to create the views for admin routing? (y/n)
[n] > y

Baking `index` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/index.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/index.ctp`

Baking `view` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/view.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/view.ctp`

Baking `add` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/add.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/add.ctp`

Baking `edit` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/edit.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/edit.ctp`
---------------------------------------------------------------
You need to enable Configure::write('Routing.prefixes',array('admin')) in /app/Config/core.php to use prefix routing.
What would you like the prefix route to be?
Example: www.example.com/admin/controller
Enter a routing prefix:
[admin] >

Baking `admin_index` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/admin_index.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/admin_index.ctp`

Baking `admin_view` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/admin_view.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/admin_view.ctp`

Baking `admin_add` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/admin_add.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/admin_add.ctp`

Baking `admin_edit` view file...

Creating file /opt/lampp/htdocs/myapp/app/View/Users/admin_edit.ctp
Wrote `/opt/lampp/htdocs/myapp/app/View/Users/admin_edit.ctp`
---------------------------------------------------------------

View Scaffolding Complete.

---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> Q


●9.この段階で、ブラウザで確認
  http://localhost/myapp/users


●10.レイアウトの変更など
  全体にかかわること・・・view/layout
  CSS・・・app/webroot/css
  個々の画面・・・それぞれのviewに対してできるctpファイル

※8以降に関しては、いろいろなサイトに出ている。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UbuntuでXAMPPをいれてphpMyAdminを動かすまで

2012-10-04 09:32:47 | PHP

UbuntuでXAMPPをいれてCakePHPを動かすまでやりたいんだけど、
長くなるので、その前半戦




■UbuntuでXAMPPをいれてphpMyAdminを動かすまで

1.XAMPPをダウンロード
http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=60248
にいく。OSにあった、最新のXAMPPを指定してくれるので、それをダウンロード

2.インストール
sudo tar xvfz xampp-linux-1.8.1.tar.gz -C /opt
/optフォルダができ、その下にlamppディレクトリができる

3.スタート
sudo /opt/lampp/lampp start

4.ブラウザで、開く
http://localhost

 ここで開くと、タイトルは見えるが、ここからphpMyAdminにいくと、怒られた
  →設定が足りてないらしい

5.セキュリティの設定
sudo /opt/lampp/lampp security
途中、パスワードを入れるか聞いてくる

6.再度ブラウザで、開く
http://localhost
  このとき、ユーザー名とパスワードを聞いてくる
  でも、ユーザー名を入れた気はしない・・・
  ユーザー名は lampp でいいみたい・・・

7.再度phpMyAdmin
  開ける。言語がおかしかったら直す。
  ここで、テーブルを1個追加しておく(あとあとCake.phpのため)

※途中、apache2が立ち上がっていたとき・・・
 XAMPPが立ち上がらない。このとき、apache2を落とす

http://techspotting.org/ubuntu-restart-apache-stop-start-apache/

を参考にした。

参考
http://www.apachefriends.org/jp/xampp-linux.html
http://www.overcube.com/wordpress/%e3%81%86%e3%81%b6%e3%81%86%e3%81%b6ubuntu/xampp-on-ubuntu

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

xamppで動いたPHPプログラムがapacheをそのままインストールしたところで動かない

2012-06-07 10:21:13 | PHP
ということがおこった。理由は
<?=

を認めているかどうかだった。apacheのデフォルトは

<?php

で始めないと許さない(XMLの指定も<?だから)

このとき、<?でもOKなようにするには、

php.iniの

short_open_tag = Off



short_open_tag = On

にして、apacheを再起動する。

参考
http://blogs.yahoo.co.jp/nob_ll/49184402.html

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CakePHPでの「Railsっぽい」手順-bakeを使った場合

2012-05-28 16:45:29 | PHP

CakePHPでの「Railsっぽい」手順
http://blog.goo.ne.jp/xmldtp/e/11ea5caad23f267b8cb832ad5f27ee8f

の続きの話。そのときには、bakeを使わなかったけど、今回は、bakeを使って、
自動生成するはなし。


bakeを使わないときと、前提~4までは同じ




■手順

Apache,DB(MySQL),PHPは動作しているものとする。
[確認]httpd.confで、リライトモードがコメントになっていないで、実行できること
LoadModule rewrite_module modules/mod_rewrite.so
<Directory />
Options All
AllowOverride All
</Directory>

●1.ダウンロードしてくる
http://cakephp.jp/から

●2.解凍して、フォルダの名前を変える
  myappとか

●3.そのフォルダをapacheのhtdocsの下にいれる

●4.この段階で、ブラウザで確認
  http://localhost/myapp
  ブラウザから、Cake PHPが確認できればOK
   →この段階では、DBに繋がっていないので、DBのエラーが出てOK

--------------ここから違う------------------------

●5.Windowsにもどって、コマンドプロンプトを立ち上げて、
   コマンドプロンプトから、上記4で作成したフォルダの下の
   (例では、apacheのホーム/htdoc/myappの下の)
cake/console
のフォルダにcdする
 
●6.以下のコマンドをコマンドラインから打つ
     cake bake
   すると、データベースについて聞いてくる。
   mysqlの場合、デフォルトでいいので、はじめのうちは、リターンのみ
   終わりのほうで、ユーザー名、パスワード、データベース名を聞いてくる
   そこを入力する。

●7.この段階で、ブラウザで確認
  http://localhost/myapp
  ブラウザから、Cake PHPが確認でき、DBに繋がっていればOK
   →いなかったら、app/config/database.phpを確認

●8.もう一度、以下のコマンドをコマンドラインから打つ
     cake bake
   すると、前回とは違い、メニューが出る

   ●8-1.はじめに、モデルを作るので、mを入力
     →プライマリーキーなどを聞いてくる。適当に答えて作成する

   ●8-2.次に、コントローラーを作るので、cを入力
     →クラスメソッドを作るかなど聞いてくる。適当に答えて作成する
 
   ●8-3.そうしたら、ビューを作る。vを入力
     →どんなビューを作るか聞いてくる。適当に答えて作成する

●9.この段階で、ブラウザで確認
  http://localhost/myapp/適当なビュー
  適当に表示されればOK

●10.レイアウトの変更など
  全体にかかわること・・・view/layout
  CSS・・・app/webroot/css
  個々の画面・・・それぞれのviewに対してできるctpファイル

※8以降に関しては、いろいろなサイトに出ている。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CakePHPでの「Railsっぽい」手順

2012-05-23 10:28:37 | PHP
Railsっぽくやる手順・・
Apache,DB(MySQL),PHPは動作しているものとする。

1.ダウンロードしてくる
http://cakephp.jp/から

2.解凍して、フォルダの名前を変える
  myappとか

3.そのフォルダをapacheのhtdocsの下にいれる

4.この段階で、ブラウザで確認
  http://localhost/myapp
 (要するに、フォルダ名で)
  ブラウザから、Cake PHPが確認できればOK
   →この段階では、DBに繋がっていないので、DBのエラーが出てOK

5.今入れたmyappフォルダの下
  myapp/app/config
  に、database.php.defaultというファイルがあったら、
  database.phpに変更し、とにかく、database.phpを開く。

  class DATABASE_CONFIG

  というのがあるので、そこの

   'login' をユーザー名
   'password'をユーザーのパスワード名
   'database'をアクセスするデータベース名

  に変える

6.テーブルを作成する
  今指定したDBに、テーブルを作成する。
  テーブル名は複数形(例: Items)
  idという項目は、まあ作っておこう
  その他、適当な項目を作る

7. app/modelsに、モデルをつくる
   テーブル名の単数形.phpというファイルを作る(例:item.php)
   
中身は、こんなかんじ
---------------------
<?php
class Item extends AppModel
{
}
?>
-------------------
8.app/viewsの下に、ビューをつくる
 ここでは、テーブル名(複数形)のフォルダを作る(例:Items)

9.app/controllersの下に、コントローラーを作成する
テーブル名(複数形)_controller.phpというファイル名で作成する(例:items_controller.php)

中身は、こんなかんじ
---------------------
<?php
class ItemsController extends AppController {

var $scaffold;

}
?>
----------------------
10.確認する
  http://localhost/myapp/items


【参考】

●10分で作るCakePHPアプリ インストール編
http://moyashi.jp/cake/cake_install.html

●10分で作るCakePHPアプリ アプリケーション編
http://moyashi.jp/cake/cake_app.html


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

画像自体をBase64エンコードしてHTML内に埋め込み

2011-08-17 00:42:26 | PHP
DB自体に画像を入れてしまっているときとか、
画像をそのままHTMLに埋め込みたいときって
ありませんか?

こーやるんだあ・・・めもめも

画像自体をBase64エンコードしてHTML内に埋め込んで高速化するPHPコード例
http://phpspot.org/blog/archives/2010/11/base64htmlphp.html

PHP以外でも、参考になるとおもう。
IMGタグのSRCでの書き方・・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHP資格試験について聞いてきた!

2011-03-23 14:45:55 | PHP

今日、アシアルのセミナーにいってきた!
そこで、聞いてきた話。




PHP技術者認定機構のTwitterアカウントがある
 http://twitter.com/phpexam
 ここで、いろいろな情報が流れる模様


試験は、認定スクール(ペーパーテスト)、プロメトリック(CBT)で受けられる
試験の種類は、初級試験(12000円:4月から)と上級試験(15000円:9月から)

  このほかにPHP技術者認定ウィザードというのがある
    また、PHP認定インストラクターとかいうのもある

 これらは、上級試験合格がひとつの条件になるみたい
 (インストラクターのほうは、上級が始まる前は初級でも可みたい)

 認定スクールは現在3校(アシアル、インターネットアカデミー、NEXTER,Inc)
  スクールは、年間10万、法人、認定インストラクターいるなど。
  そんなに大変な条件ではない。絶賛募集中?


試験範囲
  初級「初めてのPHP5」その他オンラインマニュアル・一般知識
  上級「プログラミングPHP 第二版」その他オンラインマニュアル・一般知識

ベータテストで出来が悪かったところ
 ・Webフォームの作成
 ・日付と時刻の取り扱い
 ・クラスとオブジェクト
 ・セキュリティ
 ・出力バッファ
 ・定数予約語

 これで、特に悪かったところを見直し、二次ベータ、その結果難しかったところ
 ・日付と時刻の取り扱い
 ・定数予約語


試験対策テクニック
 ・公式テキストを熟読する
 ・配点の高い章で落とさない

プログラミング初心者の人へ(PHPにかかわらず)
 ・30分考えてわからないことは人に聞く




なお、資料は、アップされるって言ってました。
ここにかしら?? http://www.phpexam.jp/

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPのセッション処理

2011-01-27 14:45:51 | PHP


なぜか、このブログでPHPのセッション処理について書いてなかった。

サンプルをメモメモ
<?PHP

if ($_GET['val'] != "c" )
{
	//	セッションスタート
	session_start();

	//	セッションの値+受け取った値
	$ans = $_SESSION['ans'] + $_GET['val'];

	//	セッションにセット
	$_SESSION['ans'] = $ans;
}
else
{
	//	セッション終了
	$_SESSION = array();
	session_destroy(); 
}

?>
<HTML>
<HEAD><TITLE>セッションテスト</TITLE></HEAD>
<BODY>
<FORM METHOD="GET" ACTION="session.php">
<INPUT TYPE="text" NAME="val" value="<?PHP echo $ans ?>" />
<INPUT TYPE="submit" value="実行" />
</FORM>
</BODY>
</HTML>

(上記 < > は、本当は半角)

cといれると、クローズ、
それ以外は、前までに入れた数の合計(がセッションに入ってる)に
今回入れた値を足す。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPでODBC接続により、Excelにアクセス

2011-01-19 13:41:41 | PHP


 昨日、「PHPでODBC接続により、Accessにアクセス」をやったので、
 今日はExcelにアクセスしてみる。




1.Excelのシートにテーブルデータを入れる。
  1行目は項目名(カラム名)、2行目以下にデータをいれる
  Excelファイルを保存して、終了すること。


2.上記1で作成したExcelファイルをODBCでアクセスできるようにする
  昨日のやり方と同じ、”システムDSN”を作成


3.プログラム作成
こんなかんじ
<?php

  $DSN        = "HelloExcel";    //データソース名
  $DBUSER     = "";             //ログインユーザー名
  $DBPASSWORD = "";             //パスワード

  //Accessデータベースに接続
  $con = odbc_connect($DSN ,$DBUSER, $DBPASSWORD);
  if ($con) 
  {
    print "Excelデータベースに接続しました!<BR><BR>";
  }
  else
  {
    print "Excelデータベースに接続できませんでした!<BR><BR>";
  }


  /*  ここでデータベースに対するさまざまな処理を実行     */
  $sql = 'SELECT * FROM [Sheet1$]';
  $result = odbc_exec($con, $sql);
  while ($rows = odbc_fetch_object($result))
  { 
	print($rows->msg . "<BR>");
  }



  //Accessデータベースとの接続を解除
  odbc_close($con);
  print "Excelデータベースとの接続を解除しました!<BR><BR>";

?>

(上記 < > は、本当は半角)

ポイントは、SQLのテーブル名指定。
[Sheet1$]のように、シート名を[]で囲み、Sをつけている
他は、だいたい、Accessのときと同じ


4.ブラウザで、3のPHPをアクセス

※注意:
Excelファイルを誰かが開いていると、エラーになる





簡単に書くと、こんなかんじ

【参考文献】
・データベースを開く
  http://www.tsware.jp/study/vol14/php_04.htm

・ODBCとExcel
  http://eternalwindows.jp/windevelop/odbc/odbc07.html



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPでODBC接続により、Accessにアクセス

2011-01-18 14:03:19 | PHP


 やり方&PHPサンプルをメモメモ




1.Accessでテーブルを作成し、データを入れる

2.上記1で作成したテーブルをODBCでアクセスできるようにする

 以下のサイトのやり方に従い、”システムDSN”を作成
Accessデータベースの配置とODBCの設定
http://www.tsware.jp/study/vol14/php_03.htm


3.プログラム作成

こんなかんじ(上記のサイトを参考にしてます)
<?php

  $DSN        = "Hello";    //データソース名
  $DBUSER     = "";             //ログインユーザー名
  $DBPASSWORD = "";             //パスワード

  //Accessデータベースに接続
  $con = odbc_connect($DSN ,$DBUSER, $DBPASSWORD);
  if ($con) 
  {
    print "Accessデータベースに接続しました!<BR>";
  }
  else
  {
    print "Accessデータベースに接続できませんでした!<BR>";
  }


  //--- 以下の行から、DBアクセス=書き換え部分 ---

  // Helloテーブルからmsgカラムの内容を出力

  $sql = 'SELECT * FROM Hello';
  $result = odbc_exec($con, $sql);
  while ($rows = odbc_fetch_object($result))
  { 
	print($rows->msg . "<BR>");
  }

  //---- ここまで  -------------------------------


  //Accessデータベースとの接続を解除
  odbc_close($con);
  print "Accessデータベースとの接続を解除しました!<BR><BR>";

?>

(< > は、本当は半角)

4.ブラウザで、3のPHPをアクセス




簡単に書くと、こんなかんじ

【参考文献】

ソースコードは、以下から引用しています
データベースを開く
  http://www.tsware.jp/study/vol14/php_04.htm



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ファイルを読み込み、そのまま出力するPHPプログラム

2011-01-04 14:08:00 | PHP

たとえば、どこかにファイルが置いてあって(htdocsの下でなくてもOK)、
求めに応じて、その内容を読み込み、表示したい場合、こんなかんじで書けばいい。

<?PHP
	$filename = "C:¥¥temp¥¥test¥¥" . $_GET['path'];
	readfile($filename);
?>

(上記< > ¥は、本当は半角)
URLの引数pathに、C:¥temp¥testの下にある、表示したいファイル名を渡す。




イメージファイルの場合は、ヘッダに、image/pngとか、image/jpegとかを送る
<?PHP
	header('Content-type: image/jpeg');
	$filename = "C:¥¥temp¥¥test¥¥" . $_GET['path'];
	readfile($filename);
?>

(上記< > ¥は、本当は半角)
URLの引数pathに、C:¥temp¥testの下にある、表示したいファイル名を渡す。




readfileは、読み込んだものに、変換をかけない場合は使えるけど、変換をかけたい場合は?
 まあ、freadで、すなおに読み込み、echoで出力する。

<?PHP
	$filename = "C:¥¥temp¥¥test¥¥" . $_GET['path'];
	$handle = fopen($filename, "r");
	$contents = fread($handle, filesize($filename));
	fclose($handle);

// ここで、$contentsの変換処理を書いてね!

	echo $contents;
?>

(上記< > ¥は、本当は半角)
URLの引数pathに、C:¥temp¥testの下にある、表示したいファイル名を渡す。
ちなみに、イメージファイルの場合でも、freadしてechoする上記の方法でOK(ただし、ヘッダは必要)




参考
phpで 画像出力
http://php.birdlab.com/tips/1



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Zendでのセッションの使い方

2010-12-27 15:31:58 | PHP

なんか、まとめて、ちゃんと書いてないので、ちょこっとめも。

Zendでセッションを使うには、次のことを行う。

(1)Zend/Session.phpをrequire_onceする
(2)Zend_Session::start();
(3)セッションを使うところで、 new Zend_Session_Namespace(ネームスペース名)

たとえば、はじめのページにアクセスしたら、カウントアップするというのをつくるとすると
(セッションでやっているので、セッションが切れたら、0に戻ってしまうので、アクセスカウンタの役は、しない)

index.phtmlで、
<html>
<head>
<title>回数表示</title>
</head>
<body>
<?php echo $this->escape($this->kaisu);?>回目
</body>
</html>

(< > は、本当は半角)
なふうに、kaisuという言葉を表示するとして、

コントローラーのindexController.phpで、
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Session.php';

Zend_Session::start();

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
      $myNamespace = new Zend_Session_Namespace('indexPage');
      $myNamespace->kaisu++;
      $this->view->assign('kaisu',$myNamespace->kaisu);
    }
}

(< > は、本当は半角なので、置換しないと、コピペしても動かない)

なふうに、indexPageのkaisuに値を保存して、それを表示する。





なお、このように行うと、
ZendFrameworlkでZend_Sessionがつかえません
http://oshiete.goo.ne.jp/qa/3644632.html?order=asc

にあるように、

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in

というエラーになることがあるようだ。
(xamppでインストールすると、なる??)
そのときは、そこにあるように、php.iniのoutput_bufferingの行を、
output_buffering = 4096
にすると、直る??(まだ、未確認)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPのZend FrameworkをEclipseで使う その2:Eclipseからzend

2010-12-16 11:20:54 | PHP

PHPのZend FrameworkをEclipseで使うことを考える。
その手順。2回に分けて説明する予定の2回目。

前回は、Zendフレームワークのインストールまでを書いたので、今回は、その先、

  ・Eclipseをインストールして、
  ・Zendで作ったサンプルソースを、配備して
  ・Eclipseから配備したところを見るようにする。

 をやります。今回は一からつくらず、サンプルソースを修正します。
 では、以下からやり方詳細。




■Eclipseをインストール
All in one Eclipseのページ
Pleiades - Eclipse プラグイン日本語化プラグイン
http://mergedoc.sourceforge.jp/


にいって、最新版の「Ultimate」または「PHP」版をダウンロードしてくる。

あとは、それを、解凍して、起動します(いや、まだ起動しなくていいけど)。
起動するのは、解凍してでてきたフォルダの中にあるeclipseの下の、「eclipse.exe」です。




■Zendで作ったサンプルソースを、修正・配備

 以下の3手順
(1)サンプルダウンロード
(2)構成変更&修正
(3)確認

を行います。

●(1)サンプルデータダウンロード
 今回は、
Zend Framework入門(2):Hello World!アプリケーションの作成
http://codezine.jp/article/detail/1961/

のサンプルファイルを使います。

ここ http://codezine.jp/article/download/1112
から、サンプルがダウンロードできますので、ダウンロード&解凍します。

●(2)構成変更&修正
今回は、Eclipseで扱いやすいように、構成を変えます。
しかし、構成を変えると、セキュリティ上、脆弱になります。
脆弱にしたくなければ、サンプルコードのままにしてください


 今回は、扱いやすくするために、構成を

HelloZendの下に、ソースを配備し、http://localhost/HelloZend
でアクセスできるようにします。

(2-1)まず、Apacheのホームの下のhtdocs
(たとえば、C:\Program Files\Apache Software Foundation\Apache2.2\htdocs)
の下に、HelloZendというフォルダを作ります
(もちろん、好きなところにフォルダを作って、(2-2)以降の作業を行い、
 その後、フォルダごと、htdocsの下においてもOK)

(2-2)サンプルを解凍すると、htdocs、zendappsというフォルダがあると思います。
 その、htdocsの下のindex.phpファイル(sample\htdocs\index.php)を
 今作った、HelloZendフォルダの下にコピーします。

(2-3)サンプルの下のzendapps(sample\zendapps)を
 今作った、HelloZendフォルダの下にコピーします。

(2-4)HelloZendフォルダの下に、.htaccessというファイルを作成します。
 中身はこんな感じ

php_flag magic_quotes_gpc off

RewriteEngine on
RewriteBase /HelloZend/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php


(2-5)構成をかえたため、一部書き換えます。
 index.phpのファイル中、赤字の部分を修正して、以下のようにします。
<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('zendapps/controllers');


ここまでの作業をやると、こんな構成になっているはず


●(3)確認
 
http://localhost/HelloZend/

をブラウザでアクセスします。
「こんにちは!
 お名前をどうぞ。」
とでてきて、Goをクリックすると、
「こんにちは、 your nameさん!」
と出てくればOK!




■Eclipseから配備したところを見る

 今、配備したサンプルのところを、Eclipseから編集できるように、
 Eclipseのプロジェクトを作成&設定します。

(1)Eclipseを立ち上げます。

(2)Eclipseのメニューから
  「ファイル」→「新規」→「その他」
  を選んでください。
  (「ファイル」→「新規」で、「PHPプロジェクト」が見れるなら、それを選んでも良い。
   その場合、(4)へ)

(3)ダイアログが出てきます。「PHP」→「PHPプロジェクト」を選んで「次へ」

(4)プロジェクトのダイアログで
  「プロジェクト名」は好きに入れてください。(今回はHelloZendにしてます)
  その下の「内容」は「外部ソースからプロジェクトを作成」にチェックしなおします。
  そしたら、「参照」ボタンをクリックし、さっき配備したHelloZendのパス
  (たとえば、
    C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\HelloZend
   などになっていると思う)
  を設定します。そしたら、完了。

(5)あたらしく、プロジェクトが出来て、そこから、ソースが見れるはず。

(6)実行するには、Eclipseのメニュー「実行」→「実行構成」を選択し、
   実行構成ダイアログを出したら、PHP Webページを選択して、
   左上のドキュメントに+印のものをクリックする


(7)新規構成っていうのができるので、下のように、名前を適当に入れて、
   ファイルを、HelloZendのindex.phpにして(参照から選べる)
   「適用」をクリック、その後「実行」ボタンをクリック。

(8)Eclipseから
「こんにちは!
 お名前をどうぞ。」
とでてきて、Goをクリックすると、
「こんにちは、 your nameさん!」
と出てくればOK!




こんなかんじ。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする