132件中 126-130件目     [ ... 18 19 20 21 22 23 24 25 26 27 ]

PHPでは、多くの場合HTMLなどのテキストファイルを出力するが、画像ファイルやzip圧縮されたファイルなども出力することができる。

簡単な例を挙げると、以下のように書くだけでJPEGファイルを出力できる。

<?php
	$path = './img/xxx.jpg'; // JPEGファイルのパス
	header('Content-Type: image/jpeg');
	readfile($path);
?>

同様に、pngファイルや動画ファイルなども、それに対応したContent-typeを付けてやることで出力できる。 IEはContent-Typeがなくても認識してくれるが、そうでないブラウザも多いので注意。

ファイル名を指定したい場合には以下のヘッダを加える。

header('Content-Disposition: inline; filename="'.$name.'"');

このように画像などのファイルをPHPから出力することで、HTML以外のファイルでユーザ認証などのアクセス制御を行うこともできる。 出力するファイルを公開ディレクトリ(public_html)の外に置けば直接アクセスされることもない。

IEではいくつかの状況で以下のようなエラーが表示されるバグがある。

Internet Explorer では、<ファイル>をダウンロードできません。 このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。
これは以下のヘッダを加えることで防ぐことができる。
header('Cache-Control: public');


PHPは、プログラムをHTMLの中に埋め込むように書くことができるというのが利点の一つである。 単純にHTMLに文字を出力するコードを埋め込む場合、以下のように書く。

<?php echo 'xxxx'; ?>

これは、short_open_tagの設定がonになっていると、以下のように書くこともできる。

<?= 'xxxx'; ?>

さらに、最後の「;」を省略して以下のように書くこともできる。

<?= 'xxxx'?>

ただし、以下のように書くことはできない。

<?php= 'xxxx'; ?>

この省略記法は便利ではあるが、short_open_tagをonにすることで、

<?xml version="1.0"'; ?>
などがphpコードと認識されてしまうため、わざわざ以下のように書かなければならなくなる。
<? echo '<?xml version="1.0"?>'; ?>

また、short_open_tagがoffから変えられない環境ではソースコードを書き換えなければならないことになるので、short_open_tagをonにすることはオススメしない。


PHPの標準関数では、エラーが発生した場合、エラーメッセージと共に、そのエラーが発生したソースファイルとその行数を表示してくれる。

それと同じことを自作の関数で実現する場合、定義済み定数の「__FILE__」や「__LINE__」を使う方法もあるが、user_error関数(またはtrigger_error関数)を使えば、もっと簡単に実現できる。

user_error("エラーが発生しました。", E_USER_ERROR);

この関数ではエラータイプを指定できるので、php.iniや、.htaccess、error_reporting関数などで、出力するエラータイプを限定することで、エラーの表示・非表示を簡単に切り替えることができる。


LinuxなどのOSで、新しくファイルやディレクトリを作った場合、特に指定しなければ決まったパーミッションが設定される。 ファイルであれば0644、ディレクトリであれば0755が設定されることが多い。
これは、umaskによって設定されていて、「umask」とコマンドを入力すると設定されている値が表示される。 例えば、0022が指定されていた場合、新しくディレクトリを作ると~0022 & 0777 = 0755により、0755が設定される。

PHPでは、mkdir関数の第2引数でパーミッションを指定できるが、このときumaskが0022になっているとこのディレクトリのパーミッションは0755になる。

mkdir($name, 0777);

そんなときは、mkdirのあとにchmod関数を呼んでやるとパーミッションが0777に変更される。

chmod($name, 0777);

または、umask関数を呼んでumaskを変更する手もある。 この場合、変更後元に戻すのを忘れるとどこかで問題が出てくるかもしれないので注意。

※よくありがちなミスで、パーミッションを十進数で書いてしまうミスがある。数字の先頭に0を付け、八進数にするのを忘れないように注意。


PHPの標準関数はエラーが発生したときに文字列を表示してそれを知らせるものがあるが、詳しいエラー内容をユーザに見られてしまうと、そこから内部仕様がばれて攻撃を受ける恐れがある。

そこで、表示するエラーレベルの設定を変えることで、簡単に表示・非表示を変えることができる。 表示するエラーレベルの設定を変えるには、php.iniや.htaccessなどでerror_reporting の値を変える方法と、error_reporting関数を使う方法などがある。このとき、httpd.confや.htaccessなどのPHP外部でerror_reportingの値を設定する場合には、E_ERRORなどの定義済み定数は使えないことに注意する必要がある。

# エラー表示をOnにする
php_value display_errors			1
#「E_ALL & ~E_NOTICE」を設定
php_value error_reporting			6135

デフォルトでerror_reportingの値は、「E_ALL & ~E_NOTICE」になっている。 「E_ALL」にすればE_NOTICEのようなバグになりそうなものも警告されるようになるので、バグの発生を防ぎやすくなり、「0」を設定すれば全てのエラーが表示されなくなる。 開発中以外は、できるだけエラーは表示しない方が望ましい。


132件中 126-130件目     [ ... 18 19 20 21 22 23 24 25 26 27 ]