PHP素人(僕みたいなやつ)のありがちな勘違い
①header関数
勘違い)用途は別ページにジャンプするためのもの。 どこにいれてもいい。
<?php
header('Location:path');
?>
よくこんな使い方でページのリダイレクトさせてますが、header関数の使い方の一つに過ぎません。
大前提はHTTP ヘッダの送信に必要な関数なので、別に第一引数にLocationとせずに
<?php
header('Content-type: image/png');
?>
とかしちゃうとそのページがpngファイルとかになっちゃうんですね。
まぁ後続にimagepng()とかで出力せんといけませんが。
まぁそんな感じでリダイレクトってのはヘッダ送信時の副産物で本当の用途はHTTPヘッダ送信のためのものです。
ヘッダ送信ってのはすべての出力の前にないといけないものなので当然前にechoとかの何かしらな出力があるとエラーがでます。
ありがちなミスはinclude と require_once とかでファイル引っ張ってくるときに引張先でエラーがあってheader関数に怒られるとかです。
②(MySQL) char型とvarchar型の違い
php素人(僕みたいなやつ)はとかくDBを扱う機会が多いくせにあまり定義を知らなかったりします。
特にcharとvarchar何が違うんやろ? 別にvarchar使っといたらええかな とか投げやりな理解をしてしまいがちです。
二つの違いは固定長であるか可変長であるか。
char : 固定長
varchar : 可変長
といってもとっつきにくい日本語ですよね
テーブル作成時にフィールドでそれぞれ長さを指定しますがcharで5の長さとvarcharで5の長さを指定した時の違いを例にとって考えます。
前者char型で “abc” というデータを放り込むと ”abc__” というデータが格納されます。(_はスペース)
これは5の長さをめいいっぱい使うっていう固定長の特徴です。
abcは三文字なので残りの2文字分をスペースで埋めます。
それに対しvarcharの方では “abc” というデータを放り込むと “abc” というそのままのデータが入ります。
可変長とは5文字以内という定義なのです。
PHPエンジニアはchar型を使うとデータをMySQLからとってきたあとに文字列操作とか必要になるので特にきまりがないかぎりvarcharを使う機会がほとんどでしょう。
③include()とrequire()の違い
両方ともファイルの読み込みに使う関数です。
基本的には同じですが両者の違いはエラーを出したときに明確になります。
includeの方はファイルが見つからないときに「Warning」を返します。
requireの方はファイルが見つからないときに「fatal error」を返します。
つまりincludeのほうはもしファイルがみつからなくても後続の処理が動きますがrequireの方はファイルがないとエラーで止まります。
include関数
<?php
include("aiueo.php");
echo "include関数";
?>
require関数
<?php
require("aiueo.php");
echo "require関数";
?>
前者のincludeは後続の処理(echo “include関数”;)が出力されてるのに対し、require側ではエラーのみで出力がありませんね。
読み込むファイルが存在することが不明確な場合はincludeを使うといった感じに使い分けましょう
ちなみに _once をつけると(include_once , require_once)そのファイルがすでに読み込まれてるかどうかを評価してくれます。
ファイルが見つからないときの評価はinclude関数とrequire関数のときの違いと同じです。
