徹底攻略 PHP5技術者認定[上級]試験問題集 [PJ0-200]対応

徹底攻略 PHP5技術者認定[上級]試験問題集 [PJ0-200]対応

¥4,300+税

品種名
書籍
発売日
2013/9/19
ページ数
656
サイズ
A5判
著者
鈴木憲治/堀 邦彰/水野史土/山田裕進 著 PHP技術者認定機構 監修、株式会社ソキウス・ジャパン 著
ISBN
9784844334675

大充実の解説付き!上級の公式問題集、登場!

本書はPHP5技術者認定[上級]試験の公式問題集です。PHPプロフェッショナルによる書き下ろし問題348問は、試験範囲を網羅し、出題傾向を徹底分析したものです。解説では単に正解の説明のみにとどまらず、設問に関連してPHPの開発に携わるエンジニアが知っておくべき内容を詳説。また、豊富なサンプルコードも掲載しており、問題集でありながら、実際の開発に役立つ情報も満載です。充実した索引はリファレンス的にも活用できるので、試験対策のみならず、いつでも手元においておきたい一冊です。

「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。

アンケートに答える

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

学校・法人一括購入に関するお問い合わせはこちらへ。

一括購入窓口

詳細

■著者プロフィール


鈴木 憲治(すずき・けんじ)

プログラマ。1999年より日常的にGNU/Linuxを使っている(現在、Ubuntuユーザ)。
Namazu Project、zaurus-ja、Usagi Projectなどさまざまなオープンソースプロジェクトに関わる。FuelPHPをPHPの3大フレームワークの1つにしようと画策している。著書に『PHP逆引きレシピ』『CodeIgniter徹底入門』(翔泳社)、『Webサイト制作者のためのPHP入門講座』(技術評論社)、『はじめてのフレームワークとしてのFuelPHP』(達人出版会)などがある。


堀 邦彰(ほり・くにあき)

NECラーニング株式会社所属。Linux関連技術研修をメインに担当。
Linuxがビジネスとして注目を浴び始めたころにLinuxの研修を立ち上げ、以降、NECラーニングのLinux研修体系を整備しながら、多くのLinuxエンジニア育成に携わっている。PHPとはDB連携WebAPサーバー構築研修の立ち上げ時に出会い、現在は、PHP技術者認定機構の認定スクールの講師としても活動している。


水野 史土(みずの・ふみと)

レスキューワーク株式会社代表取締役。
PHP製オープンソースソフトウェアを用いたウェブサイト構築/サポート/診断を行っている。WordPress、FuelPHP、NoviusOSなどのコミュニティで活動し、コアへのコード寄贈、日本語対応作業、ドキュメント翻訳、各種アドオン作成をしている。


山田 裕進(やまだ・ひろみち)

学校法人・専門学校 HAL東京 専任教官。同校にてプログラミング、サーバ構築、情報処理試験対策などの授業を担当。情報セキュリティスペシャリスト、データベーススペシャリスト、ネットワークスペシャリスト。



■監修プロフィール


大垣 靖男(おおがき・やすお)

PHP技術者認定機構顧問、PHPプロジェクトのコミッター、エレクトロニック・サービス・イニシアチブ有限会社 社長。
PHPを始めとするWebアプリケーションのソースコード検査サービス、Webアプリセキュリティのためのツール開発、セキュリティ関連のコンサルティング、セミナーを行なっている。著書に『Webアプリセキュリティ対策入門』(技術評論社)などがある。


桑村 潤(くわむら・じゅん)

PHP技術者認定機構副理事長、日本PostgreSQLユーザ会理事。
リアルタイム採掘監視システム、Web+DBによるバッチジョブ実行インタフェースや大規模計測データストア、遠隔監視機器サポートシステムなど、科学技術関係のシステム開発を行っている。著書に『初めてのPHP5』(オライリー・ジャパン)、『PHP5徹底攻略』(ソフトバンクパブリッシング)などがある。

目次

はじめに

PHP5技術者認定試験について
PHP5技術者認定上級試験の概要と出題範囲
受験申し込み方法
PHP技術者認定試験の問い合わせ先
本書の活用方法

第1章 関数
第2章 文字列
第3章 配列
第4章 オブジェクト
第5章 ウェブに関するテクニック
第6章 データベース
第7章 グラフィックス
第8章 PDF
第9章 XML
第10章 セキュリティ
第11章 アプリケーションに関するテクニック
第12章 PHPの拡張
第13章 WindowsでのPHP
第14章 追加1(SPL、日付クラス、PEAR)
第15章 追加2(名前空間、クロージャ、リフレクション、遅延静的束縛)
第16章 追加3(JSON)
第17章 追加4(PDO、mysqlnd)
第18章 追加5(正規表現)
第19章 追加6(APD/Xdebug、memcache)
第20章 追加7(フィルタ)
第21章 総仕上げ問題
索引

ダウンロード

本製品の読者さまを対象としたダウンロード情報はありません。

お詫びと訂正

誤記のためにご迷惑をおかけし、誠に申し訳ございません。

  • 55ページ ページ中央「出力」の下の本文2行目
    • [誤]のみで構成される部分が何文字目にあるかを調べます。
    • [正]のみで構成される部分が何文字あるかを調べます。
    • 【 第2刷にて修正 】
  • 62ページ 問題14の選択肢B、2行目
    • [誤]array_slice($x, 2, 3);
    • [正]array_slice($x, 1, 2);
    • 【 第2刷にて修正 】
  • 146ページ 問題2、選択肢Dの2行目
    • [誤]$_SERVER['SCRIPT_NAME']はfoo.phpである
    • [正]$_SERVER['SCRIPT_NAME']は/php/foo.phpである
    • 【 第2刷にて修正 】
  • 153ページ 問題16の選択肢E
    • [誤]…透過的なセッション管理(session.trans_sid=On)を利用することが…
    • [正]…透過的なセッション管理(session.use_trans_sid=On)を利用することが…
    • 【 第2刷にて修正 】
  • 189ページ 解答5、第3段落、3〜4行目
    • [誤]トランザクションを使用したい場合は、オートコミットをOffに設定しなければいけません。
    • [正]トランザクションを使用したい場合は、トランザクションを明示的に開始する必要があります。
    • 【 第2刷にて修正 】
  • 196ページ fetchOne()の使用例、5行目
    • [誤]query('INSERT INTO t VALUES (1, 10),(2, 20)');
    • [正]exec('INSERT INTO t VALUES (1, 10),(2, 20)');

    • 【 第2刷にて修正 】
  • 197ページ fetchRow()の使用例、5行目
    • [誤]query('INSERT INTO t VALUES (1, 10),(2, 20)');
    • [正]exec('INSERT INTO t VALUES (1, 10),(2, 20)');

    • 【 第2刷にて修正 】
  • 198ページ fetchCol()の使用例、5行目
    • [誤]query('INSERT INTO t VALUES (1, 10),(2, 20)');
    • [正]exec('INSERT INTO t VALUES (1, 10),(2, 20)');
    • 【 第2刷にて修正 】
  • 198ページ fetchAll()の使用例、5行目
    • [誤]query('INSERT INTO t VALUES (1, 10),(2, 20)');
    • [正]exec('INSERT INTO t VALUES (1, 10),(2, 20)');

    • 【 第2刷にて修正 】
  • 204ページ 例「getOne()、getRow()、getCol()、getAll()の使用例」、6行目
    • [誤]$db->query('INSERT INTO t VALUES (1, 10),(2, 20)');
    • [正]$db->exec('INSERT INTO t VALUES (1, 10),(2, 20)');
    • 【 第2刷にて修正 】
  • 206ページ 解説14の例「query()の結果の行数・列数を取得」、3~5行目
    • [誤]$db->query('DROP TABLE IF EXISTS t');

      $db->query('CREATE TABLE t (a INT, b INT)');

      $db->query('INSERT INTO t VALUES (1, 10), (2, 20), (3, 30)');
    • [正]$db->exec('DROP TABLE IF EXISTS t');

      $db->exec('CREATE TABLE t (a INT, b INT)');

      $db->exec('INSERT INTO t VALUES (1, 10), (2, 20), (3, 30)');
    • 【 第2刷にて修正 】
  • 207ページ 例「tableInfo()の使用例」、4行目と5行目
    • [誤]$db->query('DROP TABLE IF EXISTS t');

      $db->query('CREATE TABLE t (a INT PRIMARY KEY, b INT, c VARCHAR(50) NOT NULL)');
    • [正]$db->exec('DROP TABLE IF EXISTS t');

      $db->exec('CREATE TABLE t (a INT PRIMARY KEY, b INT, c VARCHAR(50) NOT NULL)');
    • 【 第2刷にて修正 】
  • 209ページ 例「トランザクションの使用例」、3行目と4行目
    • [誤]$db->query('DROP TABLE IF EXISTS t');

      $db->query('CREATE TABLE t (a INT)');
    • [正]$db->exec('DROP TABLE IF EXISTS t');

      $db->exec('CREATE TABLE t (a INT)');
    • 【 第2刷にて修正 】
  • 234ページ 問題7、選択肢B
    • [誤]ImageEllipse()でア・イ、ImageArc()でア・イ・ウ・エを描画できる
    • [正]ImageEllipse()でア・イ、ImageArc()でア・イ・ウ、ImageFilledArc()でア・イ・ウ・エを描画できる
    • 【 第2刷にて修正 】
  • 296ページ 問題14の選択肢A
    • [誤]Xpathではインジェクションの危険性はなく、エスケープは不要である
    • [正]Xpathではインジェクションの危険性はなく、エスケープなどは不要である
    • 備考:エスケープは「エスケープ文字によって、それに続く文字に別の意味を持たせる処理」を意味します。 ここでの意図は特別な意味を持つ文字を無効化しインジェクション攻撃を防ぐことですが、PHPには、 XPathでの文字列をエスケープする関数は用意されておらず、また、XPath 1.0の仕様上もエスケープ は定義されていないため、エスケープではなくクォートなどの処理を行い安全に処理できるように します。そのため、エスケープ「など」と訂正いたします。

    • 【 第2刷にて修正 】
  • 296ページ 問題14の選択肢C
    • [誤]適切な文字エンコーディングを指定してエスケープする必要がある
    • [正]エスケープなどの処理をする場合は、適切な文字エンコーディングを指定するか不正な文字エンコーディングでないことをチェックする必要がある
    • 【 第2刷にて修正 】
  • 311ページ 解説14、2段落目の1行目
    • [誤]エスケープ
    • [正]エスケープなど
    • 【 第2刷にて修正 】
  • 311ページ 解答14、2段落目の最後
    • [誤]「……常に真と評価されてしまいます。」のあとに下記の文を追加
    • [正]PHPには、XPathでの文字列をエスケープする関数は用意されていないので、代わりに次ページのコードのように処理します。
    • 【 第2刷にて修正 】
  • 311ページ 解説14、4段落目の1行目
    • [誤]エスケープするときには必ず文字エンコーディングを指定します(C)。
    • [正]エスケープなどの処理をするときには、必ず文字エンコーディングを指定するか、不正な文字エンコーディングでないことをチェックします(C)。
    • 【 第2刷にて修正 】
  • 312ページ 例「エスケープを行っているコード」内の15行目
    • [誤]// エスケープすべき入力
    • [正]// エスケープなどすべき入力
    • 【 第2刷にて修正 】
  • 312ページ 例「エスケープを行っているコード」内の18~24行目
    • [誤]mb_regex_encoding('UTF-8')

      // シングルクォート、ダブルクォートをエスケープする関数

      function escape($input) {

      $single_escaped = mb_ereg_replace("'", "''", $input);

      $safe = mb_ereg_replace('"', '""', $single_escaped);

      return $safe;

      }
    • [正]// 文字列をエスケープなどする関数

      // Hakre氏のブログ記事を参考にしています。

      // http://hakre.wordpress.com/2013/07/11/mitigating-xpath-injection-attacks-in-php/

      function escape($input) {

      mb_check_encoding($input, 'UTF-8') or die('不正な文字列です');

      if (false === strpos($input, "'")) {

      return "'".$input."'";

      }

      if (false === strpos($input, '"')) {

      return '"'.$input.'"';

      }

      return "concat('" . strtr($input, array("'" => '\', "\'", \'')) . "')";

      }
    • 【 第2刷にて修正 】
  • 312ページ 例「エスケープを行っているコード」内の25行目
    • [誤]// エスケープしてから、XPathに渡す
    • [正]// エスケープなどしてから、XPathに渡す
    • 【 第2刷にて修正 】
  • 313ページ 解説14、最後の段落の1行目
    • [誤]……エスケープ処理が行われ、
    • [正]……エスケープなどの処理が行われ、
    • 【 第2刷にて修正 】
  • 324ページ 問題13の選択肢C
    • [誤]以下の内容に差し替え
    • [正] php.iniで「session.cookie_secure = 1」を指定する
    • 【 第2刷にて修正 】
  • 324ページ 問題13の選択肢D、3~4行目
    • [誤] $_SESSION['auth'] = true;

      session_regenerate_id(true);
    • [正] session_regenerate_id(true);

      $_SESSION['auth'] = true;
    • 備考:

       3行目と4行目の順序を入れ替える。

    • 【 第2刷にて修正 】
  • 340ページ 解答13の最終段落
    • [誤]以下の内容に差し替え
    • [正]選択肢Cのようにsession.cookie_secureを1に指定した場合、セッションクッキーにSecure属性が付与されます。これは、HTTPS通信時に指定すれば、ブラウザがHTTPS通信の場合しかそのクッキーをサーバに送信しなくなるため、仮にHTTP通信を盗聴されたとしても、クッキーが漏洩する危険を回避することができます(Secure属性のないクッキーの場合、ユーザをHTTPページに誘導すれば送信されるため、盗聴が可能なら盗むことができます)が、あらかじめ攻撃者がセッションIDを指定するセッション固定化攻撃への対策にはなりません。

      セッション固定化攻撃への対策として望ましいのは、ユーザの権限が変わる場合、たとえばログイン時には、必ずsession_regenerate_id()関数を呼び出し、セッションIDを再生成することです。この関数を呼び出せば、ランダムな値のセッションIDが新たに発行され、攻撃者に指定されたセッションIDから変更されます。引数にtrueを指定しない場合、古いセッション情報がサーバ上に残り、古いセッションIDが有効なままになるので、選択肢Dのように必ずtrueを指定します。
    • 【 第2刷にて修正 】
  • 383ページ 表【拡張モジュールの種類】の「Zend拡張モジュール」の「同時にロードできる数」
    • [誤]1
    • [正]制限なし(※)
    • 【 第2刷にて修正 】
  • 383ページ 表【拡張モジュールの種類】
    • [誤]表の下に下記の内容を追記
    • [正]※ただしexecute()/execute_internal()をオーバーライドするZend拡張モジュールは1つまで。

    • 【 第2刷にて修正 】
  • 438ページ 解答1の10~11行目
    • [誤]このため、PHPビルトインのクラス/関数/定数を定義することができます。
    • [正]このため、PHPビルトインのクラス/関数/定数と同名のクラス/関数/定数を定義することができます。
    • 【 第2刷にて修正 】
  • 581ページ 問題20の選択肢D
    • [誤]…透過的なセッション管理(session.trans_sid=On)を利用するとよい
    • [正]…透過的なセッション管理(session.use_trans_sid=On)を利用するとよい
    • 【 第2刷にて修正 】
  • 617ページ 解答20の17~19行目
    • [誤]…透過的なセッション管理(session.trans_sid=On)の機能もありますが、
    • [正]…透過的なセッション管理(session.use_trans_sid=On)の機能もありますが、
    • 【 第2刷にて修正 】
  • 642ページ 索引「A」の1行目
    • [誤]abキーワード
    • [正]abコマンド
    • 【 第2刷にて修正 】
  • 649ページ 左段9行目
    • [誤]session.trans_sid
    • [正]この索引項目を削除
    • 【 第2刷にて修正 】
  • 649ページ 左段12行目、session.use_trans_sidのページ番号
    • [誤]170, 171
    • [正]170, 171, 617
    • 【 第2刷にて修正 】

お問い合わせ

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

お問い合わせフォーム