nifty LaCoocan の PHP 注意事項

  致命的エラーを表示させるには (旧サブタイトル:php.ini に代わる設定スクリプト)



久しぶりにこちらでテストしていたら、エラーが表示されないので調べてみたら、事情が変わっていました。PHP5 の最初からなのか、途中からなのか、ちょっと記憶が定かではありませんが、

結論から言うと、php ファイル単位で設定がコミットされるようなので、ini_set( 'display_errors', "1" ); を指定したファイルで致命的エラーを出してしまうと、反映されないのでエラーメッセージが出ません。

よって、ini_set( 'display_errors', "1" ); のみを実行するファイルから 本体を include します。

http://php.benscom.com/manual/ja/ref.errorfunc.php の英文の投稿にそう書いてたので
試してみると・・・・・ちゃんと出ました。

  
<?
ini_set( 'display_errors', "1" );

include( 'regopen_body.php' )
?>
  

※ それと、こちらは LaCoocan の phpinfo の代替処理です

  
<?
	print "PHP version : " . phpversion() . "<br>";
	print "php.ini : " . php_ini_loaded_file() . "<br>";
	print "include_path : " . get_include_path() . "<br>";
	print "get_magic_quotes : " . get_magic_quotes_gpc . "<br>";

	print "variables_order : " . ini_get('variables_order') . "<br>";
	print "short_open_tag : " . ini_get('short_open_tag') . "<br>";
	print "display_errors : " . ini_get('display_errors') . "<br>";
	print "display_startup_errors : " . ini_get('display_startup_errors') . "<br>";
	print "allow_url_fopen : " . ini_get('allow_url_fopen') . "<br>";
	print "allow_url_include : " . ini_get('allow_url_include') . "<br>";
	print "max_execution_time : " . ini_get('max_execution_time') . "<br>";
	print "post_max_size : " . ini_get('post_max_size') . "<br>";
	print "track_errors : " . ini_get('track_errors') . "<br>";

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>Loaded_extensions</b><br>";

	$target = get_loaded_extensions();
	foreach( $target as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>get_declared_classes</b><br>";

	$classes = get_declared_classes();
	foreach( $classes as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>\$_SERVER</b><br>";

	foreach( $_SERVER as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>\$_ENV</b><br>";

	foreach( $_ENV as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>ini_get_all</b><br>";
	print "<PRE>";
	$inis = ini_get_all();
	print_r($inis);
	print "</PRE>";
?>
  

関連する記事

LaCoocanサービス : メール転送機能の拡張


↓古い情報

LaCoocan では、デフォルトで出来る限り nifty にクレームが行かないような設定が工夫されているように感じます。その為、PHP の開発にある程度慣れた人間は、「あれ?」と首をひねるような現象に遭遇します。

いくつかの問題点を整理してみました。

1) エラーが起きても何も表示されない。
2) .htaccess による、PHP のディレクティブ変更ができない
3) phpinfo() が実行できない ( disable_functions で設定されている )
4) $_SERVER['SCRIPT_NAME'] の値が /.php-bin/php である
これは既に変更されて、その実行しているスクリプトになっています
( phpinfo の代替をごらん下さい )

/homepage/global.php
  
<?
ini_set( 'display_errors', "1" );
set_include_path( ".:/homepage/php/include" );
$_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];
$_ENV['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];
?>
  

エラーが表示されないのは、display_errors ディレクティブが空なせいです。
各 php プログラムの先頭で、
require_once( "/homepage/global.php" );
と記述しましょう。

同時に、include_path を設定して、そこに common.php を置いて、共有処理や共有関数をおさめるファイルとします。



  include_path 内の common.php



  
<?
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

foreach( $_GET as $Key => $Value ) {
	$Value = str_replace( "\\'", "'", $Value );
	$_GET[$Key] = str_replace( "\\\"", "\"", $Value );
}
foreach( $_POST as $Key => $Value ) {
	$Value = str_replace( "\\'", "'", $Value );
	$_POST[$Key] = str_replace( "\\\"", "\"", $Value );
}

# **********************************************************
# PHP の情報
# **********************************************************
function Info( ) {

	print "PHP version : " . phpversion() . "<br>";
	print "include_path : " . get_include_path() . "<br>";
	print "get_magic_quotes : " . get_magic_quotes_gpc . "<br>";

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>Loaded_extensions</b><br>";

	$target = get_loaded_extensions();
	foreach( $target as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>\$_SERVER</b><br>";

	foreach( $_SERVER as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>\$_ENV</b><br>";

	foreach( $_ENV as $Key => $Value ) {
		print "$Key => $Value<br>";
	}

	print "<HR>";
	print "<b style='font-size:24;font-weight:bold'>ini_get_all</b><br>";
	print "<PRE>";
	$inis = ini_get_all();
	print_r($inis);
	print "</PRE>";
}

# **********************************************************
# リダイレクト
# **********************************************************
function Redirect( $Target ) {

	header( "Location: $Target" );

}
?>
  



  include_path 内の common_キャラクタセット.php

common_sjis.php
  
<?
header( "Content-Type: text/html; Charset=shift_jis" );

foreach( $_GET as $Key => $Value ) {
	$_GET[$Key] = str_replace("\\\\", "\\", $Value );
}
foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
}
?>
  

common_ujis.php
  
<?
header( "Content-Type: text/html; Charset=euc-jp" );

?>
  

common_utf8.php
  
<?
header( "Content-Type: text/html; Charset=utf-8" );

?>
  



  info.php

  
<?
require_once( "/homepage/global.php" );
require_once( "common.php" );
require_once( "common_sjis.php" );

print "<H2 style='background-color:green;color:white'>PHP 情報の表示</H2>";
Info();
?>
  













   SQLの窓    create:2006/07/15  update:2015/09/23   管理者用(要ログイン)





フリーフォントツール

SQLの窓ツール

SQLの窓フリーソフト

写真素材

一般ツールリンク

SQLの窓

フリーソフト

JSライブラリ