PHP5上級試験/準上級試験模擬問題

PHP技術者認定上級試験の類似問題として模擬問題を以下の通りご紹介いたします。
全出題範囲をカバーしている公式模擬問題はインプレスが出版する徹底攻略 PHP5 技術者認定[上級] 試験問題集のみで公開しています。書籍のご購入はこちらからお願いします。

模擬問題1【オブジェクトの内部検査】


以下のコードの出力として正しいものを1つ次の記述の中から選択せよ。

class SimpleClass
{
public $var = ‘a default value’;
public function displayVar() {
echo $this->var;
}
}
class ExtendClass extends SimpleClass
{
function displayVar0()
{
echo $this->var;
}
}

$extended = new ExtendClass();
$methods = get_class_methods(get_class($extended));
print_r($methods);

選択肢1:

Array
(
[0] => displayVar0
[1] => displayVar
)

選択肢2:

Array
(
[0] => displayVar0
)

選択肢3:

Array
(
[0] => displayVar
)

選択肢4:

Array
(
[0] => ‘a default value’
)

選択肢5:

Array
(
[0] => ‘a default value’
[1] => ‘a default value’
)

【模擬問題1の回答】

選択肢1

正解解説:ExtendClassクラスはSimpleClassクラスを継承しているので、メソッドはExtendClassで定義しているdisplayVar0と、親クラスで定義しているdisplayVarの2つとなる。

模擬問題2【レスポンスヘッダの有効期限】


ブラウザやプロキシにドキュメントをキャッシュさせないようにレスポンスヘッダを出力するための呼び出しとして正しいものを1つ次の記述の中から選択せよ。

選択肢1:

echo (“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);

選択肢2:

echo “<header>”;
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);
echo “</header>”;

選択肢3:

header(“Cache-control: post-check, pre-check”);

選択肢4:

header(“Cache-control: no-store, no-cache, must-revalidate”);

選択肢5:

header(“Program: no-cache”);

【模擬問題2の回答】

選択肢4

正解解説:
1. 2.  レスポンスヘッダへの出力の追加は、header()関数で行う。header()関数を呼ぶ前に、レスポンスデータの出力があってはならない。

3. Cache-control: post-check, pre-checkはIE用のヘッダであるが、指定には”Cache-Control: post-check=0, pre-check=0″のように数値が必要となる。

4. HTTP/1.0 の仕様には、”Pragma: no-cache”という記述もあったが、”Pragma”であり”Program”ではない。

模擬問題3【Webアプリケーション構築のテクニック】


PHPで利用されるWebアプリケーション構築のテクニックについて正しいものを1つ、次の記述の中から選択せよ。

選択肢1:

HTTP Basic認証は本格的なWebアプリケーションとして適さないが、認証をサポートしないWebアプリケーションに手軽に認証機能を付加できる。Web サーバの機能でHTTP認証を行っている場合でも$_SERVER[‘PHP_AUTH_USER’], $_SERVER[‘PHP_AUTH_PW’]変数は設定されているので、認証機能が利用されているかどうかは確認できる。

選択肢2:

HTTP は状態を維持しないステートレスなプロトコルである。セッションモジュールを利用すれば状態を維持するアプリケーションを作成できる。セッション管理には クッキーを利用するが、クッキーが無効なクライアントに対応するため透過的なセッション管理(session.use_trans_sid=on)を利用 すると良い。

選択肢3:

セッション管理モジュールにはよく利用されるHTTPキャッシュヘッダが予め用意されている。 session.cache_limiter設定にはpublic(公開)、private(ユーザ限定)、nocache(キャッシュ無し)がある。こ の為、本格的なWebアプリケーションでもキャッシュ設定を操作する必要はない。

選択肢4:

PHPは open_basedir設定を利用してアクセスできるディレクトリを制限できる。ファイルアップロードをサポートする場合、open_basedir設 定で他のディレクトリへのアクセスが制限されている可能性があるので、アプリケーションをインストールしたディレクトリ以下にアップロードしなければなら ない。

選択肢5:

セッションデータをサーバ側のファイルやデータベースに保存するとサーバ側のリソースを消費する。 PHPに付属するセッションセーブハンドラにはデータの保存先をクッキーに設定するハンドラ(session.save_handler=cookie) を利用するとサーバ側のリソースの消費を減らせる。

【模擬問題3の回答】

選択肢1

不正解解説:
2. trans_sidはセキュリティ問題の原因となるので通常は利用しない。
3. 本格的なアプリケーションではキャッシュヘッダを利用して細かくキャッシュ制御を行う事がよくある。
4. 通常ファイルアップロードはドキュメントルート以下へ許可すべきではない。特にPHPや他のCGIとして処理されるファイルを許可すると任意スクリプト実行の危険性がある。
5. PHPのセッションセーブハンドラにcookieは無い。


模擬問題4:【SimpleXMLによるXMLの解析】


以下のコードの出力として正しいものを1つ次の記述の中から選択せよ。

$document = simplexml_load_file(‘bookparse5.xml’);
foreach ($document->book as $book) {
foreach($book->authors->children() as $child) {
foreach($book->title as $child) {
echo $child.”\n”;
}
}
}

ここで、bookparse5.xmlの内容は次のとおり。

<?xml version=”1.0″ ?>
<library>
<book>
<title>Programming PHP</title>
<authors>
<author>Rasmus Lerdorf</author>
<author>Kevin Tatroe</author>
</authors>
<isbn>1-56592-610-2</isbn>
<comment>A great book!</comment>
</book>
<book>
<title>PHP Pocket Reference</title>
<authors>
<author>Rasmus Lerdorf</author>
</authors>
<isbn>1-56592-769-9</isbn>
<comment>It really does fit in your pocket</comment>
</book>
<book>
<title>Learning PHP 5</title>
<authors>
<author>David Sklar</author>
</authors>
<isbn>0-596-00560-1</isbn>
<comment>To begin PHP, this is the book you need</comment>
</book>
</library>

選択肢1:

Rasmus Lerdorf
Kevin Tatroe
David Sklar

選択肢2:

Programming PHP
Programming PHP
PHP Pocket Reference
Learning PHP 5

選択肢3:

Rasmus Lerdorf
Kevin Tatroe
Rasmus Lerdorf
David Sklar

選択肢4:

David Sklar
Kevin Tatroe
Rasmus Lerdorf

選択肢5:

Programming PHP
PHP Pocket Reference
Learning PHP 5

【模擬問題4の回答】

選択肢2

正解解説:

1つ目のforeach文で、各bookについてということになり、
2つ目のforeach文で、$book->authors->children()で見つかった数だけ、
3つ目のforeach文で、$book->titleを出力することになる。

foreach($book->authors->children() as $child) の $child は使われることなく、
その下の階層のforeach($book->title as $child) の$child が出力され、これはtitleの内容となっている。

注意すべき点は、xmlファイルの1つ目のbookのauthorsには2人のauthorが記述されているため、titleが2回出力されることになる。残りのbookについてはそれぞれ1回ずつの出力である。


模擬問題5:【ファイルの読み込みについて】


includeとrequireについて、正しいものを1つ次の記述の中から選択せよ。

選択肢1:

includeは関数なので、「include(‘ファイル名’);」という使い方をする。echoのように、「include ‘ファイル名’;」とはできない。

選択肢2:

includeやrequireで読み込むファイルに、外部のURLを指定することはできない。

選択肢3:

PHPの途中でincludeされたファイルには、PHPの開始タグと終了タグは不要である。

選択肢4:

includeはファイルを見つけられない場合にfatal errorを発行するが、requireの場合はwarningになる。

選択肢5:

呼び出されたファイルの内部では、呼び出し側がincludeした場所で利用可能な変数をすべて使用できる。また、呼び出されたファイルの内部で定義されている関数は、呼び出し側のファイルではグローバルに扱える。

【模擬問題5の回答】

選択肢5

不正解解説:

1. includeやrequireは言語構造なので、引数の()を省略することができる。
2. 外部サーバののPHPファイルをincludeすることはできる。ただし、リモートファイルインクルード脆弱性には注意が必要である。
3. PHPの途中でincludeされたファイルにも、PHPの開始タグと終了タグは必要である。
4. includeはファイルが読み込めないと警告を発する(動作は止めない)。requireはエラーが起きて処理を停止する。


模擬問題6:【WindowsとUnixで共用できるコードの書き方】


WindowsとUnixで共用できるコードについて、正しいものを1つ次の記述の中から選択せよ。

選択肢1:

WindowsとUnixでは改行コードが異なるため、そのままではプログラムファイルを共用することはできない。

選択肢2:

PHPのコードは実行環境には依存しないので、どんなオペレーティングシステム上で実行しているかを調べる手段はない。

選択肢3:

Windows版のPHPでは、スラッシュとバックスラッシュの両方をパスの区切り文字として認識する。

選択肢4:

Unix版には $_ENV定数配列にシェルの環境変数が格納されていて、Windows版ではこれに該当するものは$_SET定数配列である。

選択肢5:

PHPのコードでsystem()関数を使えば、外部コマンドを実行する際に、Windows版でもUnix版と同様にワイルドカードによる複数ファイルの指定ができる。

【模擬問題6の回答】

選択肢3

不正解解説:

1. WindowsとUnixでは改行コードは異なるが、文字エンコーディングに気をつければ、同じファイルを使ってPHPを走らせるようにもできる。
2. PHPのコードは実行環境に依存する部分としない部分がある。
4.  Window版も $_ENV で参照可能。
5. Windows版ではUnixのワイルドカードは使えない