<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Linuxを使ってみる</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/" />
    <link rel="self" type="application/atom+xml" href="http://syrup-factory.com/b/linux/atom.xml" />
    <id>tag:syrup-factory.com,2009-10-14:/b/linux//2</id>
    <updated>2010-11-29T03:02:48Z</updated>
    <subtitle>Linux周り、Open Source あれこれ By Syrup Factory</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.261</generator>

<entry>
    <title>xoops「どこでもSSL」導入と修正</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/11/xoops.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.90</id>

    <published>2010-11-29T02:43:54Z</published>
    <updated>2010-11-29T03:02:48Z</updated>

    <summary>xoopsで、ログインやマイアカウント、問い合わせページをSSL化。 &amp;nbsp...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="xoops" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>xoopsで、ログインやマイアカウント、問い合わせページをSSL化。</p>
<p>&nbsp;↓このモジュールを使ってみた。</p>
<p><a href="http://www.syrup-factory.com/mt4/mt.cgi?__mode=view&amp;_type=entry&amp;blog_id=2">どこでもSSL SSL/非SSL自動切替版</a>&nbsp;anywhereSSL</p>
<p>&nbsp;</p>
<p>●不具合が1点。</p>
<p>サイズの大きいページが出力されない。</p>
<p>→内部的に使用している preg_replace の長さ制限にひっかかっていた。</p>
<p>この関数のマニュアルページのコメントを参考に、include/buffering.inc.php を以下のように修正した。</p>
<p>（修正前）</p>
<p>&nbsp;&nbsp;&nbsp;$buf = preg_replace( $pattern, $replacement, $buf );</p>
<p>（修正後）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; $iSet= 0;&nbsp; // Count how many times we increase the limit<br />&nbsp;&nbsp;&nbsp;&nbsp; while( $iSet&lt; 10 ) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $sNewText= preg_replace( $pattern, $replacement, $buf );&nbsp; // Try to use PREG</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( preg_last_error()== PREG_BACKTRACK_LIMIT_ERROR ) {&nbsp; // Only check on backtrack limit failure<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ini_set( 'pcre.backtrack_limit', (int)ini_get( 'pcre.backtrack_limit' )+ 30000 );&nbsp; // Get current limit and increase<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $iSet++;&nbsp; // Do not overkill the server<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp; // No fail<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $buf = $sNewText;&nbsp; // On failure $sNewText would be NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; // Exit loop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br /></p>
<p>&nbsp;</p>
<p>●もう1点。表示上の不具合ではないが、SEOでNGなんだそうで。</p>
<p>Cookieに情報を書き込むため、初回アクセス時、同じURLにリダイレクトしている。<br />この時にステータスが302となるが、検索エンジンでは拾ってくれなくなる。</p>
<p>→ とりあえずリダイレクトを外してみた。運用後1ヶ月弱だが、今のところは不具合はない。</p>
<p>include/precheck.inc.php 下記、一番下、headerをコメント化。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*****************************************************************/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ログイン処理時のみ、XOOPS_ROOT_PATH/include/checklogin.phpをinclude<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*****************************************************************/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ($_SERVER['SCRIPT_FILENAME'] === XOOPS_ROOT_PATH .'/user.php') &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;($_SERVER['REQUEST_METHOD'] === 'POST') &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(!empty($_POST['op']) &amp;&amp; $_POST['op'] === 'login') ) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include_once( XOOPS_ROOT_PATH.'/include/checklogin.php' );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//header( "Location: " .$current_url );</p>
<p>&nbsp;</p>
<p>このモジュール、あまり情報がないようです。使われていないのか...？ xoops SSL化のスタンダードってなんだろう。<br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>EC-CUBE 特定商品を購入時は送料を無料にする</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/08/ec-cube.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.89</id>

    <published>2010-08-30T04:42:38Z</published>
    <updated>2010-08-30T05:01:58Z</updated>

    <summary>EC-CUBEで、特定商品を購入時は送料を無料にするロジックを組み込む。参考：E...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="EC-CUBE" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[EC-CUBEで、特定商品を購入時は送料を無料にするロジックを組み込む。<br /><br />参考：<br /><a href="http://web-karakuri.com/archives/858">EC-CUBEで送料無料 </a><br /><a href="http://www.happyquality.com/2008/12/19/525.htm"></a><a href="http://www.happyquality.com/2008/12/19/525.htm">[EC- CUBE]商品に送料無料（込）のフラグを設ける</a><br /> <div><br />考え方は1番目のサイトの通り。<br />送料無料対象商品のフラグには、dtb_products の deliv_fee を利用する。（将来拡張予定のフィールドだが、本サイトでは個別送料設定はないだろうと思われるため）<br />（2番目のサイトは、フラグのフィールドを新たに設けるやり方）<br /><br />管理画面のテンプレートは1番目のサイトの通りに変更。プログラム変更はナシ。（厳密には必須チェックしなければいけないが今回は見送り）<br /><br />ソース変更は、1番目サイトのID登録が必要なようなのであきらめ、2番目のサイトのコードを参考に修正する。<br /><br />●SC_Helper_DB_Ex.php<br /><br />1.function sfTotalCart(&amp;$objPage, $objCartSess, $arrInfo) <br /><br />(1)add行追加。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_total_pretax = 0;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 費用合計(税込み)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_total_tax = 0;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 消費税合計<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (USE_POINT === true) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_total_point = 0;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // ポイント合計<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_postage_flag = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // add：送料無料フラグ<br /><br />(2)del行削除、add行追加。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 商品ごとの合計金額<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $objPage-&gt;arrProductsClass[$cnt]['total_pretax'] = $objCartSess-&gt;getProductTotal($arrInfo, $arrCart[$i]['id']);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 送料の合計を計算する<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //$objPage-&gt;tpl_total_deliv_fee+= ($arrData['deliv_fee'] * $arrCart[$i]['quantity']);&nbsp; //del<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_total_deliv_fee = 0;&nbsp; //add<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //送料無料フラグを判定する add<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($arrData['deliv_fee'] &gt; 0) {&nbsp;&nbsp;&nbsp; //1：送料込み＝送料無料<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $objPage-&gt;tpl_postage_flag = 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br />2.function sfTotalConfirm($arrData, &amp;$objPage, &amp;$objCartSess, $arrInfo, $objCustomer = "") <br /><br />(1)del行削除<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //del<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 商品ごとの送料が有効の場合<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*if (OPTION_PRODUCT_DELIV_FEE == 1) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arrData['deliv_fee']+= $objCartSess-&gt;getAllProductsDelivFee();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<br /><br />(2)add行追加。<br />

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 送料無料条件が設定されている場合<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($arrInfo['free_rule'] &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 小計が無料条件を超えている場合<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($arrData['subtotal'] &gt;= $arrInfo['free_rule']) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arrData['deliv_fee'] = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //add<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 送料無料商品が含まれている場合<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($objPage-&gt;tpl_postage_flag &gt; 0) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $arrData['deliv_fee'] = 0;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br /><br />●ショップ画面<br />商品詳細画面と一覧画面で、deliv_fee == 1 で判定し、該当する場合は「この商品を購入の際は送料無料」のメッセージを表示する。<br />（カート画面、トップのオススメ一覧でも対応すればなおよし。今回は対象外）<br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>メンテナンス中画面を出す正しい作法:503を返す</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/08/503.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.88</id>

    <published>2010-08-03T00:35:15Z</published>
    <updated>2010-08-03T00:49:10Z</updated>

    <summary>サイトメンテナンス中は、メンテ中画面を単に表示しているだけだったが、ステータス5...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="環境設定" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[サイトメンテナンス中は、メンテ中画面を単に表示しているだけだったが、ステータス503を返しておくのがよいとのこと。<br /><br /><a href="http://web-tan.forum.impressrd.jp/e/2009/06/16/5880">メンテナンス中画面を出す正しい作法と.htaccessの書き方</a><br /><br /><pre><code>.htaccessに以下のように書けばOK。<br /><br />ErrorDocument 503 <span style="color: rgb(255, 102, 0);">/maintenance.html</span><br /><br />&lt;IfModule mod_rewrite.c&gt;<br />  RewriteEngine On<br />  RewriteCond %{REQUEST_URI} !=<span style="color: rgb(255, 102, 0);">/maintenance.html</span><br />  RewriteRule ^.*$ - [R=503,L]<br />&lt;/IfModule&gt;</code></pre><br />これは簡単。と適用してみると500エラーになってしまう。<br />エラーログには「RewriteRule: invalid HTTP response code for flag 'R'」と出ている。<br />調べてみると「RewriteRuleでR=503を指定するのは2.2系でしか使えない」だそうだ。上述のページのコメント欄に指摘があり、今回対象のサーバは使えないようだ...<br /><br /><a href="http://www.shifft.in/blog/development/maintenance-mode/">メンテナンス画面を表示させる方法(Apache 1.3対応版)</a><br /><br />上記の設定でようやくOK。<br /><br />●503を返す503.phpを作成。<br /><pre class="php" style="font-family: monospace;"><span style="color: rgb(0, 0, 0); font-weight: bold;">&lt;?php</span><br /><span style="color: rgb(153, 0, 0);">header</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 255);">'HTTP/1.0 503 Service Temporarily Unavailable'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(177, 177, 0);">include</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(153, 0, 0);">dirname</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0); font-weight: bold;">__FILE__</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">.</span> <span style="color: rgb(0, 0, 255);">'/index.html'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 0); font-weight: bold;">?&gt;</span></pre>●.htaccessの設定。<br /><br /><pre class="apache" style="font-family: monospace;"><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.css$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.js$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.jpg$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.gif$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.png$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_URI} !\.swf$<br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REMOTE_ADDR} !=192.168.0.1 <span style="color: rgb(173, 173, 173); font-style: italic;">#(管理者のIPアドレス)</span><br /><span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_FILENAME} !503.php<br /><span style="color: rgb(0, 0, 127);">RewriteRule</span> ^.*$ /maintenance/503.php [R,L]</pre><br />ほんの10分で済む予定が1時間かかってしまいました。。<br />]]>
        
    </content>
</entry>

<entry>
    <title>PHP Fatal error:  Call to undefined function spl_autoload_register()</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/06/xoopsshiori.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.87</id>

    <published>2010-06-17T21:44:16Z</published>
    <updated>2010-06-17T21:54:02Z</updated>

    <summary>xoopsのブックマークモジュール「Shiori」を入れたが動かない。管理メニュ...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="PHP全般" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="xoops" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[xoopsのブックマークモジュール「Shiori」を入れたが動かない。<br />管理メニュー動かすと画面が真っ白。<br />PHP Fatal error:&nbsp; Call to undefined function spl_autoload_register()... <br />この関数はphp5で使えるということで、4からバージョンアップしてみた。しかしやはり動かない。<br />このモジュールで同様な事例を探すが、特にない。phpinfoでsplも入っているし。<br /><br />マニュアルでは<br />「すべての登録済み __autoload 関数を配列で返します。
   autoload スタックが有効になっていない場合は、<b><tt>FALSE</tt></b>. が返されます。
   関数が何も登録されていない場合は、空の配列が返されます。」<br />FALSEが返ってきているから、スタックが有効になっていないらしい。有効にするには？と調べるが、なかなかヒットせず...<br /><br />そんなこんなでトライ＆エラーで、ようやく動きました。<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; spl_autoload_register('spl_autoload');<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; spl_autoload_register(array(__CLASS__, 'autoload'));<br /><br />1行目を追加することで、スタックが有効になったのか？<br />システムによってはこれが自動で実行されるようになっているから問題ないのか？<br />よく分からないが、便利なモジュールなんで動いてよかった。。<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>is_home()が効かない：ページタイプが変わる？</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/04/is-home.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.86</id>

    <published>2010-04-02T00:22:06Z</published>
    <updated>2010-04-05T22:20:01Z</updated>

    <summary>どう考えてもメインページなのに、is_home()でfalseが返ってくる。is...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="wordpress" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>どう考えてもメインページなのに、is_home()でfalseが返ってくる。is_archive()がtrue...</p>
<p>テンプレートのあちこちでページタイプを表示させてやっと分かった。</p>
<p>query_post()を使って、あるカテゴリ下の最新記事を取得していたのだが、これ以前ならhome、これ以降はarchiveとなってしまう。</p>
<p>なんじゃそりゃ。</p>
<p>もしやと思い、その後に空の条件でquery_post()を発行したらhomeに戻ってた。</p>
<p>外から使える関数でページタイプ変わってちゃいかんでしょーー！ 内部処理ダメダメ。。</p>
<p>※<span id="wp-version-message"><span class="b">WordPress 2.9</span><br /></span></p><p><br /></p><p>(追記2010/4/6）</p><p>条件をデフォルトに戻すのは以下になるらしい。<br /></p><pre><code class="firstChild lastChild"> query_posts($query_string);</code></pre><p><a href="http://blog.btmup.com/wordpress/query_posts-clear.html">query_posts() で指定した条件をクリアする方法</a></p><p>公開されていないグローバル変数を開発に使わなければ実用的にならないシステムっていうのもなんだかな...<br /><span id="wp-version-message"></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>画像カスタムフィールドをシステム全体で使う</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2010/01/mt-customfield.html" />
    <id>tag:syrup-factory.com,2010:/b/linux//2.85</id>

    <published>2010-01-27T05:06:38Z</published>
    <updated>2010-04-05T22:15:07Z</updated>

    <summary>MTのカスタムフィールドは便利。でもデータコピーとかがすんなりできなかったり、微...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[MTのカスタムフィールドは便利。でもデータコピーとかがすんなりできなかったり、微妙に好きではないのですが。<br /><br />とはいえ、便利さが勝って使ってしまう。<br />テキストフィールドなどは、「システム全体で使う」にしておけば、テスト・本番ブログの2本立てサイトにしている場合、テンプレートコピーの際にまるごとコピーできるので便利です。（ブログごとのカスタムフィールドだと、名称が異なってしまい、タグも異なったりする）<br /><br />画像のカスタムフィールドでは、システム全体が選べず大変不便でした。<br />しかしこれを力技で変更することに成功。<br />・phpMyAdminなどで、mt_fieldテーブルを開く。<br />・「field_blog_id」が、そのカスタムフィールドが使えるブログIDを示す。これを「ゼロ」にすれば、あら不思議。全体で使えるようになります。<br /><br />ただし！管理画面から選べないので、当然マニュアルにも記載されていないし、何かの不具合が起きる可能性もあります。ので、このようにする場合は自己責任でお願いします。当方は責任を負いかねます。<br /><br />しばらく使っている限りでは、記事作成、再構築等では問題なかったです。<br />ただ、カスタムフィールド自体の更新ができませんでした。名称と説明を変更したかっただけなのですが、なにやら必須項目が指定されていないとエラーがでました。なのでまたDBを開けて、直接修正。<br /><br />※MT4.2です。5系はどうなっているのか不明。<br />]]>
        
    </content>
</entry>

<entry>
    <title>MT：文末を含め全ての空白を削除するプラグイン</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2009/11/mtremoveblankall.html" />
    <id>tag:momomomomo.moo.jp,2009:/b/linux//2.84</id>

    <published>2009-11-06T11:09:22Z</published>
    <updated>2009-11-06T11:41:23Z</updated>

    <summary>「MTRemoveBlank プラグイン」は、ページ内のタグとタグの間のスペース...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[「<a href="http://bizcaz.com/archives/2007/09/09-174534.php">MTRemoveBlank プラグイン</a>」は、ページ内のタグとタグの間のスペースとタブを削除するプラグイン。便利に使わせていただいております。<br />これは文末1つだけ改行を残すのですが（ソースとして見やすくするためでしょう）、全ての改行を削除したい場面が出てきました。<br />なので、1行だけいじらせてもらいました。<br /><br /><a href="http://momomomomo.moo.jp/b/linux/mtplugin/RemoveBlankAll.zip">RemoveBlankAll</a><br /><br />pluginフォルダにuploadするだけです。<br />使い方は、MTRemoveBlankと同じです。余分なブランク(スペースやタブ)を公開時に削除したいテンプレートやその部分を囲みます。<br />※ブログ全体に対してタグ指定なしに自動的に削除するプラグインはありましたが、今回はファイルの一部だけでよかったので...<br /><br />ちなみに、全ての改行を削除したくなったある場面とは、<a href="http://hyper-text.org/archives/2007/10/ajax_search_mt.shtml">Ajaxを使ったMT内の高速検索</a>で対象となる出力ファイル作成時。改行があるとうまく動いてくれなかった。<br />これもちょっとjsを改造しようとしているので、また後日記事書こうと思います。<br />]]>
        
    </content>
</entry>

<entry>
    <title>EC-CUBE:テンプレートでSmartyの変数を参照する</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2009/10/ec-cubesmarty.html" />
    <id>tag:momomomomo.moo.jp,2009:/b/linux//2.83</id>

    <published>2009-10-14T06:54:57Z</published>
    <updated>2009-10-14T06:58:52Z</updated>

    <summary>EC-CUBEのテンプレートを修正する時、どんな変数が使えるのか、配列がどんな構...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="EC-CUBE" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[EC-CUBEのテンプレートを修正する時、どんな変数が使えるのか、配列がどんな構造か知りたい。<div>下記を書けば表示できる。</div><div><br /></div><div><div>&lt;!--{php}--&gt;</div><div>$arrOrder = $this-&gt;get_template_vars('arrOrder');</div><div>print_r($arrOrder);</div><div>&lt;!--{/php}--&gt;</div><div><br /></div><div>参照元：<a href="http://blog.aulta.net/2009/08/20/php-ec-cubeでテンプレート内からphpを呼び、smartyの変数を参/">[PHP] EC-CUBEでテンプレート内からPHPを呼び、Smartyの変数を参照する方法。</a></div></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>ダイナミックパブリッシングの罠</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2009/10/post.html" />
    <id>tag:momomomomo.moo.jp,2009:/b/linux//2.82</id>

    <published>2009-10-06T01:03:47Z</published>
    <updated>2009-10-06T01:07:55Z</updated>

    <summary>ごく普通にタグを書いたのに期待通り動かない。他のブログでは動いている通り書いたの...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[ごく普通にタグを書いたのに期待通り動かない。<div>他のブログでは動いている通り書いたのに動かない。</div><div>原因はダイナミックパブリッシングだったからでした。staticにしたらちゃんと動いた。</div><div>基本のMTのタグなのに、動かないってバグじゃないの？プラグインじゃあるまいし～</div><div>対象タグは MTSubCategories で、カテゴリ指定した場合。特定のカテゴリだけNG。機能するカテゴリもあるところがまたはまりポイントでした。がっかり。</div>]]>
        
    </content>
</entry>

<entry>
    <title>mod_auth_pgsql：Basic認証のユーザ情報にPostgreSQLを利用する</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/10/mod-auth-pgsqlbasicpostgresql.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.74</id>

    <published>2006-10-26T08:29:16Z</published>
    <updated>2009-07-15T07:09:37Z</updated>

    <summary>とあるディレクトリ以下のファイルへアクセスする際、ログインさせたい。 ディレクト...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>とあるディレクトリ以下のファイルへアクセスする際、ログインさせたい。<br />
ディレクトリ以下が静的なページなら、PHPで認証後そのページを読み込んで表示させる方法がある。<br />
あるいは拡張子phpにしておいて、先頭で認証ロジック呼ぶ。<br />
が、ファイルにはPDFもあるという。<br />
となると、思いつくのはBasic認証しかなく（いろいろ調べたけれど、他にはなかった）。</p>

<p>簡単に使うには .htaccess にBasic認証の記述をし、別途ユーザ（パスワード）ファイルを置く。<br />
今回、ユーザIDとパスワードのほかにも氏名等の情報も保持したいので、会員登録の要求があった場合、ユーザファイルに書き込む＆DBにもその他情報を書き込む、の2本立てかと思っていたのだが、調べるとBasic認証のユーザ情報をPostgreSQLに保持できる方法があった。<br />
Apacheのモジュールで「mod_auth_pgsql」というもの。</p>

<p><a href="http://www.giuseppetanzilli.it/mod_auth_pgsql/">http://www.giuseppetanzilli.it/mod_auth_pgsql/</a><br />
ローカルはApache2だったのでそれ用のtarを落としてきて解凍。インストールはDSOで、INSTALLに書いてあるそのままの手順でOKだった。</p>

<p>DBにはユーザテーブルを作っておく。（最低IDとパスワード）<br />
そして認証をかけたいディレクトリに.htaccessをおき（httpd.confに書いてもいい）、<br />
mod_auth_pgsql用の定義を書く。</p>

<p>AuthName "My PostgreSQL Authenticator"<br />
AuthType basic<br />
Auth_PG_host localhost<br />
Auth_PG_port 5432<br />
Auth_PG_user postgres<br />
Auth_PG_database www<br />
Auth_PG_pwd_table valid_users<br />
Auth_PG_uid_field user<br />
Auth_PG_pwd_field password<br />
&lt;LIMIT GET POST&gt;<br />
 require valid-user<br />
&lt;/LIMIT&gt;</p>

<p>まだ試していないが、ログ用のテーブルを作ればログもとれるし、一度認証が通った後にDBアクセスさせたくなければ Auth_PG_cache_passwords を On にすればいいそうだ。<br />
簡単に動いてかなり嬉しかった..</p>

<p>ただ、Basic認証なので（厳密な）ログアウトはできなくて「ブラウザをすべて閉じる」しかないのは欠点。これは仕方ない...</p>]]>
        
    </content>
</entry>

<entry>
    <title>ケータイ(モバイル)サイト：実機それぞれ...(2)</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/06/2.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.73</id>

    <published>2006-06-13T15:00:13Z</published>
    <updated>2009-07-15T07:09:36Z</updated>

    <summary>(例2)ログインできない AUのある機種で、ログインできない、という。 他のキャ...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="PHP全般" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>(例2)ログインできない</p>

<p>AUのある機種で、ログインできない、という。<br />
他のキャリアや、AUのほかの機種では問題なくログインできる。</p>

<p>これも試行、試行で....<br />
わかったことといえば</p>

<p>・POSTでhttps://〜 へ遷移 → NG<br />
・&lt;a href="https://〜"&gt;XXX で遷移 → NG</p>

<p>結局、遷移先に到達した時に session_id が変わってしまっていたことが原因だった。セッションIDをhiddenで渡したり、パラメタに明示しても、なので、まさか遷移先でそれが受け取られていないというのには、ほんっとうにこれにはやられた。<br />
AUのサーバを経由する時になにがしかの処理が入ってるのか、どうか....</p>

<p>PG内で header("location:https://〜"); とし、セッションIDをパラメタ（クエリ）に含めてやることで、やっとセッションIDが引き継がれた。</p>

<p>※他の&lt;a href="https://〜"&gt; は特に問題ないし、<br />
例によって原因は分からないのだが、追求はできませんのでここまで。</p>

<p>※あと、user agent でブラウザが<br />
UP.Browser/6.2.0.9.2 未満の場合はNGで、それ以上はOKだった。</p>

<p>また、この不具合が出る前、別のコーディングの時は UP.Browser/6.2.0.9.2以上の時はNGで 未満がOKというときもあった。...どういうコーディングだったかは、もはや覚えていないのであるが。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ケータイ(モバイル)サイト構築ではまる：実機それぞれ...</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/06/post-3.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.72</id>

    <published>2006-06-13T14:04:40Z</published>
    <updated>2009-07-15T07:09:36Z</updated>

    <summary>ある程度はＰＣだけでもテストできます。ケータイ(モバイル)サイト。 しかし、実機...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="PHP全般" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>ある程度はＰＣだけでもテストできます。ケータイ(モバイル)サイト。<br />
しかし、実機だと予想もつかないところでエラーが発生する。<br />
「同じキャリアでもこの機種だと大丈夫なのにあれはダメ」ということが普通に起こる...</p>

<p>（例1)おちる</p>

<p>メールに記載した、とあるＵＲＬにアクセスすると端末がおちる。ここでいう「おちる」は、勝手に電源が切れて立ち上がる、再起動。何回やっても、100%再起動。機種はVodafone V703SH。同じ3GでもV902Tは無問題。</p>

<p>https://〜 だったのが問題か？ いや、別のhttps://〜のURLは普通にアクセスできている。<br />
あれやこれやと試してみた。</p>

<p>・メール記載のURLをコピペしてブラウザから直接アクセス→NG。再起動<br />
・URLをhttpsでなくhttpに変更してブラウザからアクセス→OK。（httpsが悪いのか？）<br />
・注文キャンセルURL→OK。（→httpsが悪いわけではない）<br />
・テストページにURLへのリンクをはり、そこからアクセス→OK。（????リファラとかチェックしてるのか？）<br />
・メアドを変えたり、URLに他のパラメタをつけてみた→NG。再起動</p>

<p>謎です。<br />
とりあえず4番目の方式だとOKだったので、一枚画面をかませて処理することで決着。理由が分からないからすごーく気持ち悪いけど、機種固有のことなんでこれ以上は一般市民には追求不可能です。</p>

<p>#Voda再起動時に画面に「How Are You?」と出るんですが...<br />
#最悪に決まっとるだろうが、と10回以上心の中でつぶやきました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ケータイ(モバイル)サイト：SSLはベリサインだけ?!</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/06/ssl.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.71</id>

    <published>2006-06-13T13:51:44Z</published>
    <updated>2009-07-15T07:09:36Z</updated>

    <summary>SSL電子証明書を、ベリサインで発行していたのです、当初サーバでは。そこではケー...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="PHP全般" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>SSL電子証明書を、ベリサインで発行していたのです、当初サーバでは。そこではケータイからのアクセスにはなんら問題はなかった。https://〜でも。<br />
しかし、サーバ移転に伴い、ジオトラスト社のものに変更したら、、、https://〜はアクセス不可になってしまった。<br />
正確にはDocomoはアクセスできるが、「このサイトの安全性が確認できません。接続しますか」と必ず聞かれる。毎回必ず。<br />
Vodaｆｏｎｅは、「エラーが発生しました」となりＮＧ！ ＡＵもアクセスできず。</p>

<p>スタッフ間でいろいろと調べた結果、以下のような情報が。。</p>

<p>----------<br />
http://q.hatena.ne.jp/1124450440<br />
Geotrustは128bit鍵しか提供していませんので、鍵長128bitに対応していない携帯端末ではエラーになってしまいます。</p>

<p>ベリサインの証明書が堅実だといわれる理由は、他社が提供していない56bit（または40bit）鍵にも確実に対応している為だと思います。</p>

<p>PCサイトの場合はジオトラスト社などの証明書でも十分ですが、携帯サイトとなると56bit（または40bit）鍵を提供するベリサイン社を選択するのが堅実だと思います。<br />
----------</p>

<p>ということで、ベリサインを再度申し込み。で、無事に、どのキャリアからもアクセスできるようになりました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ケータイ(モバイル)サイト構築ではまる：文字化け</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/02/post-2.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.70</id>

    <published>2006-02-16T08:32:54Z</published>
    <updated>2009-07-15T07:09:36Z</updated>

    <summary>ケータイ(モバイル)サイトを本格的に開発し始めた。実機でテストするにつれ、いろい...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="PHP全般" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>ケータイ(モバイル)サイトを本格的に開発し始めた。実機でテストするにつれ、いろいろとつまづきが...<br />
まず王道、文字化け。</p>

<p>PC向けのサイトを、PHPスクリプト・Smartyファイル・outputのencoding 全て<br />
EUC-JPで作成していて、これはこれで何も問題はなかった。</p>

<p>＜php.ini＞<br />
mbstring.encoding = EUC-JP<br />
mbstring.http_input = auto<br />
mbstring.http_output = EUC-JP<br />
mbstring.internal_encoding = auto</p>

<p>ケータイサイトは同じサーバで、同じく内部エンコーディングはEUCで、入出力のみShift_JISとして開発。<br />
スクリプトの初期に</p>

<p>mb_http_output("SJIS");<br />
ob_start("mb_output_handler");</p>

<p>を指定し、ごく普通の表示ページは問題なし。<br />
しかし、inputなど、formの入力要素が出てきた時に文字化け。<br />
Smarty、HTML_QuickFormを使用していたため、この辺りに問題あるのか？とソースを追ってみたり。<br />
Smartyのoutput_filterで出力コンテンツをSJISにしてみたり、<br />
$_POSTをEUCやらSJISやら、いろいろと変換したり。<br />
しかし、NG。何をどうしても一度Submitした後のエラー表示でQuickFormがセットする inputのvalue値がEUCのまま...（他の表示部はSJIS）</p>

<p>最後の手段、PHPのMLに投げようとメールを書きかけ、phpinfo()をもう一度見てみると</p>

<p>「mbstring.encoding_translation None」</p>

<p>今まで気にしていなかった設定項目が。<br />
「入力される HTTP クエリに関して、 文字エンコーディング検出および内部文字エンコーディングへの変換を行う 透過的な文字エンコーディングフィルタを有効にします。 」</p>

<p>Onにして、Apache 再起動。すると、あっさりと文字化けは解決したのだった。脱力...</p>

<p>これは「他人に客観的に説明しているうちに解決」ということにしておく。</p>]]>
        
    </content>
</entry>

<entry>
    <title>open ssl を組み込み</title>
    <link rel="alternate" type="text/html" href="http://syrup-factory.com/b/linux/2006/02/open-ssl.html" />
    <id>tag:momomomomo.moo.jp,2006:/b/linux//2.69</id>

    <published>2006-02-16T08:23:12Z</published>
    <updated>2009-07-15T07:09:35Z</updated>

    <summary>ローカルPCのApacheにopen sslを組み込んだ。 特に問題なく完了した...</summary>
    <author>
        <name>ushi</name>
        
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://syrup-factory.com/b/linux/">
        <![CDATA[<p>ローカルPCのApacheにopen sslを組み込んだ。<br />
特に問題なく完了した。「PHP5徹底攻略 エキスパート編」の5章を参照した。</p>

<p>open sslはすでにはいっていたため、Apacheの再構築から。</p>

<p>（Apacheソースのディレクトリに移動後）<br />
$make clean<br />
$./configure --enable-so --enable-rewrite <strong>--enable-ssl --with-ssl</strong><br />
$make<br />
$su<br />
#make install</p>

<p>この後、サーバ証明書の作成。（本の通りなので略... そのうち必要性が出てきたら書くことにする）</p>]]>
        
    </content>
</entry>

</feed>

