PHP

提供:Wiki@KDS
2007年2月6日 (火) 20:24時点における192.168.200.221 (トーク)による版
ナビゲーションに移動 検索に移動

PHP(ピー・エイチ・ピー)は、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。

Hypertext Preprocessorの略。なんでこれを略してPHPになるのかは不明。
HTMLのソースの中に<?php ?>のタグを埋め込むことで動作させることができ、連携がやりやすい。

PEARというライブラリがありなにかと便利。
Smartyというテンプレートエンジンも便利。
サンプルソース:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>PHPのテスト</title>
</head>

<body>
<?php
	<h1>
		print "今日は{date('Y'年'n'月'd'日)}です。
	</h1>
	<p></p>

?>
</body>
</html>

とすると、今日は2007年1月15日です。と表示される。
適当なコードを書くと、XSS(クロスサイトスクリプティング)、ScriptInjection(スクリプトインジェクション)、SQLインジェクションなどの攻撃に対してリスクを抱えることになり危険。

注意すべきコード

$_SERVER['PHP_SELF']
htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES)
とするほうがいいらしい。
$_REQUEST['hoge']
$_GET['hoge'],$_POST['hoge'],$_COOKIE['hoge']
などに限定しないと外部から変数を書き換えられる可能性あり
バイナリセーフでない関数
バイナリセーフでないとは文字列中にヌルバイトがあった場合、それ以降の文字列を読み込まないこと。
ereg_replace()
などをサニタイジングに使うと危険。preg系はバイナリセーフで処理速度もereg系の数倍速いらしいのでこちらを代用。mb_ereg()はバイナリセーフ。
ereg_replace(),eregi(),eregi_replace()
split(),spliti()
require(),require_once()
include(),include_once()
fopen(),file_get_contents(),readfile(),basename()
SQL文の作成
ユーザ変数をそのまま入力しない
MySQLであればmysql_escape_string(),mysql_real_escape_string()などでサニタイジング できる。mysql_real_escape_stringはDBに接続した状態でないと使用不可。
PEARのDBクラスを使うのであれば「プレイスホルダ」というものを使うことができる。

<?php
//DBクラスの読み込み
require_once("DB.php");
//MySQLサーバに接続 $db=DB::connect("mysql://username:password@hostname/database_name");
//パラメータの指定 $params="hoge";
//SQL文の生成 $sql="SELECT * FROM $dbname WHERE culumn1=?";
//クエリ $db->query($sql,$params);
?>