* 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",
  );
  
#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.058 sec.

OSDN