「PHP」の版間の差分

提供:Wiki@KDS
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
4行目: 4行目:


[[PEAR]]というライブラリがありなにかと便利。<br>
[[PEAR]]というライブラリがありなにかと便利。<br>
[[Smarty]]というテンプレートエンジンも便利。<br>
サンプルソース:
サンプルソース:
<div id="manual">
<div id="manual">
61行目: 62行目:
<dd>
<dd>
<div class="html-source">
<div class="html-source">
<?php
<?php<br>
$db=DB::connect("mysql://username:password@hostname/database_name");
$db=DB::connect("mysql://username:password@hostname/database_name");<br>
$params="hoge";
$params="hoge";<br>
$sql="SELECT * FROM $dbname WHERE culumn1=?";
$sql="SELECT * FROM $dbname WHERE culumn1=?";<br>
$db->query($sql,$params);
$db->query($sql,$params);<br>
?>
?><br>
</div>
</div>
</dd>
</dd>
</dl>
</dl>
</div>
</div>

2007年2月6日 (火) 20:21時点における版

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=DB::connect("mysql://username:password@hostname/database_name");
$params="hoge";
$sql="SELECT * FROM $dbname WHERE culumn1=?";
$db->query($sql,$params);
?>