* PHP5.0.5でFatal error [#mb63d60d]

- ページ: [[BugTrack2]]
- 投稿者: [[kawa]]
- 優先順位: 重要
- 状態: 提案
- カテゴリー: 本体バグ
- 投稿日: 2005-09-08 (木) 17:22:43
- バージョン: 1.4.5_1

** メッセージ [#lc1fa850]
WindowsServer2003 & PHP 5.0.5 の環境で以下のエラーが出ます。5.0.4に戻すと正常動作します。

Fatal error: Only variables can be passed by reference in ~/rules.ini.php on line 26

--------
- こっちのが詳しく書いてくれてた[[org:質問箱3/183]] --  &new{2005-09-08 (木) 19:49:16};
- 質問箱の方には書き忘れましたが、OS は RHEL4 と RH9 で再現させました。 でも、PHP 5.0.5 のリリースノートにあるように、PHP の「正しい動作」の問題のようなので、OS によらないと思われます。 -- [[Kimi]] &new{2005-09-09 (金) 13:14:25};
- 4,5個のファイルを少し直すだけでした。array_pop(explode('/', $vars['page'])) みたいに、参照を引数に取る関数に関数の戻りを渡しているところで、関数の戻り値を一時変数に一度とっておき、それを引数として使うと正しく動作します。パッチを作ろうとしたらミスしました(x_x;) -- [[hiro@coop]] &new{2005-09-13 (火) 02:31:24};
- [[../82]]と同じですかね。 -- [[よっちい]] &new{2005-09-13 (火) 16:45:47};
- http://www.php.net/release_4_4_0.php によると "If references were used in a wrong way, PHP would often create memory corruptions which would not always surface or be visible." とあるのでエラーの発生に関らずリファレンス引数を取る部分に式を置くのはまずいようです((私かなりやってますが)) -- [[Cue]] &new{2005-09-13 (火) 22:44:05};
- 具体的にどうされたのか伺おうかと(オープンな場所で進めさせてもらおうと)思っていたのですが、どのへんをミスりましたか? -- [[henoheno]] &new{2005-09-13 (火) 23:38:38};
- PHP5.1.0RC1 で 1.4.6RC に対するパッチですが、こんな感じです: -- [[kawai]] &new{2005-09-28 (水) 18:47:46};
 diff -ur pukiwiki-1.4.6_rc/lib/file.php pukiwiki-1.4.6_rc_mod/lib/file.php
 --- pukiwiki-1.4.6_rc/lib/file.php	Wed Sep 28 18:42:04 2005
 +++ pukiwiki-1.4.6_rc_mod/lib/file.php	Wed Sep 28 18:42:15 2005
 @@ -264,7 +264,8 @@
  	set_file_buffer($fp, 0);
  	flock($fp, LOCK_EX);
  	rewind($fp);
 -	foreach (array_splice(array_keys($recent_pages), 0, $maxshow) as $page) {
 +	$tmp=array_keys($recent_pages);
 +	foreach (array_splice($tmp, 0, $maxshow) as $page) {
  		$time      = $recent_pages[$page];
  		$s_lastmod = htmlspecialchars(format_date($time));
  		$s_page    = htmlspecialchars($page);
 diff -ur pukiwiki-1.4.6_rc/lib/html.php pukiwiki-1.4.6_rc_mod/lib/html.php
 --- pukiwiki-1.4.6_rc/lib/html.php	Wed Sep 28 18:42:04 2005
 +++ pukiwiki-1.4.6_rc_mod/lib/html.php	Wed Sep 28 18:42:15 2005
 @@ -119,9 +119,9 @@
  	if ($search_word_color && isset($vars['word'])) {
  		$body = '<div class="small">' . $_msg_word . htmlspecialchars($vars['word']) .
  			'</div>' . $hr . "\n" . $body;
 -		$words = array_flip(array_splice(
 -			preg_split('/\s+/', $vars['word'], -1, PREG_SPLIT_NO_EMPTY),
 -			0, 10));
 +		$tmp = preg_split('/\s+/', $vars['word'], -1, PREG_SPLIT_NO_EMPTY);
 +		$tmp = array_splice($tmp, 0, 10);
 +		$words = array_flip($tmp);
  		$keys = array();
  		foreach ($words as $word=>$id) $keys[$word] = strlen($word);
  		arsort($keys, SORT_NUMERIC);
 Only in pukiwiki-1.4.6_rc_mod: phpinfo.php
 diff -ur pukiwiki-1.4.6_rc/plugin/recent.inc.php pukiwiki-1.4.6_rc_mod/plugin/recent.inc.php
 --- pukiwiki-1.4.6_rc/plugin/recent.inc.php	Wed Sep 28 18:42:05 2005
 +++ pukiwiki-1.4.6_rc_mod/plugin/recent.inc.php	Wed Sep 28 18:42:16 2005
 @@ -39,7 +39,8 @@
  
  	// Get latest N changes
  	if (file_exists(PLUGIN_RECENT_CACHE)) {
 -		$lines = array_splice(file(PLUGIN_RECENT_CACHE), 0, $recent_lines);
 +		$tmp=file(PLUGIN_RECENT_CACHE);
 +		$lines = array_splice($tmp, 0, $recent_lines);
  	} else {
  		return '#recent(): Cache file of RecentChanges not found' . '<br />';
  	}
 diff -ur pukiwiki-1.4.6_rc/plugin/rss.inc.php pukiwiki-1.4.6_rc_mod/plugin/rss.inc.php
 --- pukiwiki-1.4.6_rc/plugin/rss.inc.php	Wed Sep 28 18:42:05 2005
 +++ pukiwiki-1.4.6_rc_mod/plugin/rss.inc.php	Wed Sep 28 18:42:16 2005
 @@ -35,7 +35,8 @@
  
  	// Creating <item>
  	$items = $rdf_li = '';
 -	foreach (array_splice(file($recent), 0, $rss_max) as $line) {
 +	$tmp=file($recent);
 +	foreach (array_splice($tmp, 0, $rss_max) as $line) {
  		list($time, $page) = explode("\t", rtrim($line));
  		$r_page = rawurlencode($page);
  		$title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
 diff -ur pukiwiki-1.4.6_rc/rules.ini.php pukiwiki-1.4.6_rc_mod/rules.ini.php
 --- pukiwiki-1.4.6_rc/rules.ini.php	Wed Sep 28 18:42:06 2005
 +++ pukiwiki-1.4.6_rc_mod/rules.ini.php	Wed Sep 28 18:42:18 2005
 @@ -25,6 +25,7 @@
  //  前後に必ず / を含めてください。行頭指定は ^ を頭に。
  //  行末指定は $ を後ろに。
  //
 +$page_tmp=explode('/',$vars['page']);
  $str_rules = array(
  	'now\?' 	=> format_date(UTIME),
  	'date\?'	=> get_date($date_format),
 @@ -32,7 +33,7 @@
  	'&now;' 	=> format_date(UTIME),
  	'&date;'	=> get_date($date_format),
  	'&time;'	=> get_date($time_format),
 -	'&page;'	=> array_pop(explode('/', $vars['page'])),
 +	'&page;'	=> array_pop($page_tmp),
  	'&fpage;'	=> $vars['page'],
  	'&t;'   	=> "\t",
  );
- php5対応を謳っているのにphp-5.0.5では動作しないことがわかっているわけですから、修正されるまでの間この旨を周知した方がいいと思うのですがどうでしょうか? -- [[よっちい]] &new{2005-09-30 (金) 09:45:08};
- 私も賛成です。 -- [[うい]] &new{2005-09-30 (金) 11:25:00};
- こんにちは :) 皆さんのご協力もあって具体的な例も出てきたこと、また、やっとサイトが落ち着いて来た事もあり、今は&size(16){''1.4.6 リリースにこの件の対応をねじ込みたいのだがどうだろうか?''};などと考えています。これのせいでPHPを5.0.4に戻したりするのは悲しいですよね(やるべきじゃありません)。
-- ただコミット後数日後とか、一週間後にリリースするような事はタイミング的に強引だと思うので、本当に問題ないかどうかを開発日誌、およびusers-mlなどで周知を図りたいと思います。もう私は手元のVMwareでPHP5.0.5の環境を作り始めてています。5.0.5以降の方も4.1.2な方も少し力を貸してください :) -- [[henoheno]] &new{2005-09-30 (金) 22:00:12};
-- まずは、(内容的にはとても簡単な事のようには見えるのですが)対応方法の妥当性から確認させて下さい。また、網羅的に対応できるかは今は期待しないで下さい。別途修正漏れがあればここで共有しましょう。 -- [[henoheno]] &new{2005-09-30 (金) 22:07:55};
-- 妙なことがあるのであればその対応をするか、コミットをback out (元に戻す)します。 -- [[henoheno]] &new{2005-09-30 (金) 22:16:19};
- よっちぃさんがどちらを意図したかは分からないのですが、少なくとも私はまず1.4.5_1が5.0.5で動作しないことを周知すべきではないかと思ってます。そもそもこのBugTrackは1.4.5_1に対して出されたものですし。 -- [[うい]] &new{2005-10-01 (土) 10:58:51};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.049 sec.

OSDN