「
PHP
」を編集中
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''PHP(ピー・エイチ・ピー)'''は、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。 <div id="manual"> <div class="section"> ==PHPとは== Hypertext Preprocessorの略。なんでこれを略してPHPになるのかは不明。<br>HTMLのソースの中に<?php ?>のタグを埋め込むことで動作させることができ、連携がやりやすい。<br> [http://phpspot.org/blog/archives/2006/01/yahoophp.html Yahoo!がPHPを採用した理由:phpspot開発日誌]<br> [http://neta.ywcafe.net/000052.html Javaジャバいってる間にも]<br> PHP4.xとPHP5.xでだいぶ使える機能が違う。 [[PEAR]]というライブラリがありなにかと便利。<br> PHPのスクリプト書くときはPEARの標準コーディング規約(後述)に書き方を合わせるといいかも。<br> タブではなく半角スペース4文字使うとかいう辺りは微妙。<br> [[Smarty]]というテンプレートエンジンも便利。<br> </div> <div class="section"> ===サンプルソース=== <div id="manual"> <div class="html-source"> <pre> <!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> </pre> </div> とすると、今日は2007年1月15日です。と表示される。<br> </div> <div class="section"> ===PHP4.xと5.xの違い=== *・スクリプトエンジンがZendEngineが2にアップグレード。 *・オブジェクト指向に関する機能の強化→大規模開発が可能に。 *・XML周りの機能の強化→SimpleXMLという機能によりXMLを簡単に扱うことができる *・PDOというデータベースに接続するための機能が追加→PEAR::DBと同じような感じで<br> RDMSに接続する時に使う。PEAR::DBはPHPで書かれていたが、PDOはPHPに組み込まれており<br> 速度が向上する。 </div> <div class="section"> ===標準コーディング規約=== [http://pear.php.net/manual/ja/standards.php#standards.indenting PEAR :: Manual :: 標準コーディング規約] *インデントはスペース4個(タブは駄目) *半角75-85 文字ごとに改行することを推奨。(必須ではない) *if, for, while, switch等の制御構造と括弧の間はスペース1個。 *制御構造の中括弧は条件と同じ行。(間はスペース1個) *関数コールでの関数名と括弧の間にはスペース無し。 *代入のイコールの左右はスペースを入れる。(沢山入れて見栄えを揃えても良い) *関数定義の中括弧は次の行の関数名と同じ位置。(one true braceと言うらしい) *デフォルト値付き引数は引数リストの終わりに置くこと。(なるべく右側ってこと) *Perl/Shell形式のコメントは使ってはいけない。 *include~およびrequire~は命令であり関数ではないので括弧は付けない。 *PHPショートタグは使ってはいけない。(<?のこと) *文字エンコードは ISO-8859-1 を使用しなければならない。 *改行はLF。 *PHP終了タグ(?>)の後は改行を一つ入れる。 *変数展開や特殊文字を含まない文字列はシングルクォートを使う。 </div> <div class="section"> ===セキュリティについて=== 適当なコードを書くと、XSS(クロスサイトスクリプティング)、ScriptInjection(スクリプトインジェクション)、SQLインジェクションなどの攻撃に対してリスクを抱えることになり危険。 <br> <br> 注意すべきコード <dl> <dt><pre>$_SERVER['PHP_SELF']</pre></dt> <dd><pre>$_SERVER['SCRIPT_NAME']</pre>を使うか<pre>htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES)</pre>とするほうがいいらしい。 この辺参考に[http://blog.ohgaki.net/index.php/yohgaki/2006/02/28/php_selfa_ma_a_ra_fa_fa_oa_a_sa_a_oa PHP_SELFはそのまま出力できない]。 </dd> <dt><pre>$_REQUEST['hoge']</pre></dt> <dd><pre>$_GET['hoge'],$_POST['hoge'],$_COOKIE['hoge']</pre>などに限定しないと外部から変数を書き換えられる可能性あり</dd> <dt>バイナリセーフでない関数</dt> <dd> バイナリセーフでないとは文字列中にヌルバイトがあった場合、それ以降の文字列を読み込まないこと。 <pre>ereg_replace()</pre>などをサニタイジングに使うと危険。preg系はバイナリセーフで処理速度もereg系の数倍速いらしいのでこちらを代用。mb_ereg()はバイナリセーフ。 </dd> <dd>ereg_replace(),eregi(),eregi_replace()</dd> <dd>split(),spliti()</dd> <dd>require(),require_once()</dd> <dd>include(),include_once()</dd> <dd>fopen(),file_get_contents(),readfile(),basename()</dd> <dt>SQL文の作成</dt> <dd> ユーザ変数をそのまま入力しない<br> MySQLであればmysql_escape_string(),mysql_real_escape_string()などでサニタイジング できる。mysql_real_escape_stringはDBに接続した状態でないと使用不可。 </dd> <dd> PEARのDBクラスを使うのであれば「プレイスホルダ」というものを使うことができる。 </dd> <dd> <div class="html-source"> <?php<br> //DBクラスの読み込み<br> require_once("DB.php");<br> //MySQLサーバに接続<br> $db=DB::connect("mysql://username:password@hostname/database_name");<br> //パラメータの指定<br> $params="hoge";<br> //SQL文の生成「?」の部分にパラメータが入る<br> $sql="SELECT * FROM $dbname WHERE culumn1=?";<br> //クエリ<br> $db->query($sql,$params);<br> ?><br> </div> </dd> </dl> </div> </div> </div>
編集内容の要約:
Wiki@KDSへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
Wiki@KDS:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
キャンセル
編集の仕方
(新しいウィンドウで開きます)
案内メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWikiについてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報