-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtopic-71.html
88 lines (75 loc) · 8.38 KB
/
topic-71.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
<head>
<title>日本PHPユーザ会 掲示板: PHP 5 » FreeBSD(amd64/i386)とPHP5のマルチバイトで不具合</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。" />
<meta name="keywords" content="php,web,php.gr.jp,community,usebb" />
<link rel="stylesheet" type="text/css" href="./templates/phpgrjp0.3/styles.css" />
<link rel="shortcut icon" href="./templates/phpgrjp0.3/gfx/usebb.ico" />
<link rel="alternate" type="application/rss+xml" title="日本PHPユーザ会 掲示板 RSS フィード" href="rss.xml" />
<script type="text/javascript" src="sources/javascript.js"></script>
</head>
<body onload="javascript:init_external()">
<div id="pagebox-bg">
<div id="shadow-left">
<div id="shadow-right">
<p id="logo"><a href="index.html"><img src="./templates/phpgrjp0.3/gfx/usebb.png" alt="UseBB" title="ホーム" /></a></p>
<h1 id="boardname"><span id="line">日本PHPユーザ会 掲示板</span></h1>
<h2 id="boarddescr">日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。</h2>
<div id="topmenu"><ul>
<li><a href="index.html">ホーム</a></li><li><a href="faq.html">FAQ</a></li><li><a href="active.html">活発なトピック</a></li>
</ul></div>
<div id="topmenu-shadow"></div>
<p class="locationbar">
• <a href="index.html">日本PHPユーザ会 掲示板</a> » <a href="forum-4.html">PHP 5</a> » FreeBSD(amd64/i386)とPHP5のマルチバイトで不具合
</p>
<h3 id="forumname"><a href="topic-71.html">FreeBSD(amd64/i386)とPHP5のマルチバイトで不具合</a></h3>
<p id="forummods"></p>
<p id="toolbartop"> </p>
<p id="pagelinkstop">ページ: 1</p>
<table class="maintable">
<tr>
<th>投稿者</th>
<th>投稿</th>
</tr>
<tr class="tr1">
<td class="postername">
<div class="posternamecontainer"><a href="profile-36.html">kona@m</a></div>
</td>
<td class="postinfo">
<div class="postlinks"></div>
<div class="postdate"><a href="topic-post177.html#post177" name="post177" rel="nofollow">#1</a> 2008 年 6 月 16 日(月) 19:30</div>
</td>
</tr>
<tr class="tr1">
<td class="posterinfo">
会員
<div class="avatar"></div>
<div class="field">登録者: 10 2007</div>
<div class="field">返信数: 71</div>
<div class="field"></div>
</td>
<td class="postcontent">
<div class="post">FreeBSDでソースからコンパイルしたPHP5ですが、マルチバイトのあたりで期待通りの動作をしません。応急処置はできたのですが、自分の環境が悪いのか、それともPHP自体の不具合なのかわかりません。同じような現象が起きたという情報をどなたかお持ちでしょうか。<br /><br />環境:<br />Pentium D 820 + EM64T対応マザーボード<br />FreeBSD 6.1 amd64<br />Apache 2.0.63<br />PHP 5.2.6<br /><br />コンパイル時の指定:<br /><pre class="code">export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"<br />export CXX=gcc<br />export CXXFLAGS="${CFLAGS}"<br />./configure \<br />--prefix=/usr/local/php5 \<br />--enable-force-cgi-redirect \<br />--enable-zend-multibyte \<br />--enable-mbstring \<br />--enable-mbregex \<br />--with-zlib \<br />--enable-zip \<br />--enable-bcmath \<br />--enable-calendar \<br />--enable-ctype \<br />--enable-exif \<br />--enable-ftp \<br />--with-gd \<br />--with-jpeg-dir=/usr/local \<br />--with-ttf \<br />--with-freetype-dir=/usr/local \<br />--enable-gd-native-ttf \<br />--enable-gd-jis-conv \<br />--enable-sockets \<br />--with-mysql=/usr/local/mysql \<br />--with-mysql-sock=/tmp/mysql.sock \<br />--with-config-file-path=/usr/local/php5/etc</pre><br /><br />php.iniより抜粋:<br /><pre class="code">output_handler = mb_output_handler<br />max_execution_time = 10<br />[mbstring]<br />mbstring.language = Japanese<br />mbstring.internal_encoding = EUC-JP<br />mbstring.script_encoding = auto<br />mbstring.http_input = auto<br />mbstring.http_output = SJIS<br />mbstring.encoding_translation = On<br />mbstring.detect_order = auto<br />mbstring.substitute_character = none<br />mbstring.func_overload = 0<br />mbstring.strict_encoding = On<br />mbstring.strict_detection = On</pre><br /><br />次のようなテストスクリプトを用意します。<br /><pre class="code"><?php<br />phpinfo();<br />?></pre><br /><br />クエリ無しでブラウザからリクエストすると、phpinfo()の結果が表示されます。<br /><br />次のような、マルチバイトを含むクエリでリクエストします。<br /><pre class="code">http://.../phpinfo.php?a=はにほへといろは</pre><br />すると、サーバのCPU使用率が100%近い状態になり、そのままタイムアウトを迎えて500サーバエラーがブラウザに返されます。<br /><br />php.iniを次のように変更します。<br /><pre class="code">mbstring.http_input = pass</pre><br /><br />マルチバイトを含むクエリでリクエストすると、今度はphpinfo()の結果が表示されます。当然、$_GETは変換されていません。<br /><br />テストスクリプトを次のように変更します。<br /><pre class="code"><?php<br />mb_convert_variables(mb_internal_encoding(), 'auto', $_GET);<br />phpinfo();<br />?></pre><br /><br />マルチバイトを含むクエリでリクエストすると、サーバのCPU使用率が100%近い状態になり、そのままタイムアウトを迎えて次のようなエラーがブラウザに返されます。<br /><blockquote class="quote"><div class="title">引用</div><div class="content">Fatal error: Maximum execution time of 10 seconds exceeded in phpinfo.php on line 2</div></blockquote><br /><br />・この時のHTTP入力の文字エンコーディングはSJIS<br />・mb_convert_encoding()は問題なく使える<br />・SJISの文字列が入力され、かつ入力文字エンコーディングを'auto'に指定すると変換先が'SJIS','EUC_JP','UTF-8'のいずれの場合でも、mb_convert_variables()でタイムアウトする<br />ということがわかっています。<br /><br />マニュアルにはmb_convert_variables()の変換元文字エンコーディングについて'auto'を指定することは書かれていませんが、<br />・仮想PCにFreeBSD 6.1 i386とPHP 5.2.4をインストールした環境<br />・Windows XP Pro sp2にWIN32バイナリ版PHP 5.2.5の環境<br />では'auto'を指定しても問題なく動いています。<br /><br />また、仮想PCにFreeBSD i386の環境でソースからコンパイルしたPHP5の環境では、タイムアウトはしませんが、mbstring.http_input = auto等を有効にしても、enctype="multipart/form-data"を含むフォームからのHTTP入力は変換されないままになってしまいます。<br /><br />詳しくは調べていませんが、コンパイル時の指定でのコンパイラオプションを変えたり、(今回の指定ではCGI動作ですが)PHPをモジュール動作にしたりしても同様でした。PHP5.1.6でも同様な現象が発生していました。<br /><br />PHP4.4.4を実運用していますが、こちらは期待通りに動作しています。<br />スクリプト中で文字エンコーディングの変換をすれば回避できる話ですが、PHP4では何も問題なく楽にマルチバイトが扱えていたので、PHP5でうまくいかないのがくやしいところです。</div>
</td>
</tr>
</table>
<p id="toolbarbottom"> </p>
<p id="pagelinksbottom">ページ: 1</p>
<div id="bottomfix"></div>
<p id="actionlinks"></p>
<p class="locationbar">
• <a href="index.html">日本PHPユーザ会 掲示板</a> » <a href="forum-4.html">PHP 5</a> » FreeBSD(amd64/i386)とPHP5のマルチバイトで不具合
</p>
<p id="linkbar">
</p>
<p id="bottom">
日本PHPユーザ会 掲示板 は <a href="http://www.usebb.net">UseBB 1 フォーラムソフトウェア</a> を使用しています
</p>
<div id="bottom-shadow"></div>
</div>
</div>
</div>
</body>
</html>