index.php

大本のプログラム
index.phpというかコントローラもどきというか。

try {

$params = CRequestParser::parse();
if ( !isset( $params[ 'action' ] ) ) {
if ( $_SERVER['REQUEST_URI'] == "/"
|| $_SERVER['REQUEST_URI'] == "/index.html"
|| $_SERVER['REQUEST_URI'] == "/index.htm"
) {
$params[ 'action' ] = "initial";
} else {
header("Location: /404.html");
exit;
}
}

CActionExecutor::execute( $params[ 'action' ], $params );

} catch ( Exception $e ) {
CLog::error( $e );
CLog::errorTrace( $e );
$html = array();
$html['siteurl'] = htmlspecialchars( SITEURL );
$html['sitetitle'] = htmlspecialchars( SITETITLE );
$html['pagetitle'] = htmlspecialchars( "" );
HtmlTemplate::t_include( TEMPLATE_ERRORPAGE, $html );

}

エラーは、set_error_handlerで拾ってしまえと思っていたりいなかったり。

mod_rewriteの設定


RewriteRule ^404\.html$ index\.php?action=404 [L]
RewriteRule ^(.*)$ index\.php [L]
なるべく定義しないようにかんがえようかと?

class CRequestParser
{

// parse
public static function parse()
{
try {
$params = array();

foreach ( $_REQUEST as $paramname => $paramval ) {
$params[ $paramname ] = $paramval;
}

$requrl = $_SERVER['REQUEST_URI'];

if( strlen( $requrl ) ) {
$requrls = split ( "/" , $requrl );
for ( $i = 0; $i < count( $requrls ); $i++ ) {
if ( strstr( $requrls[$i], "=" ) ) {
$reqparams = split ( "=" , $requrls[$i] );
$params[ $reqparams[0] ] = urldecode( $reqparams[1] );
}
}

}

return $params;

} catch ( Exception $e ) {
CLog::error( $e );
CLog::errorTrace( $e );
throw $e;
}
}

}

リクエストとURI文字をパラメータにする。
URIは/param1=value/param1=value/param1=value/param1=value/param1=value/ を分解してパラメタに。。。
あっ同一のパラメータが複数送られたときを考えていないような気がする。また今度。
外面がぜんぜんはかどらない。なぜだろう。