さがITのほほん日記

ああ、それはマイクロソフトの仕様です。

技術情報

simplexml_load_file が使えなくなったので代わりに cURL

某大手レンタルサーバーで突如 simplexml_load_file が使えなくなった。

おそらく php.ini の設定で allow_url_fopen が Off にされたのでしょう。

急に変わると困るのよねぇ。。。と思いながらしょうがないので修正する。

以下の関数を入れて・・・・

function curl_get_contents( $url, $timeout = 60 ){
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_HEADER, false );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
    $result = curl_exec( $ch );
    curl_close( $ch );
    return $result;
}

その後はいつものように

$result = curl_get_contents( "http://www.toofactory.com/atom.xml", 120 );
$rssData = simplexml_load_string($result);

で取得可能。

参考元はこちらです。
ありがとうございました。


プルダウンメニューへの変換正規表現

メモ。

都道府県のプルダウンのような項目の多い文字列をプルダウンメニュータグに変換する正規表現。
秀丸エディタで使えます。

これを・・・・
------------------------------
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
------------------------------

のように変換
------------------------------
<option value="福岡県">福岡県</option>
<option value="佐賀県">佐賀県</option>
<option value="長崎県">長崎県</option>
<option value="熊本県">熊本県</option>
<option value="大分県">大分県</option>
<option value="宮崎県">宮崎県</option>
<option value="鹿児島県">鹿児島県</option>
------------------------------

検索:(.*)\n
置換:<option value="\1">\1</option>\n

簡単なんだけど毎回考えてしまうので・・・


【EC-CUBEカスタマイズ】商品検索フォームから商品コードで検索する

EC-CUBEの商品検索フォームに商品コードを入力しても検索できないことに今日気がついたのでカスタマイズしてみることにしました。

とりあえずやり方をメモ。


data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php の「vw_products_allclass」の中を以下のように書き換える。

変更前
"vw_products_allclass" => '
   (SELECT
        T2.product_id
        ,T1.product_code_min
        ,T1.product_code_max
        ,T1.price01_min
        ,T1.price01_max
        ,T1.price02_min
        ,T1.price02_max
        ,T1.stock_min
        ,T1.stock_max
        ,T1.stock_unlimited_min
        ,T1.stock_unlimited_max
        ,T2.del_flg
        ,T2.status
        ,T2.name
        ,T2.comment1
        ,T2.comment2
        ,T2.comment3
        ,T2.main_list_comment
        ,T2.main_image
        ,T2.main_list_image
        ,T2.product_flag
        ,T2.deliv_date_id
        ,T2.sale_limit
        ,T2.point_rate
        ,T2.sale_unlimited
        ,T2.create_date
        ,T2.deliv_fee
        ,T3.rank
        ,T4.rank AS category_rank
        ,T4.category_id
    FROM
        (
            (dtb_products AS T2 RIGHT JOIN
                (SELECT
                    product_id AS product_id_sub
                    ,MIN(product_code) AS product_code_min
                    ,MAX(product_code) AS product_code_max
                    ,MIN(price01) AS price01_min
                    ,MAX(price01) AS price01_max
                    ,MIN(price02) AS price02_min
                    ,MAX(price02) AS price02_max
                    ,MIN(stock) AS stock_min
                    ,MAX(stock) AS stock_max
                    ,MIN(stock_unlimited) AS stock_unlimited_min
                    ,MAX(stock_unlimited) AS stock_unlimited_max
                FROM dtb_products_class GROUP BY product_id
                ) AS T1 ON T1.product_id_sub = T2.product_id
            ) LEFT JOIN dtb_product_categories AS T3 ON T2.product_id = T3.product_id
        ) LEFT JOIN dtb_category AS T4 ON T3.category_id = T4.category_id
    ) ',

変更後
"vw_products_allclass" => '
   (SELECT
        T2.product_id
        ,T1.product_code  ←追加
        ,T1.product_code_min
        ,T1.product_code_max
        ,T1.price01_min
        ,T1.price01_max
        ,T1.price02_min
        ,T1.price02_max
        ,T1.stock_min
        ,T1.stock_max
        ,T1.stock_unlimited_min
        ,T1.stock_unlimited_max
        ,T2.del_flg
        ,T2.status
        ,T2.name
        ,T2.comment1
        ,T2.comment2
        ,T2.comment3
        ,T2.main_list_comment
        ,T2.main_image
        ,T2.main_list_image
        ,T2.product_flag
        ,T2.deliv_date_id
        ,T2.sale_limit
        ,T2.point_rate
        ,T2.sale_unlimited
        ,T2.create_date
        ,T2.deliv_fee
        ,T3.rank
        ,T4.rank AS category_rank
        ,T4.category_id
    FROM
        (
            (dtb_products AS T2 RIGHT JOIN
                (SELECT
                    product_id AS product_id_sub
                    ,MIN(product_code) AS product_code_min
                    ,MAX(product_code) AS product_code_max
                    ,MIN(price01) AS price01_min
                    ,MAX(price01) AS price01_max
                    ,MIN(price02) AS price02_min
                    ,MAX(price02) AS price02_max
                    ,MIN(stock) AS stock_min
                    ,MAX(stock) AS stock_max
                    ,MIN(stock_unlimited) AS stock_unlimited_min
                    ,MAX(stock_unlimited) AS stock_unlimited_max
                    ,product_code AS product_code  ←追加
                FROM dtb_products_class GROUP BY product_id
                ) AS T1 ON T1.product_id_sub = T2.product_id
            ) LEFT JOIN dtb_product_categories AS T3 ON T2.product_id = T3.product_id
        ) LEFT JOIN dtb_category AS T4 ON T3.category_id = T4.category_id
    ) ',


次に、data/class/pages/products/LC_Page_Products_List.php を以下のように書き換える。

変更前
// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
    if ( strlen($val) > 0 ){
        $where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
        $ret = SC_Utils_Ex::sfManualEscape($val);
        $arrval[] = "%$ret%";
        $arrval[] = "%$ret%";
    }
}

変更後
foreach ($names as $val) {
    if ( strlen($val) > 0 ){
        $where .= " AND ( name ILIKE ? OR comment3 ILIKE ? OR product_code ILIKE ?) ";
        $ret = SC_Utils_Ex::sfManualEscape($val);
        $arrval[] = "%$ret%";
        $arrval[] = "%$ret%";
        $arrval[] = "%$ret%";  ←追加
    }
}


これでできるはず。


MagpieRSS メモ

MagpieRSS で
<link rel="alternate" type="text/html" href="http://www.hogehoge/blog/post.html" />
の取得方法。

rss_parse.inc の200行目あたり

// $attrs = array_change_key_case($attrs, CASE_LOWER);
のコメントを外す
$attrs = array_change_key_case($attrs, CASE_LOWER);

これでOK。

http://trackback.blogsys.jp/livedoor/toofactory/51692842


Google Search-based Keyword Tool

http://www.google.com/sktool/

日本語が文字化けしますが一応通ってるみたい。

キーワードアドバイスツールに変わるツールとして使えそう。


1台のサーバーにバージョンの違う2つのMySQLをインストール

元々入っているMySQLがバージョンが古いので入れ替えたいが、管理ソフトなどで古いバージョンのMySQLを使っている場合、2つのMySQLを同時に動かすしかないですね。
そのメモ。

元々動いているMySQLはポート3306、新しいMySQLはポート3307で動かす。


# RPM等では無く、ソースをダウンロードすること。
/usr/local/src/ に mysql-5.0.45.tar.gz をダウンロード


# グループの作成
groupadd mysql5

# ユーザーの作成
adduser -g mysql5 -d /usr/local/var mysql5

# 解凍
cd /usr/local/src/
tar xvzf mysql-5.0.45.tar.gz
cd mysql-5.0.45

# インストール(オプションに注意)
./configure \
--prefix=/usr/local/mysql5 \
--with-unix-socket-path=/tmp/mysql5.sock \
--with-charset=utf8 \
--with-extra-charset=all \
--with-mysqld-user=mysql5 \
--with-tcp-port=3307

make
make install

# ディレクトリ移動
cd /usr/local/mysql5/

# 新しいmy.cnfの作成
vi /usr/local/mysql5/my.cnf
------------------------------------
[mysqld]
port=3307
datadir=/usr/local/var/
socket=/tmp/mysql5.sock
old_passwords=1
default-character-set = utf8

[mysql]
default-character-set = utf8
------------------------------------

# 初期化
/usr/local/mysql5/bin/mysql_install_db \
--user=mysql5 \
--port=3307 \
--datadir=/usr/local/var/ \
--socket=/tmp/mysql5.sock

# パーミッション変更
chown -R mysql5. /usr/local/mysql5

# 古いMySQLを停める
/etc/rc.d/init.d/mysqld stop

# 新しいMySQLを起動
/usr/local/mysql5/bin/mysqld_safe \
--user=mysql5 \
--port=3307 \
--datadir=/usr/local/var/ \
--socket=/tmp/mysql5.sock \
--pid-file=/usr/local/var/mysql5.pid &

# 古いMySQLを起動
/etc/rc.d/init.d/mysqld start

# 完了


# 停める
/usr/local/mysql5/bin/mysqladmin --port=3307 -u root shutdown

ポートを指定して接続
/usr/local/mysql5/bin/mysql --port=3307 -u root


古いMySQLを停めてからでないと起動しなかったりします。
後は起動時のオプション。この辺がハマリどころです。


thickbox.js で読み込むファイルに引数を送る

効果的にサブウインドウを見せるテクニック。

lightbox.js
http://www.huddletogether.com/projects/lightbox/

thickbox.js
http://jquery.com/demo/thickbox/

thickbox.js を使っていてPHPなどのプログラムに引数を送りたい場合、
普通に

hoge.php?TB_iframe=true&width=680&height=370&id=123

などとやっても「id」は送られない。
しょうがないので thickbox.js 自体を見ていく。

196行目あたりで

iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent'

というのを発見。
ここでiframeをで呼び出しているので、ここに引数を与えてやる。
少し上の方でクエリーの処理はしてくれているので楽でした。

iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"?id="+params['id']+"' id='TB_iframeContent'

これでOK。



GoogleMap 座標取得

GoogleMap 座標取得

元々自分のために作ったものですが、なんとなく公表します。

色々なサイトを参考にさせてもらいました。

ありがとうございました。


ファイル数を数えるコマンド

あるディレクトリ以下のファイル数を数えるコマンドメモ。

PHPファイルの数を出力
find /home/hoge/public_html/ -name '*.php' | wc -l

HTMLファイルの数を出力
find /home/hoge/public_html/ -name '*.html' | wc -l


mod_layout メモ(2)

mod_layout であるページや、あるディレクトリ内は非対応にさせたい場合。

LayoutIgnoreURI を使います。


LayoutHeader /home/hoge/public_html/header.html
などの下に
LayoutIgnoreURI hoge.html
と書きます。

特定のファイルに表示させたくない場合
LayoutIgnoreURI hoge.html

特定の拡張子のファイルに表示させたくない場合
LayoutIgnoreURI *.php
LayoutIgnoreURI *.cgi

特定のディレクトリ内は表示させたくない場合
LayoutIgnoreURI /hoge/*
この場合なぜかフルパスでは動かないようです。
バーチャルホスト等で使用する場合は、その DocumentRoot からのパスで書いたほうが幸せかもしれないです。



プロフィール
サイト内検索
楽天市場
佐賀のお天気
オススメ本
  • ライブドアブログ