トラブルの
管理画面が崩れる(XCL2.1.4->2.1.5アップデート後;一部ユーザ)と根が同じかと思いますが、GNAVIで投稿できなくなりました。
中央部より投稿ボタンが消え、メニューの投稿クリックで権限がありませんログインしてください画面になります。
もちろんログインしていますし、権限も付加しています。
他モジュールでは今のところ問題ありません。
環境は下記になります。
Apache 2.2.3
PHP 5.1.6
MySQL 5.0.45
UTF8で運用しています。
トラブルかここか投稿先に悩みましたが、とりあえずここに。
gnaviってmyalbumベースなんですね。
多分、ここを直せば動くと思います。
/xoops_trust_path/modules/gnavi/include/common_prepend.inc.php
<?php
//include files
require_once dirname(dirname(__FILE__)).'/include/read_configs.php' ;
require_once dirname(dirname(__FILE__)).'/include/get_perms.php' ;
require_once dirname(dirname(__FILE__)).'/include/draw_functions.php' ;
require_once dirname(dirname(__FILE__)).'/include/common_functions.php' ;
require_once dirname(dirname(__FILE__)).'/include/common_javalang.inc.php' ;
require_once XOOPS_ROOT_PATH."/class/xoopstree.php" ;
を
<?php
//include files
require dirname(dirname(__FILE__)).'/include/read_configs.php' ;
require dirname(dirname(__FILE__)).'/include/get_perms.php' ;
require_once dirname(dirname(__FILE__)).'/include/draw_functions.php' ;
require_once dirname(dirname(__FILE__)).'/include/common_functions.php' ;
require_once dirname(dirname(__FILE__)).'/include/common_javalang.inc.php' ;
require_once XOOPS_ROOT_PATH."/class/xoopstree.php" ;
read_config.phpとget_perms.phpはmyalbumではincludeする時には_onceを入れてないハズです。requireで確実にincludeしないとダメなので。
Xanhteではxoops_version.phpを一回Readしてるので、バッティングしてしまいますね(gnaviのxoops_version.phpでinclude get_perm.phpしてる)。ここはXanhte側ではなくgnavi側を直すのが妥当かと。
あと、gnaviって<{$xoops_module_header}>をバリバリ上書きしてしまいますね。
garaさん、ご報告ありがとうございます。
tohokuaikiさん、解決策を示していただいてありがとうございました。
直ちに修正しようと思ったのですが、ちょっと教えてほしいです。
require_onceだと、確実にREADされないのでしょうか。
初回は確実にIncludeされるという認識でした。
同名ファイルがあるとだめなのでしょうか。
PHPマニュアルを見てもそのあたり詳しくのっていませんでしたので、
よろしければ今回の原因を教えていただきたいです。
また、当サイトにて大変不適切で失礼なコメントをしてしまい、
申し訳ありません。ごめんなさい。
http://xoops.iko-ze.net/modules/d3forum/index.php?topic_id=147
引用:
kentaroさんは書きました:
require_onceだと、確実にREADされないのでしょうか。
初回は確実にIncludeされるという認識でした。
私も一時期は勘違いしてたのですが、include/requireはまさにコードのコピー&ペーストみたいな感じになります。何回やってもReadされます。
include_once/require_onceは、FunctionやClassやdefine文みたいな「一度定義したら書き直せない」コードを書いたファイルをReadする時に使います。
昔はPHPに*_once系が無かったので、functionの二重定義でFatalが出てしまうので、function自体を
if (!function_exists('Foo_func')){
function Foo_func(){
}
}
みたいにしてたそうです。
引用:
また、当サイトにて大変不適切で失礼なコメントをしてしまい、
申し訳ありません。ごめんなさい。
いえ、全然気にしていません。実際xanhteは色々と影響を及ぼしていることが多いので。
tohokuaiki さん、
ご丁寧な回答ありがとうございます。
なるほど良く理解できました。
include_onceならいつでも大丈夫、
むしろinclude_onceを積極的に使うべきと勝手に勘違いしていました。
まだまだ勉強不足でした。
ありがとうございます。