手元のPHPがそれまで5.2.9だったのですが、5.3.1にアップグレードしたところ死亡。
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 475
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 552
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 1129
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\PEAR.php on line 557
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\PEAR.php on line 560
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\Mail.php on line 156
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\Net\UserAgent\Mobile.php on line 165
>Deprecated: Function ereg() is deprecated in C:\eccube\data\class\util\SC_Utils.php on line 83
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB\common.php on line 964
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB\common.php on line 1171
平たく言うと、「その関数、使い方は今後サポートしなくなるから使うな」ということです。
Pearでエラーってどういうことだよ、と見てみると更新日が2007年。
PHP4なんていい加減捨ててしまえ。
フォーラムでの解決方法は「ダウングレードしろ」
いや駄目だろそれ。
後方互換性の確保という理念はまあいいのですが、そのために新バージョン切り捨てとかありえない。
手っ取り早く修正するのであればerror_reporting()がC:\eccube\data\class/SC_Initial.phpに書かれていますので、
function setErrorReporting() {
//error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
}
ってするといいのですがこんなのではよくありません。
とりあえずpearコマンドで入れられている共通版のPearをインクルードするように差し替えようと思いましたが、至る所で
require_once(dirname(__FILE__) . '/../module/Mail.php');
とか書かれてる。
もうちょっとこう……
次善の策と言うことで直接書き換えます。
Pear関連で発生しているDeprecatedエラーは、全部 &newって書かれているせいなので、単&にを削除するだけです。
残りは\data\class\util\SC_Utils.phpのereg()ですが、単に文字列比較しているだけなので
//if( !ereg('/install/', $_SERVER['PHP_SELF']) ) {
if( strpos($_SERVER['PHP_SELF'] , '/install/' )===false ) {
と書き換えます。
余談ですがこのSC_Utils::sfInitInstall()、場合によっては最終的に完成するURLが'hoge/fuga//install/'みたいになります。
header('Location: hoge/fuga//install/')であればhttp://eccube.localhost/hoge/fuga/install/に一応辿り着けるのですが、htmlディレクトリをDocumentRootにしている場合、header('Location: //install/')となりhttp://install/を探しに行って死にます。
最初の一回しか使わないからいいといえばいいんですけどねえ。
さて無事エラーは出なくなりましたが、かわりに真っ白です。
はて。
順に読んでいくと、
/html/install/index.phpの
require_once("../require.php");
/html/require.phpの
require_once($require_php_dir . HTML2DATA_DIR . "require_base.php");
/data/require_base.phpの
$sessionFactory->initSession();
/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.phpの
session_start();
で死んでいました。
お?
どのタイミングで死ぬかというと、/data/require_base.phpの
$objSession = new SC_Helper_Session_Ex();
です。
これより前だとsession_start()に成功し、後だとsession_start()に失敗します。
SC_Helper_Sessionが何をやってるかというとsession_set_save_handler()を使ってセッションをDBに保存していました。
…データベースの設定はインストール開始後に行うんですが…
FatalErrorすら吐かずに完全停止というのは少々ご勘弁願いたい。
とりあえず/data/class/SC_Inittial.phpに以下の対応を行うことでフリーズは回避されます。
//define("DEFAULT_DSN", "pgsql://nobody:password@localhost:5432/eccubedb")
define("DEFAULT_DSN", "mysql://nobody:password@localhost:5432/eccubedb");
なんでだよ。
インストール開始後も、ことある毎にDeprecatedエラーが大量発生しまくって酷いったらありゃしない。
インストール終了後、サイトトップを表示してみると目眩がします。
なんで今更ereg()なんか使ってるんだ。
はっきりいって使えたものではないので、結局error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);にしてしまいました。
EC-CUBEの記事
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 475
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 552
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB.php on line 1129
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\PEAR.php on line 557
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\PEAR.php on line 560
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\Mail.php on line 156
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\Net\UserAgent\Mobile.php on line 165
>Deprecated: Function ereg() is deprecated in C:\eccube\data\class\util\SC_Utils.php on line 83
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB\common.php on line 964
>Deprecated: Assigning the return value of new by reference is deprecated in C:\eccube\data\module\DB\common.php on line 1171
平たく言うと、「その関数、使い方は今後サポートしなくなるから使うな」ということです。
Pearでエラーってどういうことだよ、と見てみると更新日が2007年。
PHP4なんていい加減捨ててしまえ。
フォーラムでの解決方法は「ダウングレードしろ」
いや駄目だろそれ。
後方互換性の確保という理念はまあいいのですが、そのために新バージョン切り捨てとかありえない。
手っ取り早く修正するのであればerror_reporting()がC:\eccube\data\class/SC_Initial.phpに書かれていますので、
function setErrorReporting() {
//error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
}
ってするといいのですがこんなのではよくありません。
とりあえずpearコマンドで入れられている共通版のPearをインクルードするように差し替えようと思いましたが、至る所で
require_once(dirname(__FILE__) . '/../module/Mail.php');
とか書かれてる。
もうちょっとこう……
次善の策と言うことで直接書き換えます。
Pear関連で発生しているDeprecatedエラーは、全部 &newって書かれているせいなので、単&にを削除するだけです。
残りは\data\class\util\SC_Utils.phpのereg()ですが、単に文字列比較しているだけなので
//if( !ereg('/install/', $_SERVER['PHP_SELF']) ) {
if( strpos($_SERVER['PHP_SELF'] , '/install/' )===false ) {
と書き換えます。
余談ですがこのSC_Utils::sfInitInstall()、場合によっては最終的に完成するURLが'hoge/fuga//install/'みたいになります。
header('Location: hoge/fuga//install/')であればhttp://eccube.localhost/hoge/fuga/install/に一応辿り着けるのですが、htmlディレクトリをDocumentRootにしている場合、header('Location: //install/')となりhttp://install/を探しに行って死にます。
最初の一回しか使わないからいいといえばいいんですけどねえ。
さて無事エラーは出なくなりましたが、かわりに真っ白です。
はて。
順に読んでいくと、
/html/install/index.phpの
require_once("../require.php");
/html/require.phpの
require_once($require_php_dir . HTML2DATA_DIR . "require_base.php");
/data/require_base.phpの
$sessionFactory->initSession();
/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.phpの
session_start();
で死んでいました。
お?
どのタイミングで死ぬかというと、/data/require_base.phpの
$objSession = new SC_Helper_Session_Ex();
です。
これより前だとsession_start()に成功し、後だとsession_start()に失敗します。
SC_Helper_Sessionが何をやってるかというとsession_set_save_handler()を使ってセッションをDBに保存していました。
…データベースの設定はインストール開始後に行うんですが…
FatalErrorすら吐かずに完全停止というのは少々ご勘弁願いたい。
とりあえず/data/class/SC_Inittial.phpに以下の対応を行うことでフリーズは回避されます。
//define("DEFAULT_DSN", "pgsql://nobody:password@localhost:5432/eccubedb")
define("DEFAULT_DSN", "mysql://nobody:password@localhost:5432/eccubedb");
なんでだよ。
インストール開始後も、ことある毎にDeprecatedエラーが大量発生しまくって酷いったらありゃしない。
インストール終了後、サイトトップを表示してみると目眩がします。
なんで今更ereg()なんか使ってるんだ。
はっきりいって使えたものではないので、結局error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);にしてしまいました。
EC-CUBEの記事
PR
トラックバック
トラックバックURL:
http://svn.ec-cube.net/open_trac/ticket/603
まあWindowsでは云々とか書くくらいならPATH_SEPARATOR使えよって思わなくもないですが。