作業前、画像が表示されない。
画像URLはDocument_Rootまでしかかかれていないので、ソースファイルが壊れているようだ。
投稿者: hashimoto
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ファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。
大容量のDBインポート
「アップロードしようとしたファイルが大きすぎるようです」とエラー場出る場合
「php.ini」の以下の設定を変更することに!
memory_limit =8M
post_max_size =8M
upload_max_filesize =8M
wordpress_メディア・アップロードの設定
別ウインドウを閉じる
<a href="" onClick="window.close()">作ったウィンドウを閉じる</A>
パターンマッチ
// preg_match の場合 if (preg_match("/[a-z]+/i",$str)) { echo "マッチしました"; }
LightBoxの表示位置を変更する
「lightbox.js」の231行目あたり
var lightboxTop = arrayPageScroll[1] + (document.viewport.getHeight() / <strong><span style="color: #ff0000;">10</span></strong>);
の数値を変更すればOK!
数値が小さいほど下に表示されるようだ。
phpBBオフィシャル
http://www.phpbb.com/
WP-Cumulus を導入
ファイル・アップロード・モジュール
「jpg、gif、png」などの画像は、SMLの3サイズで自動保存されます。
動画ファイルやCSVファイルなども、利用アップロード可能なモジュールです。
データベース汎用化モジュール
データベースを汎用化的概念で操作することに成功しました。
メリットは、ブログなどの小規模開発から、業務管理システムやECサイトなどの中規模開発程度まであってもあれば、データベース設計が不要になります。
また、開発の大半を占めるデータベースの
- 読み込み
- 登録
- 更新
- ソート抽出
の開発が半自動化されます。
デメリットは回避できる設計を施してありますので、フレームワークなどのように動作が 重くなることはございません。
複合階層ユーザー管理モジュール
WebMaster、Shop、EndUser の3階層の新規登録、プロフィール管理、ログイン管理をモジュール化して保有しております。
これにより、開発時間の大幅な短縮が可能となっております。
子ウィンドウから、親ウィンドウをリロード
<input type="submit" value=" 更 新 " <span style="color: #3366ff;">onclick="window.opener.location.reload();</span>">
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]
別窓を開く
<a href="FILENAME.php" onclick=" window.open('FILENAME.php', '_blank', 'width=400,height=600,scrollbars=yes'); return false;">LINK_NAME</a>
別窓を閉じる
<a href="javascript:window.close();">閉じる</a>
PukiWiki 公式サイト
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')">
「void(0)」ってなんだ!
リンクさせたくない場合に使う。
アラート表示とか
例:
<a href="javascript:void(0);">
グローバル変数とローカル変数
関数内で、「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 を代入
}
オブジェクトが持つ属性の一覧を表示
for (i in navigator) { document.write(i, ""); }
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>
マウスオーバーでボタン画像を変える。
俗に言う「ろ~るお~ば~」ですがな。
<img alt="Sample" width="100" height="100" src="元画像URL" onmouseover="this.src='変更画像URL';" onmouseout="this.src='元画像URL';">
この方法は素人さん向けです。
プロはCSSで実装しますので…
格好良く別窓(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で隠してしまうことにした。
テーブルをコピーする
create table `NEW_TABLE_NAME` LIKE `BASE_TABLE_NAME`;
テーブル名の変更
ALTER TABLE 既存のテーブル名 RENAME TO 新しいテーブル名;
逆順ソート
SELECT * FROM `table_name` WHERE `field_name` = 'hoge' ORDER BY `field_name` DESC
「field_name」でソートします。
「DESC」で逆順になります。
任意のフィールドでソート
複数フィールドも指定できます。
SELECT * FROM tb_name WHERE hoge = ‘***’ ORDER BY Field1,Field2,Field3 ASC
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 '"'
文字化け対策
// MySQLに接続開始
$db = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD); mysql_query("SET NAMES utf8");
// ↑エンコード対策、これを書いておけば大概のサーバーで動く
Path(URL)の変更
WordPress
管理画面へアクセス使用としても、元のPath(URL)へリダイレクトされてしまう。
URLの設定間違い、サーバー移転など、この情報を必要な場面は多い。
対処方法
データベースの
wp_options を修正する。
動的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
.html でPHPを動かす
.htaccess に
AddType application/x-httpd-php .html
と書く、それだけのことです。
テーブルのキーを配列化
$sql = "SELECT * FROM tb_main LIMIT 0,1"; $rs = mysql_query($sql3,$db); $item = mysql_fetch_assoc($rs3); foreach($item as $key => $val){ //echo $key."=>".$val.""; $key_arr[] =$key; }
CSSフィルタ
CSSフィルタ
filter: alpha(opacity=25); -moz-opacity:0.25; opacity:0.25;
IT、Firefox、Opera、サファリに対応
CSVを配列にする
通常は
list($NEWDATA[0], $NEWDATA[1], ... )=explode(',', $OLDDATA);
配列にする場合は
$NEWDATA=explode(',', $OLDDATA);
Mysqlでのソート(数値の場合)
Mysqlでのソート(数値の場合)普通に「ORDER BY フィールド名」では上1桁で判断されてしまう。
下記のようにすればOK!
SELECT * FROM `tb_movie` WHERE `driver_id` = '$driver_id' ORDER BY LPAD(grade5, 10, '0') DESC
リストの階層でマークを変える
#1kaisou li { XXXXXXXXXXXXXX } #2kaisou li { XXXXXXXXXXXXXX }
これでは、全部同じマークになっていまう。
#hoge ul li { XXXXXXXXXX } #hoge ul li ul li { XXXXXXXXXXX }
「ul li」 を何度も書くことで階層によるマークが識別できた。
リスト「ul,li」の解除
li, ul{ margin: 0; padding: 0; list-style: none; }
類似:list-style-position: outside;
これで、リセット!
画像フォーマットを変える(Imagemagick)
$comvert='convert org.gif new.jpg'; exec($comvert);
文字を画像化する(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バージョン」の完成度が上がっていくだけのことだ。
うるう年判定(date関数)
$uruu=date("L", mktime(0, 0, 0, 0, 0, $toyear)); echo $uruu;
うるう年なら「1」、そうでなければ「0」
変数名に変数をつかう
「変数名に変数をつかう」
文型の方には理解しがたいかもしれません。
理数系の方は、普通にできる。
…知らなくても「できるはず」と思ってしまう。
答えは、
カンタン!
${‘hoge’.$i}
$i=”0″;
while($i <= 9){
${'hoge'.$i}
$i ++;
}[/php]
$hoge0~$hoge9
ということですね!
配列の要素数をカウント
$nums = array(1, 2, 3, 4, 5); $count = count($nums);
数字を3桁ごとにカンマ
number_format 関数を使います。
$a = 10000000; $b = number_format($a); echo $b;
指定文字数で分割
指定文字数に分割した配列を生成する。
1文字ずつ、2文字ずつに分解する場合など
1バイト
$arr=str_split($str, 文字数);
2バイト
$array = mb_str_split($str, 文字数);
日付、時刻
date(YmdHis)
ファイルの所有者がApacheになってしまう
ファイルの所有者がApache
パーミッションが644, 604, 640, 600
などで、書き換えができなくなるサーバーが多い。
chmod はセキュリティ保持のために許可されていないことも多い、
では、どうするか?
アップロードや生成したファイルを保存する直前に、
umask(0);
とするだけだ。
現在の「umask」を表示
$old = umask(); echo $old;
ファイルの存在確認
$ext=file_exists("hoge");
返り値は
true ならば「1」
falseならば「0」
POST, GET データのスペース
PCの場合は問題なし。
モバイル端末では、エラーになる。
投げるときに
「スペース」→「_」
に変換、
受け取ったら
「_」→「スペース」
に戻す。
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”>
PHPでアップロードすると所有者がApacheになってしまう。
chmod はもちろん効かない。
保存する前に。
umask(0);
で、対処できる場合もある。
戻るリンク($_SERVER[HTTP_REFERER])
echo '<a href="'.$_SERVER[HTTP_REFERER].'">戻る</a>';
元ページの「URL+GETデータ」のリンクを簡単に作れる。
「画像ファイル”○○○”壊れているため、表示できませんでした。」と表示される?
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属性を付ける。
ユーザーエージェントの取得
// UA 取得 $agent = $_SERVER['HTTP_USER_AGENT']; if(ereg("^DoCoMo", $agent)){ $env = "docomo"; }elseif(ereg("^UP.Browser|^KDDI", $agent)){ $env = "au"; }elseif(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){ $env = "softbank"; }elseif(ereg("^MOT-|^WILLCOM", $agent)){ $env = "willcom"; }else{ $env = "pc"; }
_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"; }
指定文字数で切捨て(2バイト文字)
$text= mb_strimwidth( $text_4, 0, 200, '…','UTF-8' );
エンコード指定は、書いたほうが確実だが、無くても動く場合が多い。
配列からキーとデータを分解取得
foreach($array as $key => $val){ echo $key."=>".$val.""; }
_SERVRE
$_SERVRE[—]
REQUEST_URI
現在のページ(GET付)
HTTP_REFERER
前のページ(GET付)
配列の表示
foreach ($array as $key=>$val){ }
セッション($_SESSION)の削除・破棄・消去・リセット・抹消
特定の変数を指定して消すならば
unset($_SESSION[‘hoge’]);
もしくは
$_SESSION[‘hoge’] = ”;
$_SESSION[‘hoge’] = array();
セッションを全て破棄するなら
session_destroy();
文字列関数、バイト数で抽出
substr($hoge, 開始位置, 終了位置)
例
substr($hoge, -4, 3)
マイナスは、後ろからの位置を指す
文字列関数
// 文字数取得 $len = strlen($items); // 最後尾の1文字を削除する $items=substr($_GET[items], 0, ($len-1));
CSVを配列に変換する
$CSV_DATA="AA,BB,CC,11,22"; $arr=explode(',', $CSV_DATE);
アップロードエラーの戻り値
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 山 形 県
置き換え
文字列の置換
$new_line = str_replace ( $OLD_COLOR, $NEW_COLOR, $old_line);
全角スペース、タブを半角スペースに置換する
$str = preg_replace('/\s+/', ' ', $str);
組み込み関数の一覧を表示する
var_dump(get_loaded_extensions());
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<$len; $i++ ) { // パスワード文字列を生成 $password .= $pwelem[array_rand($pwelem, 1)]; } echo "password->".$password;
MailAddressの型チェック
if (!ereg("^[^@]+@[^.]+..+",$MAILADDRESS)) { $error .= "E-mail が不正です。"; } // 全角英数もOK if(preg_match("/[^A-Za-z0-9-_@.]/", $MAILADDRESS)){ $error. = "利用できないでない文字が含まれています。"; } // 全角はNG
エンコード変換
$hoge = mb_convert_encoding($hoge, 'UTF-8','auto');
元のエンコードは「auto」が便利
Unable to detect character encodingの警告が出る場合は
mb_language("Japanese"); $hoge = mb_convert_encoding($hoge, 'UTF-8','auto');
Hello world!
WordPress へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてください !
動的URLを静的URLにする
一言で言えば「URLの偽装」です。
httpd.conf に書くとこんな感じです。
.httaccess に書くときは中身だけを書きます
<Directory "/var/www/vhosts/mint410.com/httpdocs"> <IfModule mod_rewrite.c> 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] </IfModule> </Directory>
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>」を変更します。
保護中: EC-CUBEでRSSの日時を反映させる(全文)
フォトショップでストライプのスタイルパターン
http://www.stripegenerator.com/
保護中: EC-CUBEパンくずモジュール(ソースコード)
虫眼鏡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をまじめにコツコツと行っている方から見れば(自分含め)、どんなグレーな事かお解かりいただけるかと思います。
いつスパム判定でも受けてインデックス削除にもなりかねませんし、業者に支払う金額に対してそれほどの効果がないとの声もあります。
なにより検索エンジンを意図的に操作する行為ですので、オススメできる方法ではないことだけは確かです。
Core Server でPHPをCGIとして動作させる
http://sb.xrea.com/showthread.php?t=10744
カラーセレクト
http://colorschemedesigner.com/
CSSで画像リサイズ
<style type=”text/css”>
.image-resize {
max-width: 200px;
max-height: 200px;
}
</style>
EC-CUBEでIEでSSLのエラー
EC-CUBEでIEでSSL接続した場合、どのページに飛んでもセキュリティ情報のアラームが毎回表示される場合の修正方法です。
「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。 保護されていない項目を表示しますか?」
次のページはSSL(https)なのに、http://○×□▽… というように、http:// でファイルや画像を読み込んでいませんか?
WordPressの記事本文をPHP変数に代入する
これだけ!
$hoge = $post->post_content;
【例】 記事の最初の画像を抽出する。
list($gomi, $hoge) = explode('<img', $hoge); list($hoge, $gomi) = explode('>', $hoge); echo '<img'.$hoge.'>';
カートページの変数表示
global $objPage; $hoge = ($objPage->arrData); var_dump($hoge);
チェックボックスで折りたたみ
Google先生に聞いてみると、皆さんとても複雑難解なソースを書いているようです。
こんなにシンプルにできるのに…
●名入れ(315円)<input type="checkbox" onClick="a1.display=(this.checked?'':'none')"></br> <div id="area1" style="display:none"> 名入れ名<input type="text" name="" value=""> </div> <br> ●ギフト梱包(無料)<input type="checkbox" onClick="a2.display=(this.checked?'':'none')"></br> <div id="area2" style="display:none"> ギフトの種類<select><option>1</option><option>2</option><option>3</option><select><br> ギフトメッセージ<input type="text" name="" value=""><br> ※全角48文字まで入力可能<br> </div> <br> ●のし<input type="checkbox" onClick="a3.display=(this.checked?'':'none')"></br> <div id="area3" style="display:none"> のしの種類<select><option>1</option><option>2</option><option>3</option><select><br> ギフトメッセージ<input type="text" name="" value=""><br> ※全角10文字まで入力可能<br> </div> <script language="javascript"> a1=document.getElementById('area1').style a2=document.getElementById('area2').style a3=document.getElementById('area3').style </script>≪実働サンプル≫
名入れ(315円)ギフト梱包(無料)のし
WordPressで日付に曜日を表示する
$kizi_id = $post->ID; // echo $kizi_id.'<br>'; // 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 '<div style="color:red;">メインデータベースに接続できません。</div>'; }elseif(mysql_select_db(DB_NAME, $db)){ // echo '<div style="color:green;">DB指定OK!('.DB_NAME.')</div>'; } // < EOF > 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.'<br>'; list($year, $month, $mday) = explode('-', $date); // echo $yy.'=='.$mm.'=='.$mday.'<br>'; //日付から曜日を判定する関数 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;↑こういうことをしなくても、↓これでできる。
<?php the_date("Y年 n月 j日 l"); ?>
EC-CUBE カスタム・デモINDEX
日替わりイベント
EC-CUBEで送料無料
料金表
商品登録項目の追加
パンくず
会員ランクで価格を変える
会員ランクを設ける
※ スペースの都合で一部公開
SEO解析
受注内容の登録
data/class/pages/shopping/LC_Page_Shopping_Complete.php
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; ?>">