ubuntuのApacheドキュメントルート

ubuntuの場合、CentOSと違ってDocumentRootをhttpd.confに書いてもうまく行きません。

というのも、ubuntuではhttpd.confの内容を/etc/apache2/sites-enabled下のファイルで上書きするようになっていて、デフォルトでは/etc/apache2/sites-enabled/000-defaultにDocumentRootが書かれているからです。

/etc/apache2/sites-enabled/000-defaultの内容を変更することで、DocumentRootが通るようになります。

 

PHP – アップロードのファイルサイズについて

POSTメソッドを使用した、クライアントからサーバーへのファイルアップロードについての注意書き。

1. アップロードファイルの最大サイズ

PHPの設定ファイル「php.ini」の以下の項目で設定

単位はバイトのようです。
このupload_max_filesizeが指定するファイルサイズとは、以下の「upfile」で示したファイルの最大許容サイズの事。

現状の設定だと、2MB(デフォルト値)以上のファイルをアップロードすると、PHP側はそれらサイズオーバーしたファイルを破棄する。

この場合、$_FILESで取得できるエラー情報に「UPLOAD_ERR_INI_SIZE」(int型で1)が返る。

エラーコードに関してはPHPの公式を参照してください。http://php.net/manual/ja/features.file-upload.errors.php

2MB以上のファイルをアップロードしたい場合は、upload_max_filesizeの値を大きくすればよし。

 

 

 

2. POSTメソッドにてPOSTできる全体の最大サイズ

若干分かり辛い日本語ですね。
ファイルアップロードでサーバーに送信されるデータは何もファイルだけではありません。
<form>でくくっている中にいろいろな情報がありますね。「enctype=”multipart/form-data”」とかありますね。
これら全部を含めた「POSTできる最大サイズ」ってのんがあります。

例のごとくphp.iniに上記の項目があります。デフォルト値は8M(PHP5だとこのはず)です。
upload_max_sizeでどんなに大きくしても上記のpost_max_sizeに設定した以上のデータは送信できないです。
もし設定サイズをオーバーするデータをPOSTすると、PHPは全て無かった事にします。
もとい、$_POSTと$FILESを空にしちゃいます。
この状態で「$_FILES[“upfile”][“size”]」とか使っちゃうと「そんなもんねぇよ」って怒られます。
大きいなサイズのファイルをアップロードする場合、この値も大きくしなければいけません。
注意して欲しいのは「upload_max_filesize < post_max_size」です
「<=」ではなく「<」でなければいけないです。(多分きっとおそらくメイビー)

 

 

3. PHPを実行する時の確保メモリ量

PHPもメモリ確保します。当たり前ですね。

あまり良くわからないので設定項目だけ。

php.ini に上記の項目があります。(デフォルトは128Mだったはず)
メモリの最大確保サイズを指定しています。

基本的に

「upload_max_filesize < post_max_size < memory_limit」

となるようにしましょう。

 

4. php.ini以外で設定してみる .conf

php.iniはいわば元となる設定ファイル。
大容量アップロードに対応して、あらかじめ大きな値を設定したりすると、目的のコード以外のところでもその設定が反映されちゃいます。
別にいいよっていうならばここは読み飛ばしてください。

上で説明した1〜3の項目はApacheのconfファイルでも設定可能です。
CentOSなら「httpd.conf」
Ubuntuなら・・・いろいろ設定があるので調べて見てください。とりあえず.confに書けばいいと。

そしてディレクティブに以下のような記述をするとおkなわけです。

 

5. php.ini以外で設定してみる .htaccess

ディレクトリ毎の設定を変更できる.htaccessでも1〜3を変更できます。

反映させたいphpファイルがあるフォルダと同じ場所に以下の内容の.htaccessを作ればよろし

 

6. ファイルサイズの制限

まぁ設定でどんな大きくしたって、それを越えるファイルを上げてくる奴がいるかもしれませんね。

いっそ無限にできないの?無限は無理だけど無制限なら可能です。
「memory_limit = -1」とかにすると制限なしという意味になります。

ただし、無制限はちょっとオススメしたくないなぁ。
てことでファイルサイズのチェック方法を書きます。(チェックできれば制限できるはず)
以下、memory_limit,post_max_size,upload_max_filesizeはデフォルト値の128M,8M,2Mとします。

 

そもそも1~3の設定で制限できてるのでは?という疑問があるかもしれません。
が、問題は項目2の「post_max_size」なんですよ。
これを越えてくるデータをPOSTされると、POSTデータ全部なくなっちゃうわけで。

とかあったら残念な事になる。
2MB以下のファイルをアップロードすると、OKが表示されますね。
2MB以上のファイルだとNGが表示されますが、が、が、
8MB以上のファイル」だと事情が変わってきます。
この例であれば、8MB以上のファイルでOKが表示されてしまうかもしれません。
上の項目2でも書いてますが、そもそも$_FILESが空になってしまうからです。

じゃぁどうするかというと、
お手軽ということで以下のコードで

このようにすればいいかな。ヘッダーの情報を見ています。
この値はクライアントが書き換え可能ですが、やましい事ない人は書き換えたりとかしませんよね。
書き換えたりしてきたら全部エラーページもなにもなしに処理中断でいいかと。

 

7.  テストするに当たって・・・(テスト工程ではありません)

今回やたらつまったんですよ。
get_cfg_var()でテストしてたんですよ。
.htaccessとかでいじっても値が変更されないなぁとか思ってたんですよ。
get_cfg_var()がphp.iniの値しか見ないとか思ってなかったんですよ。
phpinfo()かini_get()使わないといけないって思わなかったんですよ。

・・・誠に残念である。
phpinfo()使いましょうね。はい。

 

 

(・ω・)

認証 その2 SimpleAuthの認証画面を試す

oil g adminコマンドを使うとスキャフォールドと認証画面を一気に生成することができます。

ここでは、認証用ユーザ管理テーブルのスキャフォールドと認証画面をまとめて作ってみます。

 

まず、ユーザ管理テーブルのスキャフォールドを生成します。

FuelPHP 1.5ではfuel/packages/auth/exampleにSimpleAuth用のマイグレーションファイルがありますが、ここではoil g adminを使うことが目的なので、oilコマンドでマイグレーションを生成します。

$ oil g admin user username:varchar[50] password:varchar[255] group:int:default[1] email:varchar[255] last_login:varchar[25] login_hash:varchar[255] profile_fields:text

マイグレーションをデータベースに反映させます。

$ oil r migrate

テーブルが出来たら、ユーザーを新規追加します。

oilコマンドでテストコンソールを開き、Authパッケージのcreate_userメソッドを実行します。

$ oil c

Fuel 1.4 - PHP 5.3.10-1ubuntu3.5 (cli) (Jan 18 2013 23:39:11) [Linux]
>>> Auth::create_user('admin', 'pass', 'admin@example.com', 100)
1
>>>

create_userメソッドの引数は、ユーザ名、パスワード、メールアドレスのほか、グループIDが必須です。

ここで指定している値100は、simpleauth.phpで設定している管理者グループのIDです。

成功すると追加されたレコードのidが表示されます。成功したらCtrl+Cでコンソールを終了します。

 

これだけで完了です。

public/adminをブラウザで開いてみましょう。

SimpleAuth認証画面

認証画面が表示されます。

さきほど新規追加したユーザでログインします。

管理画面ダッシュボード

ダッシュボードが表示されます。

上部のリンクUserをクリックするとスキャフォールドで作成されたUsersテーブル管理画面が表示されます。

スキャフォールドによる管理画面

 

以上でSimpleAuthの認証画面を確認できました。

ただし、この例ではAuth::create_userの処理を入れていないので、このスキャフォールドを使った新規ユーザ追加や変更はできません。

 

追補

いろいろやっているうちに、ログインすると310リダイレクトループエラーになるようになってしまったときは、マイグレーションをやり直すと解消します

認証 その1 SimpleAuthのシンプルな設定

Authパッケージを使うと、ユーザ認証(Authentication)と認可(Authorization)のインターフェースを利用できます。

ここでは実装サンプルとして添付されているSimpleAuthを試してみます。

 

まずはfuel/app/config/config.phpにauthパッケージを読み込む記述を追加します。

 

次にfuel/packages/auth/config/auth.phpとfuel/packages/auth/config/simpleauth.phpをfuel/app/configディレクトリにコピーします。

 

auth.phpではAuthドライバの設定を行います。これはこのままで構いません。

simpleauth.phpではSimpleAuthの設定を行います。ユーザにアクセス権限を与えるためにグループIDの設定が必要ですが、コメントアウトされているので、これを外します。

以上でとりあえずSimpleAuthを動かす設定ができました。

チュートリアル Smartyの使い方

前 チュートリアル HTTPエラー処理その2

次 チュートリアル フォームの作成とDBの使い方

 

おはようございます。あぁん?ゆうきんじゃねーの?

この記事を読む前に ツグツグ が書いた を舐める様に参照して下さい。(^ω^)ペロペロ

では、Smarty の使い方について説明していきたいと思います。

ちなみに Smarty は拡張子を好き※に変更することができますが、今回は .samrty にしているとして話を進めます。

※プロジェクトで使用している他の拡張子と同じにするのは無理です

なお、Smartyの使い方を全部説明するわけではありません。

今回は基本的なことだけです。詳しくは公式のマニュアルを参照して下さい。

 

Smartyファイルの生成方法

おさらいです。

この2つで生成することが可能です。

 

Smarty内で変数、PHPコードの呼び出し方

おさらいです。

Smarty でPHPコードの結果を画面上に表示する場合でも、 echo を記述しる必要はありません。

 

Smartyでの連想配列の扱い方

これが連想配列の使い方です。

通常のPHPコードと違い array() ではなく、 [] で囲むだけですので注意して下さい。

 

Smartyで覚えておくと便利な事

※この項目に関しては、随時増やしていきます

コメント

if文

現在の時刻

文字の連結

文字数

変数のデフォルト値

大文字化。小文字化

文字数の規制

 

前述しましたが、この記事はちょくちょく更新したいと思います。

では、おやすみなさい。

チュートリアル HTTPエラー処理その2

前 チュートリアル HTTPエラー処理その1

次 チュートリアル Smartyの使い方

 

おはようございます。SAN値0のゆうきんです。

前回に引き続きHTTPエラー処理の説明を行います。

今回は、404と500以外のエラーを返す方法について説明します。

方法は2種類あります。順に説明します。

 

1,404と500以外のエラーを返す簡単な方法

これで、明示的に405エラーを返すことができます。

今回はnullとしましたが、第1引数にビューオブジェクトを渡すと、それが表示されます。

なお、nullだと真っ白の画面が表示されます。

Response クラスには他の使い方もあるのですが、記事の項目が違うため割愛します。

 

2,エラーを定義し、それを投げる

1の方法で全て解決できますが、1の方法だとエラーを返したい場所ごとに書かなければならないため、非常に面倒くさいです。

404と500を明示的に返すときと同じように、例外を投げるだけにしたいですよね?

そこでエラーを定義したクラスを作り、それを例外として投げる方法を説します。

今回は405エラーを作成することを前提にして説明します。

まずは、 fuel/app/classes/ に httpexceptions.php というファイルを作成して下さい。

そして、以下のクラスを記述して下さい。

1の方法とほぼ同じです。

今回は、第1引数でビューオブジェクトを生成して渡していますが、適当なビューファイルを用意して下さい。

この場合は405エラーだと視覚的にわかるビューが最適だと思われます。

定義したいエラーが増えるたびに、この httpexceptions.php にクラスを追加していくことになるので、覚えておいて下さい。

クラス名は定義したいHTTPエラーコードに準じた名前にするとわかりやすくていいです。

記述が終わったら、  fuel/app/bootstrap.php を開き、次のように書き加えて下さい。

‘HttpMethodNotAllowd’ が定義したエラークラス名、 APPPATH.’classess/httpexceptions.php’ がエラークラスを定義しているファイル名となります。

ここまで終わったら下準備は同じです。

後は、404と500と同じように例外を投げるだけです。

これで405エラーを明示的に返すことが可能となります。

さらに。この方法を使用すれば、404と同じように405が発生したらこのページにルーティングするという設定を適用することができます。

ただし、またいろいろと手を加える必要があります。

その方法は次の項目をご覧ください。

 

3,2で発生させた例外にルート設定を行う

この項目は2の項目で定義した405に対してルーティングを行うことを前提とします。

2で発生させた例外は public/index.php で受け取ることが可能です。

なので、以下の通りに書き加えて下さい。

catch文で、さきほど定義した例外 HttpMethodNotAllowd を受け取り、ルート設定があれば、そちらにルーティングし、なければ2で生成したビューがそのまま表示されます。

ルート _405_ を fuel/config/routes.php で定義していれば、そちらにルートされるということです。

catch文の中で _405_ があれば・・・とやっています。

つまり _405_ という名前は自由に変更できます。が、変数の命名はなるべく揃えた方がわかりやすので、このままで良いでしょう。

 

以上で、HTTPエラー処理の説明を終わります。

以前説明した、モードで処理を切り替える方法などを複合すれば、開発環境では405エラーを発生させるが、製品環境では404エラーとする、ということが可能です。

下準備は手間ですが、一度作成してしまえば繰り返し使えるので非常に便利です。

では、おやすみなさい。

チュートリアル HTTPエラー処理その1

前 チュートリアル モードを切り替える

次 チュートリアル HTTPエラー処理その2

 

おはようございます。†ゆうきん†です。

今回はエラー処理について説明します。

Webサイトである以上、特に404エラーと500エラーは避けて通れないエラーです。

404と500がなんであるかは別に説明の必要ないですよね。

FuelPHPではこの404と500を明示的に投げる処理が組み込まれています。

うまく、活用して役立てましょう。

 

404エラーをスローする

上記で404エラーを投げることが出来ます。

FuelPHPは404エラーがスローされたら、以前説明した routes.php の404ルートを元にページを表示します。

 

404エラーをスローするのが好ましい状況

例えば、以下のコードを見て下さい。

psot_rasta というメソッドがありますが、このままだと、GETで http://localhost/fuelphp/sample/rasta にアクセスできてしまいます。

POSTでのみアクセスを許可したい、許可しなければならない場合は次のようにして下さい。

同じく rasta という名前でGETメソッド get_rasta を用意し、そのメソッドで 404エラーをスローするようにします。

こうすれば、GETメソッドでアクセスした場合、404エラーページが表示されるようになります。

また、以下の方法でもGETでのアクセス可を回避できます。

ちなみに、RestコントローラでPOSTメソッドのみ用意した場合、そのURLにGETでアクセスすると405エラーになります。

しかし、405エラーだとユーザにわかりにくくなるので、404エラーを返したほうが親切です。

なぜ、405エラーだとダメなのかというと、405エラーの場合、特に設定しなければ真っ白い画面が表示されてしまうからです。

ユーザからして見れば、ポルナレフのような状態になってしまいます。

403エラーも同じ理由で404エラーを返したほうがいいです。

さらに403エラーは。404エラーを返したほうがセキュリティが向上します。

今回はPOSTのみ用意してGETでのアクセスを回避するというものですが、逆もまた然りです。

GETのみ用意して、POSTのアクセスを禁止したい場合でも似たようなことを行なって下さい。

 

500エラーをスローする

上記で500エラーを投げることが出来ます。

500エラーがスローされた場合、アプリケーションを停止し、専用のページを表示します。

こっちは、スローしなければならない状況が多すぎるためサンプルは割愛します。

パッと思いつくのが、送信されたファイルのデータが大きすぎて処理しきれないとかですかね。

何かしらのデータやファイルを送信したけれど、規格外のものが送られてきて処理しきれないから、ユーザに警告を出すという使い方が多いと思います。

 

ユーザに知らせるのは404と500だけでいいと思いますが、それだけではデバッグするときは非常に不便です。

ですので、開発環境と製品環境で返すエラーを切り替えるという処理が必須になります。

モードによる処理の切り替えは前回説明しました。

後は404と500以外のエラーを発生させる方法だけですね。

その方法は、長くなるので次で説明します。

では、おやすみなさい。

データベースを使う その5 スキャフォールド生成

スキャフォールドは足場という意味で、これを生成することでORMの機能に加えてテーブル管理のコントローラとビューまでコマンドひとつで出来てしまうという、恐ろしく便利なものです。

 

さっそく試してみましょう。

ここではnameフィールドとageフィールドを持つuserテーブルを作成することとします。

$ oil g scaffold user name:varchar[32] age:int

fuel/app/classes/model/user/phpから見ていきます。

ORMパッケージのModelを継承しているのはORMモデル生成の場合と同様ですが、validateメソッドが追加されています。このメソッドはコントローラから呼び出され、データのバリデーション条件を返します。

また、マイグレーションファイルもモデル生成時と同じくfuel/app/migrationsディレクトリに生成されています。

 

次に、fuel/app/classes/controller/user.phpを見てみましょう。

メソッド 処理内容
action_index 一覧表示
action_view 個別データ表示
action_create 新規追加
action_edit 変更
action_delete 削除

action_createとaction_editでは、入力されたデータがモデルのvalidateから得た規定に合っているかを確認しています。

fuel/app/views/userディレクトリにはビューのコードが生成されています。

template.php ページのテンプレート
_form.php 入力フォーム
index.php  一覧表示
view.php 個別表示
create.php 新規追加
edit.php 変更

コードが生成されているのを確認したらデータベースに反映させます。

$ oil r migrate

 

それではページを表示してみましょう。ブラウザでpublic/usersを開きます。

データなし

データ一覧ページが表示されます。

まだデータはありません。

 

Addボタンをクリックすると新規追加ページが表示されます。

データを入力

データを入力したらSaveボタンをクリックします。

データが追加されている

データ一覧ページに戻ります。

入力したデータが追加されています。

 

次にViewをクリックしてデータを表示してみます。

選択したデータを表示

選択したデータが表示されます。

 

Editをクリックしてデータを変更してみます。

データを変更する

変更してSaveボタンをクリックすると、再び一覧ページが表示されます。

データが変更されている

変更が反映されているのがわかります。

 

最後にDeleteをクリックして削除してみます。

データが削除されている

一覧が表示され、データは削除されています。

 

このように、スキャフォールドを使うことで簡単にデータベースアプリケーションの基本機能を構築することができます。

チュートリアル モードを切り替える

前 チュートリアル css と javascript のリンク方法

次 チュートリアル HTTPエラー処理その1

 

おはようございます。北斗神拳伝承者ゆうきんです。

今回はモードの切り替え方について説明します。

モードとはつまりデバッグモードだったり、リリースモードだったりです。

では、見て行きましょう。

 

定義済み環境
  • 製品環境 Fuel::PRODUCTION
  • 開発環境 Fuel::DEVELOPMENT
  • テスト環境 Fuel::TEST
  • ステージング環境 Fuel::STAGE

の、4種類が存在します。

それぞれに切り替える方法は次の項目を読んで下さい。

 

モードを切り替える

FuelPHPでは public/.htaccess で、 production を宣言すると開発環境になります。

宣言の仕方は、

という感じです。

特に弄った記憶がなければ、2行目でコメントアウトされているはずなので、外してあげるだけでいいです。

それ以外にも、 development, test, stage を宣言することが出来ます。

それぞれのモードは読んで字の如くなので、特に説明する必要はないかと思われます。

また、何も宣言しなければ自動で development が適用される仕様です。

他にも fuel/app/bootstrap.php を編集することで、モードの切り替えが行えます。

この部分の Fuel::DEVELOPMENT を Fuel::TEST or Fuel::STAGE or Fuel::PRODUCTION のいずれかに適用したいモードによって切り替えて下さい。

※ public/.htaccess を編集する方法でモードを指定している場合は。そちらが優先されます。

 

モードによって処理を切り替える

これが全てです。

特に説明することはありません。

 

では、おやすみなさい。

データベースを使う その2 フィールド型

データベースを使うにはoilコマンドのマイグレーション機能とモデル生成機能を利用します。

oilコマンドで使用できるフィールド型は以下のとおりです。

フィールドの書式はフィールド名:フィールド型です。

string[n]
varchar[n]
int[n]
enum[value1, value2]
decimal[n n]
float[n n]
text
blob
datetime
date
timestamp
time

ページのトップへ