ECCUBEの文字化け

サーバ移転や、試験環境などの構築で、文字化けが発生することがしばしばある。
データベース接続まわりを除いてみると、大切な記述が欠けている。

ファイル名: /data/class/SC_DbConn.php
65行付近

$this->conn = $objDbConn;
$this->conn->query("SET NAMES utf8");
$this->error_mail_to = DB_ERROR_MAIL_TO;
$this->error_mail_title = DB_ERROR_MAIL_SUBJECT;
$this->err_disp = $err_disp;
$this->dbFactory = SC_DB_DBFactory_Ex::getInstance();
$this->conn->query("SET NAMES utf8");

を追記すれば解決する。

※ この作業を行うタイミングが重要です。
インストールのどのタイミングで行うか、DB接続直後です。

注意
エンコード関連を変更した後は、キャッシュファイルのクリアを忘れるべからず。

解説
php.ini のエンコード関係は、あまり指定しないのがサーバー屋の流儀である。
その場合、データベースの読み書きは、サーバーのデフォルト・エンコードで行われる。

サーバーのエンコードは、
最近は、UTF-8が多くなってきたが、以前はEUCが主流だった。

DBのエンコードとPHPファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。

データベース汎用化モジュール

データベースを汎用化的概念で操作することに成功しました。

メリットは、ブログなどの小規模開発から、業務管理システムやECサイトなどの中規模開発程度まであってもあれば、データベース設計が不要になります。

また、開発の大半を占めるデータベースの

  • 読み込み
  • 登録
  • 更新
  • ソート抽出

の開発が半自動化されます。

デメリットは回避できる設計を施してありますので、フレームワークなどのように動作が 重くなることはございません。

phpにエラーがあるとブラウザに何も表示されない

慣れとは怖いものです。
phpにエラーがあるとブラウザが何も表示しないというか、「ファイルがありません」などと文句を言う。

php.ini を下記のように変更すればOK。

display_errors = On

今さら、こんなミスに引っかかるとは、初心忘れるべからず。

GDでサムネイル生成

<?php

$dir  = 'test/';     //画像格納フォルダ
$file = 'test.png';  //画像ファイル名
$max  = 200;         //サムネイルのサイズ

if (preg_match('/\.gif$/i', $file)) {
    $image = imagecreatefromgif($dir . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
    $image = imagecreatefromjpeg($dir . $file);
} elseif (preg_match('/\.png$/i', $file)) {
    $image = imagecreatefrompng($dir . $file);
}

$width  = imagesx($image);
$height = imagesy($image);

if ($width > $height) {
    if ($width > $max) {
    $new_width  = $max;
    $new_height = ($new_width / $width) * $height;
    } else {
    $new_width  = $width;
    $new_height = $height;
    }
} else {
    if ($height > $max) {
    $new_height = $max;
    $new_width  = ($new_height / $height) * $width;
    } else {
    $new_width  = $width;
    $new_height = $height;
    }
}

$new_image = imagecreatetruecolor($new_width, $new_height);

imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);      //アンチエイリアスなし
//imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  //アンチエイリアスあり

if (preg_match('/\.gif$/i', $file)) {
    imagegif($new_image, $dir . 'copy_of_' . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
    imagejpeg($new_image, $dir . 'copy_of_' . $file, 70);
} elseif (preg_match('/\.png$/i', $file)) {
    imagepng($new_image, $dir . 'copy_of_' . $file);
}

imagedestroy($image);
imagedestroy($new_image);

?>

[/php]

submitボタンでアラートボックスを表示

HTMLヘッダーへ記載

<SCRIPT type="text/JavaScript">
<!--
function kakunin(msg, url){ if(confirm(msg)){ location.href = url; } } 
//-->
</SCRIPT>

リンクタグ、submitへ記載

<INPUT type="submit" value="登録・更新" onClick="kakunin('この内容で登録しますか?', '/works/php_library/hudousan/hudousan_v.active/admin.php')">

グローバル変数とローカル変数

関数内で、「var」をつけるとローカル変数、
つけないとグローバル変数になる。

例:

xx = 5; // グローバル変数 xx に 5 を代入
yy = 5; // グローバル変数 yy に 5 を代入

func(); // 関数 func() を呼び出す

alert(“xx = ” + xx); // グローバル変数 xx を表示(5 が表示される)
alert(“yy = ” + yy); // グローバル変数 yy を表示(8 が表示される)

function func() {
var xx = 8; // ローカル変数 xx に 8 を代入
yy = 8; // グローバル変数 yy に 8 を代入
}

Flashの外部画像が更新されないのを回避する

読み込みファイル名が同じ場合、キャッシュがクリアされません。

例えば「move.swf」というファイルがあれば「」の部分を「」のように擬似的にパラメータみたいな感じにしてあげれば良いのです。

ソースを短くしたければ、date関数が簡単かも?

今日の残り時間を計算して表示

<html>
<head>
<script type="text/javascript">
<!--
function time() {

var now = new Date();
var hour = 23-now.getHours();
var min = 59-now.getMinutes();
var sec = 59-now.getSeconds();

document.getElementById("ptime").innerHTML = ""+hour+"時間"+min+"分"+sec+"秒";
window.setTimeout("time()", 500);

}

// -->
</script>
</head>
<body onload="time()">
<div id="ptime"></div>
</body>
</html>

格好良く別窓(GreyBox)

参考URL

http://orangoo.com/labs/GreyBox/
必要なファイルは本家からダウンロードすべし。
HTMLヘッダに書く

<script type=”text/javascript”>
var GB_ROOT_DIR = “./greybox/”;
</script>
<script type=”text/javascript” src=”greybox/AJS.js”></script>
<script type=”text/javascript” src=”greybox/AJS_fx.js”></script>
<script type=”text/javascript” src=”greybox/gb_scripts.js”></script>
<link rel=”stylesheet” href=”greybox/gb_styles.css” type=”text/css” media=”all”>

閉じるボタンを隠す

取り急ぎ、SCCで隠してしまうことにした。

Perl で Mysql

ひとつはPPMにCPANを登録する事。
メニューの「Edit」→「Reference」→「Repositories」にて「Name」は適当に、「Location」に「http://cpan.uwinnipeg.ca/PPMPackages/10xx/」と入力して「Add」ボタンをクリックして登録。
これでCPANに接続しする事ができ、CPANからもモジュールをダウンロードする事ができる。

ふたつ目はコマンドプロンプトから「perl -MCPAN -e shell」と入力。
これはCPANとコマンドで対話する事ができるシェルコマンド。
「cpan>」の後に「install DBD::mysql」と入力してモジュールをダウンロード&インストールするのだ。

レコードの検索

////////////////
// 比較演算子 //
////////////////

where フィールド名 = ‘値’ レコードが値と等しい場合
where フィールド名 <> ‘値’ レコードが値と等しくない場合
where フィールド名 > ‘値’ レコードが値よりも大きい場合
where フィールド名 >= ‘値’ レコードが値以上である場合
where フィールド名 < '値' レコードが値より小さい場合 where フィールド名 <= '値' レコードが値以下である場合 //////////////////// // その他の演算子 // //////////////////// where フィールド名 between '値1' and '値2' レコードが値1と値2の間である場合値1と値2も含む where フィールド名 in ('値1', '値2'...) レコードがいずれかの値である場合複数の値を指定できる where フィールド名 is null レコードがnull値である場合 where フィールド名 is not null レコードがnull値でない場合 where フィールド名 like '値%' 値から始まるレコードを検索前方一致 where フィールド名 like '%値%' 値を含むレコードを検索中間一致 where フィールド名 like '%値' 値で終わるレコードを検索後方一致 //////////////// // 論理演算子 // //////////////// where 条件1 and 条件2 条件1でありかつまた条件2である場合(論理積) where 条件1 or 条件2 条件1あるいは条件2である場合(論理和) where not (条件) 条件でない場合(論理否定)

郵便番号を住所変換する

DBは郵便サイトからダウンロード
http://www.post.japanpost.jp/zipcode/dl/kogaki.html

SQL文(1)
テーブル生成

CREATE TABLE mtb_zipcode (
jis varchar(10) NULL,
zip_old varchar(5) NULL,
zip varchar(7) NULL,
addr1_kana varchar(100) NULL,
addr2_kana varchar(100) NULL,
addr3_kana varchar(100) NULL,
addr1 varchar(100) NULL,
addr2 varchar(100) NULL,
addr3 varchar(100) NULL,
c1 int NULL,
c2 int NULL,
c3 int NULL,
c4 int NULL,
c5 int NULL,
c6 int NULL
)

SQL文(2)
データ挿入
vscファイルのエンコードを調整しておく

LOAD DATA LOCAL INFILE '/home/_DATABASE_BACKUP/KEN_ALL_UTF8.csv'
INTO TABLE `tb_zip_code`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'

動的URL→静的URL(htaccess)

「index.php?category=1」や「article.php?articleid=10」などといった動的ページの象徴ともいえるアドレスである。
これを、たとえば「category-1.html」や「article-10.html」と変換するには、「.htaccess」に次のように記述する。

http://www.zibaj.net/modules/xfsection/index.php?category=19
http://www.zibaj.net/modules/xfsection/article.php?articleid=41

といったものを

http://www.zibaj.net/modules/xfsection/category-19.html
http://www.zibaj.net/modules/xfsection/article-41.html

でアクセス可能にするのが目的です。

◆記述例

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1

文字を画像化する(Imagemagick)

当然のことですが、日本語を利用する場合、日本語対応フォントを利用します。

$text="あいうえおかきくけこ";
$org_fname="`元ファイル名";
$new_fname="新ファイル名";
$fontsize="30";
$x="40";
$y="270";
$color="white";

// 必要ならエンコード
//$text = mb_convert_encoding($text, 'UTF-8','auto');

$cmd = "convert -fill ".$color." -font kochi-gothic-subst.ttf -pointsize ".$fontsize." -annotate +".$x."+".$y." ".$text." img/".$org_fname." img/".$new_fname;

exec($cmd);

※ 元画像の指定位置に文字画像をのせます。

PHP でモンタージュ作成

Imagemagick の montage関数 を利用します。

複数の画像から複数画像のサムネイルを一つの画像として作成する。
$cmd=”montage -geometry 40×40+5+5 -tile 3×3 -background #ffffff -bordercolor #BBBBBB -border 2 -quality 75 ./ディレクトリ/*.jpg ./ディレクトリ/新ファイル名;

exec($cmd);

さらにトリミングする場合
$cmd=’montage -tile 2×3 -resize 160x -resize “x250<" -resize 50%% -gravity center -crop 105x105+0+0 -geometry 105x105+1+1 -background "#000000" -bordercolor "#BBBBBB" -border 0 -quality 100 ./ディレクトリ/*.jpg ./ディレクトリ/新ファイル名; exec($cmd); 解説 -resize 高さが指定値を超えているもののみ『比率を保持したまま高さを指定値』へ縮小する -resize 50%%で半分の大きさに縮小する -gravity centerで画像を中央に寄せる -crop 70x70+0+0で中央部分を切り抜き -geometry 70x70+10+10で70x70の土台にのせる

EC-CUBE ヴァージョン 2.3.4 のClass名が変

EC-CUBE ヴァージョン 2.3.4
同じバージョンでありながら、試験環境の最新のものと実稼動サーバーの仕様が違う。
w(°o°)w おおっ!!

レイアウトも全く同じになのに表示が大きく乱れる。

管理画面から編集できるソースではない場所に書かれているクラス名が違うのには驚いた。
統一性とか、管理体制に劣ることがまた立証されてしまった。
オープンソースだから仕方ない。

言い換えれば、「EC-CUBE Myバージョン」の完成度が上がっていくだけのことだ。

変数名に変数をつかう

「変数名に変数をつかう」
文型の方には理解しがたいかもしれません。
理数系の方は、普通にできる。
…知らなくても「できるはず」と思ってしまう。

答えは、
カンタン!

${‘hoge’.$i}

$i=”0″;
while($i <= 9){     ${'hoge'.$i}     $i ++; }[/php] $hoge0~$hoge9 ということですね!

ファイルの所有者がApacheになってしまう

ファイルの所有者がApache
パーミッションが644, 604, 640, 600
などで、書き換えができなくなるサーバーが多い。

chmod はセキュリティ保持のために許可されていないことも多い、
では、どうするか?

アップロードや生成したファイルを保存する直前に、

umask(0);

とするだけだ。

現在の「umask」を表示

$old = umask();
echo $old;

Formの入力文字の型指定

i-modeとez-webでは、istyle
vodafoneの過去機種ではmode

全角(デフォルト)
istyle=”1″ mode=”hiragana”

半角カナ
istyle=”2″ mode=”hankakukana”

半角英字
istyle=”3″ mode=”alphabet”

半角数字
istyle=”4″ mode=”numeric”

例:
<input type=”text” name=”aiueo” istyle=”4″ mode=”numeric”>

「画像ファイル”○○○”壊れているため、表示できませんでした。」と表示される?

Opera
 画像がないときの「×」

FireFox
 「画像ファイル”○○○”壊れているため、表示できませんでした。」

I.E.
 正常に表示される。

携帯からは、
 画像がないときの「×」

原因は、
画像処理モジュールファイルに、

Header(“Content-type: image/”.$qrcode_image_type);
と書かれていた。
「このページは、画像です。」と宣言しているのだから、
当然のエラーが計れていたに過ぎない。

予想はついていたが、信じがたい。
こんなもの、公開するなといいたくなる。

素人がオープンソースなどと言い公開しているものを流用した自分が情けない。
(;o;_;)o グスグス

携帯電話の個体番号取得方法

活用方法は、簡単ログインなど、個体番号で認証を自動化するときなど。

// 固体番号取得
if($env=="au"){
    $id = $_SERVER['HTTP_X_UP_SUBNO'];
}elseif($env=="docomo"){
    $id = $_SERVER['HTTP_X_DCMGUID'];
}elseif($env=="softbank"){
    $useragent=$_SERVER[HTTP_USER_AGENT];
    preg_match("/^.+\/SN([0-9a-zA-Z]+).*$/", $useragent, $match);
    $id = $match[1];
}
echo $id;

※ Docomoで個体番号を取得するには、a要素、form要素にutn属性を付ける。

_POST,_GET,_SERVER,_SESSION

// 利用方法は??

echo ‘<pre style=”text-align:left; color:blue;”>’;
echo ‘<div style=”font-weigh:bold;”>_GET</div>’;

var_dump($_GET);
echo '<div style="font-weigh:bold;">_POST</div>';
var_dump($_POST);
echo '<div style="font-weigh:bold;">_SESSION</div>';
var_dump($_SESSION);
echo '<div style="font-weigh:bold;">_SERVER</div>';
var_dump($_SERVER);

「$_GET, $_POST, $_SERVER, $_SESSION」を表示する。
それだけのことです。

文字列の型をチェック(半角数字編)

型をチェック
郵便番号、電話番号など…

全角ハイフンを半角ハイフンに変換

$zip = str_replace( "ー", "-", $zip);

ハイフンを削除

$zip = str_replace( "-", "", $zip);

文字数カウント

$len = mb_strlen($zip, "UTF-8″);
if($len != "7″){
$nbsp;$nbsp;$nbsp;$nbsp;$zip_error = "1″;
}

「全角はダメ、ハイフンはどうとか」文句(Error)を吐くなら、「変換して知らん振り」の方がスマートでしょ
( ̄ー ̄)ニヤリ

全角数字を半角数字に変換

$zip = mb_convert_kana($zip, "a", "UTF-8″);

mb_convert_kanaのオプション

オプション値 変換方法
r 「全角」英字を「半角」に変換
R 「半角」英字を「全角」に変換
n 「全角」数字を「半角」に変換
N 「半角」数字を「全角」に変換
a 「全角」英数字を「半角」
A 「半角」英数字を「全角」に変換
s 「全角」スペースを「半角」に変換
S 「半角」スペースを「全角」
k 「全角カタカナ」を「半角カタカナ」に変換
K 「半角カタカナ」を「全角カタカナ」
h 「全角ひらがな」を「半角カタカナ」に変換
H 「半角カタカナ」を「全角ひらがな」に変換
c 「全角カタカナ」を「全角ひらがな」に変換
C 「全角ひらがな」を「全角カタカナ」に変換
V 濁点付きの文字を一文字に変換

データの型CHECK(電話番号)

// 型をチェック

// 全角数字を半角数字に変換
$zip = mb_convert_kana($zip, "a", "UTF-8");
// 全角はダメとか文句(Error)を吐くなら、「変換して知らん振り」

// 全角ハイフンを半角ハイフンに変換
$zip = str_replace( "ー", "-", $zip);

// ハイフンを削除
$zip = str_replace( "-", "", $zip);

// 文字数カウント
$len = mb_strlen($zip, "UTF-8");
if($len != "7"){
$zip_error = "1";
}

アップロードエラーの戻り値

UPLOAD_ERR_OK 値: 0
エラー無し
ファイルアップロード成功

UPLOAD_ERR_INI_SIZE 値: 1
アップロードされたファイルは、php.iniのupload_max_filesizeディレクティブの値を超過している

UPLOAD_ERR_FORM_SIZE 値: 2
アップロードされたファイルは、HTMLフォームで指定された MAX_FILE_SIZEを超えている

UPLOAD_ERR_PARTIAL 値: 3
アップロードされたファイルは一部のみしかアップロードできてない
通信の問題とか、メモリフローしてない?

UPLOAD_ERR_NO_FILE 値: 4
ファイルはアップロードされなかった

UPLOAD_ERR_NO_TMP_DIR 値: 6
テンポラリフォルダがありません
PHP4.3.10とPHP 5.0.3で導入

UPLOAD_ERR_CANT_WRITE 値: 7
ディスクへの書き込みに失敗しましたよ
PHP 5.1.0で導入

UPLOAD_ERR_EXTENSION 値: 8
ファイルのアップロードが拡張モジュールによって停止された
PHP5.2.0で導入された

郵便番号から都道府県識別

http://yuusuke.info/
上2桁で識別できる

郵便番号上2桁と都道府県一覧

00,05,06,07,08,09 北 海 道
01 秋 田 県
02 岩 手 県
03 青 森 県
04 北 海 道
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 埼 玉 県
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 大 分 県
98 宮 崎 県
89 鹿児島県
90 沖 縄 県
91 福 井 県
92 石 川 県
93 富 山 県
94,95 新 潟 県
96,97 福 島 県
88 宮 城 県
99 山 形 県

MailAddress のドメイン(MXレコード)の存在確認

if($mode == "check"){
  $shop_mail1 = $_POST[shop_mail1];
  if($shop_mail1 == ""){
    $Email1="E-mailを入力してください.";
    $ERROR = "1";
  }elseif (!ereg("^[^@]+@[^.]+..+",$shop_mail1)) {
    $Email1="E-mailではないようです.";
    $ERROR = "1";
  }elseif(!preg_match("/^[a-zA-Z0-9_.-]+@([a-zA-Z0-9_.-]+)/", $shop_mail1,  $regs)){
    $Email1="利用できないでない文字が含まれています。";
    $ERROR = "1";
  }
  // メールアドレスのドメイン(MXレコード)の存在確認
  if(!checkdnsrr($regs[1],'MX') & !checkdnsrr($regs[1],'A')){
    $Email1="存在しないドメインです。";
    $ERROR = "1";
  }
}

パスワード(乱数)の生成

// 初期パスワードの生成
// パスワードの長さ設定
$len="6";
// 乱数生成シードを決定
srand((double)microtime() * 4423);
// パスワード文字列の配列を作成
$pwelemstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679!#%";
$pwelem = preg_split("//", $pwelemstr, 0, PREG_SPLIT_NO_EMPTY);
$password = "";
for($i=0; $i&lt;$len; $i++ ) {
// パスワード文字列を生成
$password .= $pwelem[array_rand($pwelem, 1)];
}
echo "password-&gt;".$password;

動的URLを静的URLにする

一言で言えば「URLの偽装」です。
httpd.conf に書くとこんな感じです。
.httaccess に書くときは中身だけを書きます

&lt;Directory "/var/www/vhosts/mint410.com/httpdocs"&gt;
    &lt;IfModule mod_rewrite.c&gt;
        RewriteCond %{HTTP_USER_AGENT} ^UP\.Browser [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} ^KDDI [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} SoftBank
        RewriteEngine on
        RewriteBase /
        RewriteRule ^/images/$ - [L]
        RewriteRule ^/uploadedimages/([0-9]+)/?([0-9A-Za-z,-_]+)$ /uploadedimages/$1 [L]
        RewriteRule ^/img/$ - [L]
        RewriteRule ^/js/$ - [L]
        RewriteRule ^([0-9A-Za-z]+)/$ /redirect.php?id=$1 [L]
        RewriteRule ^([0-9A-Za-z]+)$ /redirect22.php?id=$1 [L]
        RewriteRule ^([0-9]+)/c/$ /comment.php?id=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/p/$ /profile.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/f/$ /bookmark.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/g/$ /bookmarkR.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/([0-9]+)/?([0-9A-Za-z,-_]+)$ /blog.php?gid=$1&id=$2&$3 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/s([0-9]+)/$ /blog.php?gid=$1&id=s$2 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/$ /blog.php?gid=$1 [L]
    &lt;/IfModule&gt;
&lt;/Directory&gt;

EC-CUBEでRSSの日時を反映させる

EC-CUBEのRSSでは、日付けと日時が反映されないバグがあります。
バグというよりは、製作途中のようなソースコードなのですが、この機会に機能させてみましょう。

[対象ファイル1]
data/class/pages/rss/LC_Page_Rss.php

71行目付近の
「$this->timestamp = SC_Utils…」を削除します。

lfGetNewsという関数を丸ごと書き換えます。

[対象ファイル2]
data/Smarty/templates/default/rss/index.tpl

49行目あたりの「<!–{* <pubDate><!–{“r”|sf_mktime:$arrNews[cnt…」を削除
50行目あたりの「 <pubDate><!–{$arrNews[cnt].news_date|escape}–></pubDate>」を変更します。

詳細なソースコードの全文はこちらです。

虫眼鏡SEO(関連検索キーワード)」の解説

検索の際に上や下にそのワードに関連するワードが表示されますが、ヤフーの場合は横にあるアイコンがムシメガネのため、虫眼鏡検索(むしめがねけんさく)と呼ばれるようになりました。

もうすでにご存知の方も多いとは思いますが、実はこの部分ある方法で操作が可能で、専門会社が多数存在しています。

自然に出てくるものでは?と思われていますが、もうすでに一部のワードで、ある操作によって書き換えられている状態です。

今年2009年初め頃から広く知られるようになりましたが、この方法自体はもうすでに2年以上前からあり、結構見かける事が多かったように感じます。
一例あげると「SEO」と検索して、全く有名でもないSEO業者の名前が「SEO SEO専門会社SEORY」などのように表示されたりします。
※SEO専門会社SEORYは例ですので存在しません、念のため。

どのように表示するかは後述するとして、この虫眼鏡の場所に表示させる事によって何がいいのか。

例えば「おせち料理」を通販で探したいユーザーがいるとして、これを検索してもレシピや解説のサイトや店舗を構える専門店が上位にヒットし、なかなか通販できるサイトが見つかりません。
そんなときに虫眼鏡に「おせち料理 おせち通販SEORY.jp」とあれば多くのユーザーを、おせち通販SEORY.jpに誘導できます。
(当然ですが「おせち料理 おせち通販SEORY.jp」このワードで検索した状態で1位にいること前提です。このワードで上位でない場合は、「おせち料理 ●●●●●」で上位に表示されるようなワードを探し、検索した際に虫眼鏡に●●●●●が現れるよう操作します。)

これ、今までヤフーでは比較的簡単に、グーグルでは表示が難しいと言われています。なぜ違いが出るのか?
表示されるしくみ、まずはヤフーです。
予想通りというかやっぱりというか、とにかく2ワードで検索しまくる!
上の例にあったのでいえば「おせち料理 おせち通販SEORY.jp」でひたすら検索。
すると「おせち料理」だけで検索しても「おせち料理 おせち通販SEORY.jp」と表示されるようになります。
と、手順としてはそれでいいのですが、ヤフーも考えており同じIPアドレスで検索されてもカウントされません。
プロキシ変更などを行い、それらをすべて自動で行い大量に検索させます。

また、別の手としてポイントサイトを利用したりもしています。
よくそういったサイトでは「検索すると○ポイント!」などを見かけると思いますが、それを利用してIP分散させているようです。
(このへんの仕組みは詳しくはお調べ下さい)
「おせち料理」と検索される総回数に対して「おせち料理 おせち通販SEORY.jp」と検索される数がそれの40%~60%(推測)に達せば表示されるようになるようです。

次はグーグルですが、こちらは単純に検索数でカウントして表示される訳ではなく、ヤフーとは全く違うアルゴリズムのようです。
WEB上から「おせち料理」を記述した大量のサイトを分析し、そのページ内でよく使われているワードを特定、表示しているようです。

それぞれの特徴です。
ヤフー
短期間で表示可能ですが、毎日クエリを送り続けないと消えるのも早い。
グーグル
表示までに時間も手間もかかりますが、表示されるとなかなか消えない。

以上、SEOをまじめにコツコツと行っている方から見れば(自分含め)、どんなグレーな事かお解かりいただけるかと思います。
いつスパム判定でも受けてインデックス削除にもなりかねませんし、業者に支払う金額に対してそれほどの効果がないとの声もあります。
なにより検索エンジンを意図的に操作する行為ですので、オススメできる方法ではないことだけは確かです。

EC-CUBEでIEでSSLのエラー

EC-CUBEでIEでSSL接続した場合、どのページに飛んでもセキュリティ情報のアラームが毎回表示される場合の修正方法です。
「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。 保護されていない項目を表示しますか?」

次のページはSSL(https)なのに、http://○×□▽… というように、http:// でファイルや画像を読み込んでいませんか?

チェックボックスで折りたたみ

Google先生に聞いてみると、皆さんとても複雑難解なソースを書いているようです。
こんなにシンプルにできるのに…

●名入れ(315円)&lt;input type="checkbox" onClick="a1.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area1" style="display:none"&gt;
    名入れ名&lt;input type="text" name="" value=""&gt;
&lt;/div&gt;
&lt;br&gt;

●ギフト梱包(無料)&lt;input type="checkbox" onClick="a2.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area2" style="display:none"&gt;
    ギフトの種類&lt;select&gt;&lt;option&gt;1&lt;/option&gt;&lt;option&gt;2&lt;/option&gt;&lt;option&gt;3&lt;/option&gt;&lt;select&gt;&lt;br&gt;
    ギフトメッセージ&lt;input type="text" name="" value=""&gt;&lt;br&gt;
    ※全角48文字まで入力可能&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;

●のし&lt;input type="checkbox" onClick="a3.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area3" style="display:none"&gt;
    のしの種類&lt;select&gt;&lt;option&gt;1&lt;/option&gt;&lt;option&gt;2&lt;/option&gt;&lt;option&gt;3&lt;/option&gt;&lt;select&gt;&lt;br&gt;
    ギフトメッセージ&lt;input type="text" name="" value=""&gt;&lt;br&gt;
    ※全角10文字まで入力可能&lt;br&gt;
&lt;/div&gt;

&lt;script language="javascript"&gt;
a1=document.getElementById('area1').style
a2=document.getElementById('area2').style
a3=document.getElementById('area3').style
&lt;/script&gt;

≪実働サンプル≫

名入れ(315円)

ギフト梱包(無料)

のし

WordPressで日付に曜日を表示する

$kizi_id =  $post-&gt;ID;
// echo $kizi_id.'&lt;br&gt;';
// Config読込み
include $_SERVER[DOCUMENT_ROOT]."/wp-config.php";// MySQLに接続 ------------------
$db = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
//mysql_query("SET NAMES utf8″);
// DB指定(確認用)
if(!mysql_select_db(DB_NAME, $db)){
    // echo '&lt;div style="color:red;"&gt;メインデータベースに接続できません。&lt;/div&gt;';
}elseif(mysql_select_db(DB_NAME, $db)){
    // echo '&lt;div style="color:green;"&gt;DB指定OK!('.DB_NAME.')&lt;/div&gt;';
}
// &lt; EOF &gt; MySQLに接続 ------------------

$sql="SELECT * FROM `tech_posts` WHERE `ID` = '$kizi_id'";
$rs = mysql_query($sql,$db);
$item = mysql_fetch_assoc($rs);
// var_dump($item);
$date = $item[post_date];
list($date, $gomi) = explode(' ', $date);
// echo $date.'&lt;br&gt;';
list($year, $month, $mday) = explode('-', $date);
// echo $yy.'=='.$mm.'=='.$mday.'&lt;br&gt;';

//日付から曜日を判定する関数
function date2wday($year, $month, $mday) {
if($month == 1 || $month == 2) {
    $year--;
    $month += 12;
}
$wday = ($year + intval($year/4) - intval($year/100) + intval($year/400) +
                intval((13*$month+8)/5) + $mday) % 7;
    return $wday;
}
$wday = date2wday($year, $month, $mday);

$arr_wday = array("日", "月", "火", "水", "木", "金", "土");
$str_wday2 = $arr_wday[$wday];

$str_wday2 = $str_wday2 . "曜日";

// echo $str_wday2;

↑こういうことをしなくても、↓これでできる。

&lt;?php the_date("Y年 n月 j日 l"); ?&gt;

mail送信プログラムの例

// データベースに接続
$sql="SELECT * FROM `tech_options` WHERE `option_name` = 'admin_email'";
$rs = mysql_query($sql,$db);
$item = mysql_fetch_assoc($rs);

// メールタイトルを決める
$subject="お問い合わせ≪".$_POST[tit]."≫";

// 送信元メールアドレス
$from = $item[option_value];

// 送信先メールアドレス
$to= $item[option_value];

// 本文を整形する---------------------------------------------
$body = '
お名前:  '.$_POST[name].'
住所:   '.$_POST[zip].' '.$_POST[ken].' '.$_POST[add].'
メールアドレス:'.$_POST[mail].'
──────────────────────────────
■内容
'.$_POST[message].'

■家づくりについて
'.$_POST[hoge1].' '.$_POST[hoge2].' '.$_POST[hoge3].' '.$_POST[hoge4].' '.$_POST[hoge5].' 
'.$_POST[hoge6].' '.$_POST[hoge7].' '.$_POST[hoge8].'

■受け取りを希望する無料購読メール
'.$_POST[hoge11].' '.$_POST[hoge12].'
';
// (ここまで)本文を整形する---------------------------------------------

// エンコード対策
//	mb_internal_encoding("utf-8");
//	mb_language("japanese");

// 送信実行
mb_send_mail( $to, $subject, $body, "From: $from");

カスタムフィールドを抽出して条件分岐

カスタムフィールドの値により様々なアイコンを表示する。
コンナ感じかな?

<?php
    // echo post_custom('施工実績(ジャンル)');
    $hoge = post_custom('施工実績(ジャンル)');
    // echo $hoge;
    if($hoge == '新築'){
        $echoimg = 'icon_mini_new.png';
    }elseif($hoge == 'リフォーム'){
        $echoimg = 'icon_mini_rehome.png';
    }elseif($hoge == '外構・ミニハウス'){
        $echoimg = 'icon_mini_gaikou.png';
    }elseif($hoge == '店舗'){
        $echoimg = 'icon_mini_shop.png';
    }
?>
<img src="<?php bloginfo('template_directory'); ?>/images/<?php echo $echoimg; ?>">