開発環境
- OS X Lion - Apple(OS)
- Apache (Web Server)
- PHP (サーバーサイドプログラミング言語)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の10章(ファイルの操作)10.9(演習問題)4、5を解いてみる。
4, 5.
PHPのコード(TextWrangler)
<?php
require 'formhelpers.php';
if(array_key_exists('_submit_check', $_POST)){
if($_POST['_submit_check']){
if($form_errors = validate_form()){
show_form($form_errors);
} else {
process_form();
}
} else {
show_form();
}
} else {
show_form();
}
function show_form($errors = ''){
if($errors){
print "Error<ul><li>";
print implode("</li><li>", $errors);
print "</li></ul>";
}
print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '" />';
print "file name: ";
input_text('filename', $_POST);
input_submit("submit", "submit");
print '<input type="hidden" name="_submit_check" value="1" />';
print "</form>";
}
function validate_form(){
$errors = array();
if(!strlen(trim($_POST['filename']))){
$errors[] = "ファイル名を入力してください";
} else {
$filename = $_SERVER['DOCUMENT_ROOT'] . '/' . $_POST['filename'];
$filename = realpath($filename);
$len = strlen($_SERVER['DOCUMENT_ROOT']);
if($_SERVER['DOCUMENT_ROOT'] != substr($filename, 0, $len)){
$errors[] = "ドキュメントルートディレクトリ下に{$_POST['filename']}はありません。";
} elseif(strcasecmp(substr($filename, -5), ".html") != 0){
$errors[] = ".htmlで終わる名前のファイルしか表示できません。";
}
}
return $errors;
}
function proccess_form(){
$filename = $_SERVER['DOCUMENT_ROOT'] . '/' . $_POST['filename'];
$filename = realpath($filename);
$page = file_get_contents($filename);
if($page === false){
print "Couldn't load {$filename}";
} else {
print $page;
}
}
?>
HTMLソース
<form method="POST" action="/kamimura_blog/learning_php/sample69.php" />file name: <input type="text" name="filename" value="" /><input type="submit" name="submit" value="submit"/><input type="hidden" name="_submit_check" value="1" /></form>
一応それっぽく書いてはみたものの、上手くいかない。。
0 コメント:
コメントを投稿