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();
?>
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[phpVarious]
CCBot/2.0 (https://commoncrawl.org/faq/)
24/12/06 23:29:11
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube