関数ファイル作成とページのつくりこみ
#04 よく使う関数を登録しておこう
http://dotinstall.com/lessons/contacts_php_v2/9804
を元に
functions.php へ
ユーザ関数を作成していく
function connectDb(){
try{
return new POD(DSN,DB_USER,DB_PASSWORD);
}catch(PODException $e){
echo $e->getMessage();
exit;
}
}
try には、接続成功したときの処理
この catch 部分で例外発生したときに
エラーメッセージを表示する
try には、接続成功したときの処理
この catch 部分で例外発生したときに
エラーメッセージを表示する
htmlspecialchars() を略称で使うため
function h($s){
return htmlspecialchars($s,ENT_QUOTES,’UTF-8′);
として UTF-8 文字コードを指定
これで保存して
次に、 index.php を作成して編集
ここで作成したファイルを
require_once() で読み込む
読み込むのは、
config.php
functions.php
になる
PHP部分の下にHTMLコードをつくってページをつくっていく
お問い合わせ管理システムの共有ファイル設定
お問い合わせ管理システムの共有ファイル設定
#03 アプリ共通の設定をしよう
http://dotinstall.com/lessons/contacts_php_v2/9803
を元に
共有するものを config.php にかいておいて
あとで require_once() で
必要なときに読み込むようにする
定数の設定は define()を使う
まずデータソースネーム
define(‘DSN’,’mysql:host=localhost;dbname=dotinstall_contacts_php’);
次にDBユーザ
define(‘DB_USER’,’dbuser’);
そしてDBパスワード
define(‘DB_PASSWORD’,’ddpk998Zacv’);
そして、サイトのURL 今回はIPアドレス
define(‘SITE_URL’,’http://192.168.10.248/contacts_php/’);
そして、管理画面
define(‘ADMIN’,SITE_URL.’admin/’);
エラー出力の設定は
error_reporting(E_ALL & ~E_NOTICE);
として、NOTICE以外を出力する
セッションの有効範囲が
session_set_cookie_params(0,’/contacts_php/’);
として
contacts_php のみ有効になるようにする
お問い合わせ管理システムの作成
お問い合わせ管理システムの作成
必要な知識は
html
css
jquery
php
mysql
となる
contacts_php
が作業ディレクトリ
contacts_php/admin/
が管理画面になる
まず、DB作成
#02 データベースの設定をしよう
http://dotinstall.com/lessons/contacts_php_v2/9802
を元にDB作成
create database dotinstall_contacts_php;
grant all on dotinstall_contacts_php.* to dbuser@localhost identified by ‘ddpk998Zacv’;
use dotinstall_contacts_php;
エントリーテーブル作成
create table entries (
id int not null auto_increment primary key,
name varchar(255),
email varchar(255),
memo text,
created datetime,
modified datetime);
これらのSQLコマンドを
qa.sql
というようなSQLファイルにしておくと
他の環境でも簡単につくれるし
毎回コマンドをうたなくてもいいので効率的
sql ファイルができたら
mysql -u root -p < qa.sql
を実行して
mysql の root パスワードの入力することで
SQLが実行され、DBが作成される
mysql -u root -p
でログインして
use dotinstall_contacts_php;
desc entries;
で内要確認してできていることを確認
カラムの意味は
id int not null auto_increment primary key,
で主キー作成+自動連番
name varchar(255),
名前
email varchar(255),
メルアド
memo text,
メモ
画像掲示板に画像一覧を表示
画像掲示板に画像一覧を表示
#17 画像一覧を表示する (1)
http://dotinstall.com/lessons/upload_image_php/4517
を元に
配列に格納されたファイル名を元に画像を表示していく
編集するのは index.php
表示する画像は images[] の中に
サムネイル
元の大きさ
の画像が条件に基づき入っているので、あとは表示するだけ
表示は foreach() で表示する
<?php foreach($images as $image) ; ?>
そして、サムネイル画像だったときには
リンクをつけて、元画像が表示できるようにする
そして、サムネイル画像がないのなら、元画像を
そのまま表示する
サムネイル画像か、元画像かの判定には
strpos() を使う
http://php.net/manual/ja/function.strpos.php
$image の中から thumbnail という文字列を探し
位置が0文字目から始まる
つまり ===0 であるか判定する
注意点としては
strpos() は
対象文字列が見つからなかった場合に
false を返すため ==0 だと true になるので
0文字目という判定にしたいのなら
===0
とすること
なので、判定の条件式は
if(strpos($image, ‘thumbnails/’) === 0):
となる
そして、サムネイル画像だったときの処理で
元画像のリンクを作成するとき、その名前の表示には
basename() を使う
basename() はファイル名そのものの情報だけ引っ張ってくする
http://php.net/manual/ja/function.basename.php
を参照
<a href=”/images/<?php echo basename($image); ?>”>
<img src=”<?php echo $image; ?>”>
</a>
これでリンクを作成
元画像の表示については
<?php else : ?>
<img src=”<?php echo $image; ?>”>
<?php endif; ?>
となる
画像掲示板のデバッグ
画像掲示板のデバッグ
#14 デバッグをする
http://dotinstall.com/lessons/upload_image_php/4514
を参考に、サムネイル画像が保存できるようにデバッグ
まず、細かいエラーを表示するように、
config.php の
error_reporting(E_ALL & ~E_NOTICE);
をコメントアウト
index.php に戻ってしまうと、細かいエラーがでなくなるので
header()の処理の前に
exit;
を記述して、一度終了する
原因は、エラーコードをみながら修正していく
今回の動画の場合だと
imagecopyresampled() の
第1引数が、書き込むイメージのリソースでなかったこと
そして
書き込むディレクトリが
THUMBNAIL
ではなく
THUMBNAIL_DIR
だったことが原因だっと判明
エラーが特定できたら、
config.php のエラー表示を元に戻したいので
error_reporting(E_ALL & ~E_NOTICE);
のコメントアウトを外す
このように、一度詳細なエラーを表示して
どこかにとぶような処理の場合、その前に
一度 exit で終了して原因を追及するようにして
デバッグしていく
今回、うまく動作しなかったので、後で比較して理解するため
cp upload.php upload.php_error
として
保存し
http://dotinstall.com/lessons/upload_image_php/4513
のソースをコピペして
実行
そのときにいくつかエラーがでたので
そのメモ
Warning: imagecopyresampled() expects parameter 1 to be resource, double given in
これは
imagecopyresampled() の第1引数がリソースでないのが原因
$thumbHeight から
thumbImage にする
Notice: Use of undefined constant THUMBNAIL – assumed ‘THUMBNAI
と
Warning: imagepng(): Unable to open ‘THUMBNAIL/5190816f6d00cce6c8bb909ef954cc1840c50a0c.png’ for writing: No such file or directory
これは
‘THUMBNAI が見つからないとでているので
config.php で指定している
‘THUMBNAI_DIR にする
また、
Warning: imagepng(): の原因は
config.php の
define(‘THUMBNAIL_DIR’, dirname($_SERVER[‘SCRIPT_FILENAME’]).’/thumbnails’);
のスペルミスが原因だった
これらを修正すれば
サムネイル画像が保存されるようになる
CentOS へログインして
cd /var/www/html/upload_image_php
ll image/
で画像がアップロードされているのを確認し
ll thumbnails/
でサムネイル画像があるのを確認できれば
デバック完了
画像掲示板で縮小画像の保存
画像掲示板で縮小画像の保存
#13 縮小画像を保存する
http://dotinstall.com/lessons/upload_image_php/4513
を参考に、
縮小画像を保存フォルダに格納し、動作確認する
そのためには、まず画像形式を
switch() で識別する
switch($imagesize[‘mime’]){
で判別し
case ‘image/gif’:
case ‘image/jpeg’
case ‘image/png’
ごとに分岐する
このときに使っている
imagegif()
http://manual.xwd.jp/function.imagegif.html
imagejpeg()
http://php.net/manual/ja/function.imagejpeg.php
imagejpeg()
http://php.net/manual/ja/function.imagepng.php
は、それぞれのファイル拡張子にあわせたものを使い
イメージをファイルに出力している
それぞれ、
第1引数に保存する画像
第2引数に保存するファイル名
を指定する
ソースにすると
gif なら
imagegif(
//対象ファイル
$thumbImage,
//保存先
THUMBNAIL . ‘/’ . $imageFileName);
とする
最後に、index.php に戻すには
header() を使えばOK
header(‘Location :http://’ .$_SERVER[‘SERVER_NAME’].’/upload_image_php’);
とする
縮小画像の作成
縮小画像の作成
#12 縮小画像を作る (2)
http://dotinstall.com/lessons/upload_image_php/4512
を元に
元画像の縦横比率を保ったまま、縮小画像を生成
まず、サムネイル画像の高さを作る
縦横比をそのまま使う
$thumbheight = round($height * THUMNAIL /$width);
round() は浮動小数点をまとめる関数
http://php.net/manual/ja/function.round.php
を参考
小数点以下四捨五入と考えるとわかりやすい
これで、サイズ取得はできたので、次に画像作成
$thumbImage = imagecreatetuecolor(THUMBNAIL_WIDTH, $thumbnailheight);
imagecreatetruecolor() は
イメージを新規作成する関数
http://manual.xwd.jp/function.imagecreatetruecolor.html
に解説あり
imagecreatetruecolor() の引数には
横幅、高さを指定する
これらを使った事例としては
No29.大きさを変えようっ(サムネイル) —- GDライブラリ[3]
http://masago.kir.jp/php20040218.php
をみると分かりやすい
imagecopyresampled()は
再サンプリングを行いイメージの一部をコピー、伸縮する
これは
http://phpspot.net/php/man/php/function.imagecopyresampled.html
を参考にする
今回は
imagecopyresampled(
$thumbnailheight,
$srcImage,
0,0,
0,0,
72,0,
$thumbnailheight,
$width,
$height
);
これを引数の解説つきにすると
imagecopyresampled(
//コピー先の画像
$thumbnailheight,
//コピー元の画像
$srcImage,
//コピー先のx、y座標
0,0,
//コピー元のx、y座標
0,0,
//コピー先の幅、
72,
//コピー先の高さ
$thumbnailheight,
//コピー元の幅
$width,
//コピー元の高さ
$height
);
となる
列セレクト、行セレクトの基本
列セレクト、行セレクトの基本
列のセレクトには
self コマンドを使う
今回使うのは
サンプルデータの
data01
使うスクリプトは shel01
self は、引数に対象となる列
最後に対象ファイル名を指定するだけ
data01 の中身をみたら
11111 22222 33333 44444 55555 66666 77777 88888
というのが30行並んでいる
で、self 2 5 8 data01
としたら、2列名、5列目、8列目
が表示された
最初、2ぎょうめ、5行目、8行目だと思っていたけど
間違いだったようだ
スペースで区切ると、列を指定して表示になる
次に、
self 3/8 data01
というように / で区切ると、
3~8行目の列を表示ということになる
self NF-5 NF data01
とすると
NFは最終列という意味なので
NF-5 なら最終列から5つ前の列
NFは最終列を表示
という意味になる
self 2.1.3 data01
だと、
2列目の
1文字目から
3文字
という意味になる
列をセレクトして表示する self 以外にも
列を削除して表示する delf がある
delf 3 data01
と実行すると
3列目以外が表示される
delf NF-3/NF data01
だと
NFは最終列なので
NF-3/NF
なら最後から4列目から最終列まで削除して表示
という意味になる
このように、列の表示なら
self
delf
というコマンドが便利
行を操作して表示するなら
head
tail
などのコマンドを使うことが多い
画像掲示板で縮小画像作成
画像掲示板で縮小画像作成
#11 縮小画像を作る (1)
http://dotinstall.com/lessons/upload_image_php/4511
を参考にサムネイル画像の作成を実装
まず、元画像の幅と高さを取得
$width = $imagesize[0];
$height = $imagesize[1];
縮小画像の作成は
ユーザ定数 THUMBNAIL_WIDTH と比較することで
判定して作成する
if($width > THUMBNAIL_WIDTH){
で比較できる
サムネイル画像をつくる手順は
元ファイルを画像タイプにより作成
新しいサイズを作成
縮小画像の作成
縮小画像を保存
という手順で行われる
元ファイルの画像タイプの判別は
switch の画像判定を使えばOK
switch($imagesize[‘mime’]){
case ‘image/gif’:
$srcImage = imagecreatefromgif($imageFilePath);
break;
case ‘image/jpeg’:
$srcImage = imagecreatefromjpeg($imageFilePath);
break;
case ‘image/png’:
$srcImage = imagecreatefrompng($imageFilePath);
break;
}
とする
switch() の判定のところで使っている関数の
imagecreatefromgif()
http://phpspot.net/php/man/php/function.imagecreatefromgif.html
imagecreatefromjpeg()
http://phpspot.net/php/man/php/function.imagecreatefromjpeg.html
imagecreatefrompng()
http://manual.xwd.jp/function.imagecreatefrompng.html
は、画像タイプの自動判別に使える関数
画像掲示板のファイル保存
画像掲示板のファイル保存
#10 元画像を保存する
http://dotinstall.com/lessons/upload_image_php/4510
を参考に、画像掲示板に投稿するファイルの名前を決定し
一時保存された元ファイルを保存フォルダに格納する処理を実装
ファイル名は重複しないファイル名をつけていくので
乱数や暗号化を使うようにする
現在時刻を元にすれば、ほぼ重複しないので
$imagefilename = sha1(time().mt_rand()).$ext;
とする
$ext は switch で得た拡張子
time().mt_rand()は、現在時刻+乱数で
これを sha1() でハッシュしている
実行結果の動作確認のため
var_dump() を使う
var_dump($imagefilename);
で確認できたら、これはコメントアウト
これで、ファイル名はできたから
次に元画像の保存
これは添付ファイルをそこにコピーすればOK
$fileimagePath = IMAGES_DIR .’/’.$imagefilename;
とすればOK
IMAGES_DIR は cofig.php で決めたユーザ定数
PHPでは . で javascript の+みたいに文字列の連結ができる
これで、ファイルの保存パスもOK
次はファイルアップロード
アップロードには
move_upload_file() を使う
$rs = move_uploaded_file($_FILES[‘image’][‘tmp_name’],$fileimagePath);
アップロードが失敗することがあるので
そのときの処理を if で記述
if(!rs){
echo “could not upload !”;
exit;
}
とする
ここまでできたら、動作確認
chmod 777 images/
でパーミッション変更
一度ファイルをアップロードして
images ディレクトリにファイルができれば成功