[P2-php-svn] [784] expack:

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 1月 16日 (土) 05:56:23 JST


Revision: 784
          http://sourceforge.jp/projects/p2-php/svn/view?view=rev&revision=784
Author:   rsk
Date:     2010-01-16 05:56:23 +0900 (Sat, 16 Jan 2010)

Log Message:
-----------
expack:
- P2KeyValueStore_FunctionCache::invoke() に実行する関数名が
  "class::method" 形式の文字列で与えられたときの不具合を修正。
- ImageCache2の画像一覧で使う関数キャッシュ機構をPEAR Cache_DBから
  P2KeyValueStore_FunctionCache_Proxyに変更。
- 上記変更に伴い、不要になった lib/pear_hack ディレクトリを削除。

Modified Paths:
--------------
    p2ex/trunk/conf/conf.inc.php
    p2ex/trunk/conf/conf_ic2.inc.php
    p2ex/trunk/doc/ImageCache2/ic2_install.phps
    p2ex/trunk/ic2_manager.php
    p2ex/trunk/iv2.php
    p2ex/trunk/lib/P2KeyValueStore/FunctionCache/Proxy.php
    p2ex/trunk/lib/P2KeyValueStore/FunctionCache.php
    p2ex/trunk/lib/expack/ic2/templates/ic2mng.tpl.html
    p2ex/trunk/lib/expack/tgrep/view.inc.php
    p2ex/trunk/lib/expack/tgrep/view_k.inc.php

Removed Paths:
-------------
    p2ex/trunk/lib/pear_hack/


-------------- next part --------------
Modified: p2ex/trunk/conf/conf.inc.php
===================================================================
--- p2ex/trunk/conf/conf.inc.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/conf/conf.inc.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -304,6 +304,7 @@
     $_conf['cookie_db_path']    = $_conf['db_dir'] . '/p2_cookies.sqlite3';
     $_conf['post_db_path']      = $_conf['db_dir'] . '/p2_post_data.sqlite3';
     $_conf['hostcheck_db_path'] = $_conf['db_dir'] . '/p2_hostcheck_cache.sqlite3';
+    $_conf['iv2_cache_db_path'] = $_conf['db_dir'] . '/iv2_cache.sqlite3';
 
     // •â³
     if ($_conf['expack.use_pecl_http'] && !extension_loaded('http')) {

Modified: p2ex/trunk/conf/conf_ic2.inc.php
===================================================================
--- p2ex/trunk/conf/conf_ic2.inc.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/conf/conf_ic2.inc.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -14,10 +14,8 @@
 //  MySQL:       "mysql://username:password@localhost:3306/database"
 //  PostgreSQL:  "pgsql://username:password@localhost:5432/database"
 //  SQLite2:     "sqlite:///./cache/imgcache.sqlite"
-//  SQLite3:     "sqlite3:///./cache/imgcache.sqlite3"
 // ’1: username,password,database‚ÍŽÀÛ‚Ì‚à‚Ì‚Æ“Ç‚Ý‘Ö‚¦‚éB
 // ’2: MySQL,PosrgreSQL‚Å‚Í—\‚߃f[ƒ^ƒx[ƒX‚ðì‚Á‚Ä‚¨‚­B
-// ’3: SQlite3‚̃Tƒ|[ƒg‚ÍŽÀŒ±“I‚È‚à‚̂ŁA”ñ„§
 $_conf['expack.ic2.general.dsn'] = "";
 
 // DB‚ÅŽg‚¤ƒe[ƒuƒ‹–¼
@@ -65,24 +63,6 @@
 $_conf['expack.ic2.general.redirect'] = 1;
 
 // }}}
-// {{{ ƒf[ƒ^ƒLƒƒƒbƒVƒ…
-
-// ƒf[ƒ^‚ðƒLƒƒƒbƒVƒ…‚·‚邽‚߂̃e[ƒuƒ‹–¼
-$_conf['expack.ic2.cache.table'] = "datacache";
-
-// ƒLƒƒƒbƒVƒ…‚Ì—LŒøŠúŒÀi•bj
-// 1ŽžŠÔ=3600
-// 1“ú=86400
-// 1TŠÔ=604800
-$_conf['expack.ic2.cache.expires'] = 3600;
-
-// ƒLƒƒƒbƒVƒ…‚·‚éƒf[ƒ^‚̍őå—ʁiƒoƒCƒgj
-$_conf['expack.ic2.cache.highwater'] = 2048000;
-
-// ƒLƒƒƒbƒVƒ…‚µ‚½ƒf[ƒ^‚ªhighwater‚ð’´‚¦‚½‚Æ‚«A‚±‚Ì’l‚Ü‚ÅŒ¸‚ç‚·iƒoƒCƒgj
-$_conf['expack.ic2.cache.lowwater'] = 1536000;
-
-// }}}
 // {{{ ˆê——
 
 // ƒy[ƒWƒ^ƒCƒgƒ‹
@@ -96,9 +76,14 @@
 $_conf['expack.ic2.viewer.delete_src_not_exists'] = 0;
 
 // •\Ž¦—p‚É’²®‚µ‚½‰æ‘œî•ñ‚ðƒLƒƒƒbƒVƒ… (off:0;on:1)
-// ƒLƒƒƒbƒVƒ…‚Ì—LŒøŠúŒÀ‚Ȃǂ́uƒf[ƒ^ƒLƒƒƒbƒVƒ…v‚̍€‚Őݒè
 $_conf['expack.ic2.viewer.cache'] = 0;
 
+// ƒLƒƒƒbƒVƒ…‚Ì—LŒøŠúŒÀi•bj
+// 1ŽžŠÔ=3600
+// 1“ú=86400
+// 1TŠÔ=604800
+$_conf['expack.ic2.viewer.cache_lifetime'] = 3600;
+
 // d•¡‰æ‘œ‚ðÅ‰‚Ƀqƒbƒg‚·‚é1–‡‚¾‚¯•\Ž¦ (off:0;on:1)
 // ƒTƒuƒNƒGƒŠ‚ɑΉž‚µ‚Ä‚¢‚È‚¢MySQL 4.1–¢–ž‚Å—LŒø‚É‚·‚é‚ƃGƒ‰[‚ªo‚é
 $_conf['expack.ic2.viewer.unique'] = 0;

Modified: p2ex/trunk/doc/ImageCache2/ic2_install.phps
===================================================================
--- p2ex/trunk/doc/ImageCache2/ic2_install.phps	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/doc/ImageCache2/ic2_install.phps	2010-01-15 20:56:23 UTC (rev 784)
@@ -132,27 +132,6 @@
     'size, md5, mime'
 );
 
-// Žå‚ɉ摜ƒLƒƒƒbƒVƒ…ˆê——‚ÅŽg‚¤ƒf[ƒ^ƒLƒƒƒbƒVƒ…—pƒe[ƒuƒ‹
-$datacache_table_quoted = $db->quoteIdentifier($ini['Cache']['table']);
-$createTableSQL['datacache'] = <<<EOQ
-CREATE TABLE $datacache_table_quoted (
-    id         CHAR(32) NOT NULL,
-    cachegroup VARCHAR (127) NOT NULL,
-    cachedata  TEXT,
-    userdata   VARCHAR (255),
-    expires    INTEGER NOT NULL,
-    changed    INTEGER NOT NULL DEFAULT 0,
-    PRIMARY KEY (id, cachegroup)
-)$table_extra_defs;
-EOQ;
-
-// ƒf[ƒ^ƒLƒƒƒbƒVƒ…—pƒe[ƒuƒ‹‚̃Cƒ“ƒfƒbƒNƒXi—LŒøŠúŒÀj
-$createIndexSQL['datacache_expires'] = sprintf($format_createIndex,
-    $db->quoteIdentifier('idx_'.$ini['Cache']['table'].'_expires'),
-    $datacache_table_quoted,
-    'expires'
-);
-
 // ƒGƒ‰[ƒƒO—pƒe[ƒuƒ‹
 $ic2error_table_quoted = $db->quoteIdentifier($ini['General']['error_table']);
 $createTableSQL['ic2_error'] = <<<EOQ

Modified: p2ex/trunk/ic2_manager.php
===================================================================
--- p2ex/trunk/ic2_manager.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/ic2_manager.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -105,11 +105,14 @@
             break;
 
         case 'clearCache':
-            $result = $db->query('DELETE FROM ' . $db->quoteIdentifier($ini['Cache']['table']));
-            if (DB::isError($result)) {
-                $_info_msg_ht .= $result->getMessage();
-            } else {
-                $_info_msg_ht .= "<p>ƒe[ƒuƒ‹ {$ini['Cache']['table']} ‚ð‹ó‚É‚µ‚Ü‚µ‚½B</p>";
+            if (file_exists($_conf['iv2_cache_db_path'])) {
+                $kvs = P2KeyValueStore::getStore($_conf['iv2_cache_db_path'],
+                                                 P2KeyValueStore::CODEC_SERIALIZING);
+                if ($kvs->clear() === false) {
+                    $_info_msg_ht .= '<p>ˆê——•\Ž¦—p‚̃f[ƒ^ƒLƒƒƒbƒVƒ…‚ðÁ‹Ž‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B</p>';
+                } else {
+                    $_info_msg_ht .= '<p>ˆê——•\Ž¦—p‚̃f[ƒ^ƒLƒƒƒbƒVƒ…‚ðÁ‹Ž‚µ‚Ü‚µ‚½B</p>';
+                }
             }
             $result_files = P2Util::garbageCollection($flexy->options['compileDir'], -1, '', '', TRUE);
             $removed_files = $result_files['successed'];
@@ -140,21 +143,24 @@
             break;
 
         case 'vacuumDB':
+            // SQLite2 ‚̉摜ƒLƒƒƒbƒVƒ…ƒf[ƒ^ƒx[ƒX‚ðVACUUM
             if ($db->dsn['phptype'] == 'sqlite') {
-                $db_file = $db->dsn['database'];
-                $size_b = filesize($db_file);
                 $result = $db->query('VACUUM');
                 if (DB::isError($result)) {
                     $_info_msg_ht .= $result->getMessage();
                 } else {
-                    clearstatcache();
-                    $size_a = filesize($db_file);
-                    $_info_msg_ht .= sprintf('<p>VACUUMŽÀsAƒtƒ@ƒCƒ‹ƒTƒCƒY: %s ¨ %s (-%s)',
-                        number_format($size_b),
-                        number_format($size_a),
-                        number_format($size_b - $size_a));
+                $_info_msg_ht .= '<p>‰æ‘œƒf[ƒ^ƒx[ƒX‚𐮗‚µ‚Ü‚µ‚½B</p>';
                 }
             }
+
+            // SQLite3 ‚̈ꗗ•\Ž¦—pƒf[ƒ^ƒLƒƒƒbƒVƒ…‚ðVACUUM
+            if (file_exists($_conf['iv2_cache_db_path'])) {
+                $kvs = P2KeyValueStore::getStore($_conf['iv2_cache_db_path'],
+                                                 P2KeyValueStore::CODEC_SERIALIZING);
+                $kvs->vacuum();
+                unset($kvs);
+                $_info_msg_ht .= '<p>ˆê——•\Ž¦—p‚̃f[ƒ^ƒLƒƒƒbƒVƒ…‚𐮗‚µ‚Ü‚µ‚½B</p>';
+            }
             break;
 
         default:
@@ -172,9 +178,6 @@
 $flexy->setData('skin', $skin_en);
 $flexy->setData('php_self', $_SERVER['SCRIPT_NAME']);
 $flexy->setData('info_msg', $_info_msg_ht);
-if ($db->dsn['phptype'] == 'sqlite') {
-    $flexy->setData('isSQLite', TRUE);
-}
 $flexy->setData('pc', !$_conf['ktai']);
 $flexy->setData('iphone', $_conf['iphone']);
 $flexy->setData('doctype', $_conf['doctype']);

Modified: p2ex/trunk/iv2.php
===================================================================
--- p2ex/trunk/iv2.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/iv2.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -169,57 +169,45 @@
 $thumb = new IC2_Thumbnailer(IC2_Thumbnailer::SIZE_DEFAULT);
 
 if ($ini['Viewer']['cache']) {
-    // ƒf[ƒ^ƒLƒƒƒbƒVƒ…‚É‚ÍCache_Container_db(Cache 1.5.4)‚ðƒnƒbƒN‚µ‚ÄMySQLˆÈŠO‚É‚à‘Ήž‚³‚¹A
-    // ƒRƒ“ƒXƒgƒ‰ƒNƒ^‚ªDB_xxx(DB_mysql‚È‚Ç)‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽó‚¯Žæ‚ê‚é‚悤‚É‚µ‚½‚à‚Ì‚ðŽg‚¤B
-    // iƒtƒ@ƒCƒ‹–¼EƒNƒ‰ƒX–¼‚Í“¯‚¶‚ŁAinclude_path‚𒲐®‚µ‚Ä
-    //   ƒIƒŠƒWƒiƒ‹‚ÌCache/Container/db.php‚Ì‘ã‚í‚è‚É‚·‚éj
-    $cache_options = array(
-        'dsn'           => $ini['General']['dsn'],
-        'cache_table'   => $ini['Cache']['table'],
-        'highwater'     => (int)$ini['Cache']['highwater'],
-        'lowwater'      => (int)$ini['Cache']['lowwater'],
-        'db' => $db
-    );
-    $cache = new Cache_Function('db', $cache_options, (int)$ini['Cache']['expires']);
-    // —LŒøŠúŒÀØ‚êƒLƒƒƒbƒVƒ…‚̃K[ƒxƒbƒWƒRƒŒƒNƒVƒ‡ƒ“‚È‚Ç
-    if (isset($_GET['cache_clean'])) {
-        $cache_clean = $_GET['cache_clean'];
-    } elseif (isset($_POST['cache_clean'])) {
-        $cache_clean = $_POST['cache_clean'];
+    $kvs = P2KeyValueStore::getStore($_conf['iv2_cache_db_path'],
+                                     P2KeyValueStore::CODEC_SERIALIZING);
+    $cache_lifetime = (int)$ini['Viewer']['cache_lifetime'];
+    if (array_key_exists('cache_clean', $_REQUEST)) {
+        $cache_clear = $_REQUEST['cache_clean'];
     } else {
-        $cache_clean = false;
+        $cache_clear = false;
     }
-    switch ($cache_clean) {
-        // ƒLƒƒƒbƒVƒ…‚ð‘Síœ
-        case 'all':
-            $sql = sprintf('DELETE FROM %s', $db->quoteIdentifier($ini['Cache']['table']));
-            $result = $db->query($sql);
+    $do_vacuum = false;
+
+    if ($cache_clear == 'all') {
+        $kvs->clear();
+        $do_vacuum = true;
+    } elseif ($cache_clear == 'gc') {
+        $kvs->gc($cache_lifetime);
+        $do_vacuum = true;
+    }
+
+    if ($do_vacuum) {
+        // ƒLƒƒƒbƒVƒ…‚ðVACUUM
+        
+        // SQLite‚È‚çVACUUM‚ðŽÀs
+        if ($db_class == 'db_sqlite') {
+            $result = $db->query('VACUUM');
             if (DB::isError($result)) {
                 p2die($result->getMessage());
             }
-            $vacuumdb = true;
-            break;
-        // ‹­§“I‚ɃK[ƒxƒbƒWƒRƒŒƒNƒVƒ‡ƒ“
-        case 'gc':
-            $cache->garbageCollection(true);
-            $vacuumdb = true;
-            break;
-        // gc_probability(ƒfƒtƒHƒ‹ƒg‚Í1)/100‚ÌŠm—¦‚ŃK[ƒxƒbƒWƒRƒŒƒNƒVƒ‡ƒ“
-        default:
-            // $cache->gc_probability = 1;
-            $cache->garbageCollection();
-            $vacuumdb = false;
-    }
-    // SQLite‚È‚çVACUUM‚ðŽÀsiPostgreSQL‚Í•’Êcron‚Åvacuumdb‚·‚é‚Ì‚Å‚±‚±‚Å‚Í‚µ‚È‚¢j
-    if ($vacuumdb && $db_class == 'db_sqlite') {
-        $result = $db->query('VACUUM');
-        if (DB::isError($result)) {
-            p2die($result->getMessage());
         }
     }
-    $enable_cache = true;
+
+    $cache = new P2KeyValueStore_FunctionCache($kvs);
+    $cache->setLifeTime($cache_lifetime);
+    $imageInfo_getExtraInfo = $cache->getProxy('IC2_ImageInfo::getExtraInfo');
+    $imageInfo_getExifData = $cache->getProxy('IC2_ImageInfo::getExifData');
+    $editForm_imgManager = $cache->getProxy('IC2_EditForm::imgManager');
+
+    $use_cache = true;
 } else {
-    $enable_cache = false;
+    $use_cache = false;
 }
 
 // }}}
@@ -808,13 +796,13 @@
         unset($img['rank'], $img['memo']);
 
         // •\Ž¦—p•Ï”‚ðÝ’è
-        if ($enable_cache) {
-            $add = $cache->call('IC2_ImageInfo::getExtraInfo', $img);
+        if ($use_cache) {
+            $add = $imageInfo_getExtraInfo->invoke($img);
             if ($mode == 1) {
                 $chk = IC2_EditForm::imgChecker($img); // ”äŠr“IŒy‚¢‚̂ŃLƒƒƒbƒVƒ…‚µ‚È‚¢
                 $add += $chk;
             } elseif ($mode == 2) {
-                $mng = $cache->call('IC2_EditForm::imgManager', $img, $status);
+                $mng = $editForm_imgManager->invoke($img, $status);
                 $add += $mng;
             }
         } else {
@@ -859,7 +847,11 @@
 
         // Exifî•ñ‚ðŽæ“¾
         if ($show_exif && file_exists($add['src']) && $img['mime'] == 'image/jpeg') {
-            $item['exif'] = $enable_cache ? $cache->call('IC2_ImageInfo::getExifData', $add['src']) : IC2_ImageInfo::getExifData($add['src']);
+            if ($use_cache) {
+                $item['exif'] = $imageInfo_getExifData->invoke($add['src']);
+            } else {
+                $item['exif'] = IC2_ImageInfo::getExifData($add['src']);
+            }
         } else {
             $item['exif'] = null;
         }

Modified: p2ex/trunk/lib/P2KeyValueStore/FunctionCache/Proxy.php
===================================================================
--- p2ex/trunk/lib/P2KeyValueStore/FunctionCache/Proxy.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/lib/P2KeyValueStore/FunctionCache/Proxy.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -28,8 +28,13 @@
         if (!is_callable($function)) {
             throw new InvalidArgumentException('Non-callable value was given');
         }
+
         $this->_cache = $cache;
-        $this->_function = $function;
+        if (is_string($function) && strpos($function, '::') !== false) {
+            $this->_function = explode('::', $function, 2);
+        } else {
+            $this->_function = $function;
+        }
         $this->_prependedParameters = array();
         $this->_appendedParameters = array();
         $this->_lifeTime = -1;

Modified: p2ex/trunk/lib/P2KeyValueStore/FunctionCache.php
===================================================================
--- p2ex/trunk/lib/P2KeyValueStore/FunctionCache.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/lib/P2KeyValueStore/FunctionCache.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -58,6 +58,9 @@
         // ŠÖ”–¼
         if (is_string($function)) {
             $name = $function;
+            if (strpos($function, '::') !== false) {
+                $function = explode('::', $function, 2);
+            }
         } elseif (is_object($function)) {
             $name = get_class($function) . '->__invoke';
         } elseif (is_object($function[0])) {

Modified: p2ex/trunk/lib/expack/ic2/templates/ic2mng.tpl.html
===================================================================
--- p2ex/trunk/lib/expack/ic2/templates/ic2mng.tpl.html	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/lib/expack/ic2/templates/ic2mng.tpl.html	2010-01-15 20:56:23 UTC (rev 784)
@@ -84,9 +84,9 @@
 		[<a href="ic2_viewtable.php?table=blacklist#footer" target="read">ƒuƒ‰ƒbƒNƒŠƒXƒg‚ðŒ©‚é</a>]
 	</div>
 
-	<div flexy:if="isSQLite">
+	<div>
 		<input type="radio" name="action" id="action_vacuumDB" value="vacuumDB" onclick="dropZeroOptions(false)" />
-		<label for="action_vacuumDB">ƒf[ƒ^ƒx[ƒX‚𐮗‚·‚éiSQLite‚̂݁j</label>
+		<label for="action_vacuumDB">ƒf[ƒ^ƒx[ƒX‚𐮗‚·‚é</label>
 		<!-- VACUUM‚ðŽÀs -->
 	</div>
 

Modified: p2ex/trunk/lib/expack/tgrep/view.inc.php
===================================================================
--- p2ex/trunk/lib/expack/tgrep/view.inc.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/lib/expack/tgrep/view.inc.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -79,7 +79,7 @@
     <li>2‚–ڈȍ~‚̃L[ƒ[ƒh‚Å“ª‚É&quot;-&quot;‚ð‚‚¯‚é‚ƁA‚»‚ê‚ðŠÜ‚Ü‚È‚¢‚à‚Ì‚ª’Šo‚³‚ê‚Ü‚·B</li>
     <li>&quot; ‚Ü‚½‚Í &#39; ‚ň͂܂ꂽ•”•ª‚̓Xƒy[ƒX‚ª“ü‚Á‚Ä‚¢‚Ä‚àˆê‚‚̃L[ƒ[ƒh‚Æ‚µ‚Ĉµ‚¢‚Ü‚·B</li>
     <li>ƒL[ƒ[ƒh‚Ì‘SŠp”¼ŠpA‘啶Žš¬•¶Žš‚Í–³Ž‹‚³‚ê‚Ü‚·B</li>
-    <li>ƒf[ƒ^ƒx[ƒX‚̍XV•p“x‚Í3ŽžŠÔ‚É1‰ñ‚ŁAƒŒƒX”E¨‚¢EŠˆ”­‚³‚͍XVŽž“_‚Å‚Ì’l‚Å‚·B</li>
+    <li>ƒf[ƒ^ƒx[ƒX‚̍XV•p“x‚Í1ŽžŠÔ‚É1‰ñ‚ŁAƒŒƒX”E¨‚¢EŠˆ”­‚³‚͍XVŽž“_‚Å‚Ì’l‚Å‚·B</li>
 </uL>
 </div>
 <?php } ?>

Modified: p2ex/trunk/lib/expack/tgrep/view_k.inc.php
===================================================================
--- p2ex/trunk/lib/expack/tgrep/view_k.inc.php	2010-01-15 19:28:32 UTC (rev 783)
+++ p2ex/trunk/lib/expack/tgrep/view_k.inc.php	2010-01-15 20:56:23 UTC (rev 784)
@@ -40,7 +40,7 @@
 <li>2‚–ڈȍ~‚Ì·°Ü°ÄÞ‚Å“ª‚É&quot;-&quot;‚ð‚‚¯‚é‚Ƥ‚»‚ê‚ðŠÜ‚Ü‚È‚¢‚à‚Ì‚ª’Šo‚³‚ê‚Ü‚·¡</li>
 <li>&quot; ‚Ü‚½‚Í &#39; ‚ň͂܂ꂽ•”•ª‚ͽÍß°½‚ª“ü‚Á‚Ä‚¢‚Ä‚àˆê‚‚̷°Ü°ÄÞ‚Æ‚µ‚Ĉµ‚¢‚Ü‚·¡</li>
 <li>·°Ü°ÄÞ‚Ì‘SŠp”¼Šp¤‘啶Žš¬•¶Žš‚Í–³Ž‹‚³‚ê‚Ü‚·¡</li>
-<li>ÃÞ°ÀÍÞ°½‚̍XV•p“x‚Í3ŽžŠÔ‚É1‰ñ‚Ťڽ”¥¨‚¢¥Šˆ”­‚³‚͍XVŽž“_‚Å‚Ì’l‚Å‚·¡</li>
+<li>ÃÞ°ÀÍÞ°½‚̍XV•p“x‚Í1ŽžŠÔ‚É1‰ñ‚Ťڽ”¥¨‚¢¥Šˆ”­‚³‚͍XVŽž“_‚Å‚Ì’l‚Å‚·¡</li>
 </uL>
 <?php } ?>
 <?php if ($errors) { ?>



P2-php-svn メーリングリストの案内
Back to archive index