Archive for the 'Tips' Category

imap_open()のエラー(phpバージョン違い)

詳しく原因まで追究できていないんだけど、誰かの役に立てばと思いアップ。


PHP 5.2.6 で動作していた imap_open() が、PHP 5.3.2 になると動かなくなった。

#!/usr/bin/php -q
#PHP 5.2.6 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":110/pop3/notls}INBOX", "user@".$mailserver, "password", "OP_READONLY");
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

PHP 5.2.6では、このコードはエラーなく動く。

PHP 5.3.2では、以下のエラーになる。

PHP Warning:  imap_open() expects parameter 4 to be long, string given in ...

文字列(”OP_READONLY”)が整数(OP_READONLY)に変わったようだ。
ここを修正してもエラーになる。

PHP Warning:  imap_open(): Couldn't open stream {mail.example.com:110/pop3/notls}INBOX in ...
bool(false)
PHP Notice:  Unknown: Read-only POP3 access not available (errflg=2) in Unknown on line 0

POP3のリードオンリーはダメみたいだ。

しかたがないので、pop3は使わず、imapにしたらうまくいった。

#!/usr/bin/php -q
#PHP 5.3.2 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":143/imap/notls}INBOX", "user@".$mailserver, "password", OP_READONLY);
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

pop3もimapもサポートしてるメールサーバじゃないとダメだけど、一応解決ということで。

Windows7 Home PremiumでXpモードを使う

やりたいことはタイトル通りです。

お客様用に ThinkPad Edge E420を買ったのはいいのですが、このOSが「Windows 7 Home Premium 64」一択で他の選択肢はナシときた。
Office付きを買ったし、別にいいかと思っていたのですが、お客様がどうしても使いたい「文籍(MonJack)」というフリーのソフトが Delphiの32ビット環境で作られており、これがどうやっても動かない。
じゃあ、XPモードでとなるわけですが、Home Premium には XPモードがないよーというわけです。
手順はこんな感じです。

  1. Windows XP Mode のダウンロード
    エディションは「Professional 64ビット版」とかを選んでおくこと。Homeだと選択肢がでない。
    2番目にインストールの「Virtual PC Download」をクリック。
    インストールは「更新プログラムのインストール」みたいになるので、一瞬アレっとなるけど、終わってスタートメニューを見るとちゃんと入っている。
  2. 仮想マシンの作成
    ここでちゃんとしたXPが必要になります。(うちには使わなくなったXPがごろごろしているので問題ありませんが)
    メモリー容量はあとで変えられます。
    CDドライブにXPのインストールCDをセットして、作成した仮想マシーンをダブルクリックし、通常通りXPをインストール。
    一番の問題はパーテションを切るとき、ケチって 10GBとかにしないこと。SP3までアップグレードしたらだいたい10GBがいっぱいになります。20~30GBくらいは切っておきましょう。
  3. 統合機能
    仮想マシーンの「ツール」メニューから「統合機能を有効にする」をクリックする。
    あとは、仮想マシーンの「設定」メニューでドライブ割り当てなどを適宜行う。
  4. パーテションを拡大したいとき
    ケチって10GBとかにした場合のパーテション拡大方法は、仮想ハードディスクのサイズを拡大する に書いてある通り。
    注意点としては、VHD Resizerで拡大するとき、Fixed(容量固定)を選択すること。Dynamic(容量可変)だとうまくいかなかった。
    また、できあがった「.VHDファイル」を仮想マシーンの「設定」メニューで 2台目のハードディスクとしてマウントすること。
    そしてパーテション拡張が終わったら、1台目のハードディスクとしてマウントすればOK。

IE7互換モード

IE8とIE7互換モードで1ピクセルくらいずれることがよくあって、いちいち IEハック入れるの、面倒臭いなぁと思っている貴方!
もうそんな人はいないと思いますが、もしいたら騙されたと思ってコレを headerに入れてみてください。

<meta http-equiv="X-UA-Compatible" content="IE=8" />



IE8から互換モードの切替えボタンが消えるので、IE7互換モード対応はしなくてよくなります。
やったねパパ。 もちろん、IE7、IE6、・・・はガン無視ということで。
“IE=Edge” という手もありますが、IE9がメジャーになったときズレズレだったらヤだしね。
 
※ ちゃんとした知識が欲しい人は、こちら ⇒ WordPressテーマ “iNove” とIEの互換表示モード をどうぞ。

Memo:タブの吐き出し・・・9/10

cleanuptheworld

 
最近は記録するのが面倒臭くなって、「また、いるときググればいいでしょ。ぼんやりと記憶に残ってるし」と、さっさとタブを閉じてしまっていたので、反省!
ちゃんと記録しておかねば、イパネバの娘。
(結構書いたので、今日のところはこのくらいで勘弁しといたろ!)

  1. PHPで末尾の削除
    $s = "aaa,bb,cccc,";
    $s = rtrim($s, ",");
    
  2. jQuery Slider plugin (Safari style)
    
    $(function() {
      $("#id名").slider({ ... });
    });
    

    読み込み時に動かしておくことが重要!($(function() なしで書いても何もおこらないよ)

  3. EC-CUBEのフッターが fotter になっていたところを footer に修正してくれた。(2.5から適用)
  4. ブラウザの右端にペロッと表示されて、スクロールしても動かない画像
    position:fixed;
    right:0px;
    bottom:20px;
    

    bottomを指定すると下の方に張り付いて Good!

  5. uupaa.js
    latest logのひとが開発している jQueryに代わるライブラリ。機能はよさげなんだけど「導入実績なし」というところがちょっと。
  6. 使えるHTMLエンティティ文字 – raquo,laquo
    FireBugでエラーになる。もちろん使えるけど。
  7. isset()とempty()のまとめ
    ここを見るといいよ。
  8. mb_ereg_replace
    正規表現による置換のマルチバイト文字列版。それより、いまだに str_replaceのマルチバイト版が標準に入っていない方が不思議。
  9. メールループ(循環メール)はどうやって防がれているか?
    postfixが「Delivered-To:にあるメッセージを”mail forwarding loop”としてbounce」するということ。自分が送ったメールには、Delivered-To:を付けておいて、「Deliverd-To」フィールドの内容と送付先が同じ場合は NGにするということのようです。ここ参照。
  10. Smartyの中で isset()を使うとき
    <!--{ if isset($tpl_previous_page|smarty:nodefaults) }-->
    

    nodefaultsをかけておかないと、エラーになります。その理由は、こちらで。

PHP:文字列の途中にある数字をゼロパディング

php

 
体調不良のボケーっとした状態で考えたので、これでいいのかわるいのか判断がつかないんだけど、後で使うためのものなので、一応メモしておく。
仕様としては、sb0716_4a.jpg というような文字列があったとき、これを、sb0716_04a.jpg にしたいということです。
_1.jpg、_4.jpg、_10.jpg とあってソートしたら、_1.jpg、_10.jpg、_4.jpg になるのは嫌ということです。わがままですね。


”#”で場所を特定しておいて、ゼロパディングしてから戻すというアイディアなんですけど、正規表現だけでもっとスパッといかないんですかね?

Memo:タブの吐き出し・・・9/3

cleanuptheworld

 
タブを開いてばかりでブラウザが片付かないのでここで吐き出しておく。
ところで、Googleの画像検索って、以前はもう少しお上品だと思ったんだけど、Baiduや Naverの悪い影響か、「吐き出し」みたいな検索でも結構アダルティなグロい画像を出してくるので、要注意!

  1. clearは「floatの解除」ではない
    そうだ、そうだ。『floatの解除は float:none』
  2. max-width
    max-widthを指定したら、<img width=”nn” />が効かなくなったので、注意。style=”width:nnpx;”は大丈夫。

    追記:max-widthのせいじゃなくて、with:auto が効いていたせいだと思う。

  3. WordPress PHP Exec Plugin
    WordPressの投稿やページの中で PHPのコードを書けるようにするプラグイン。勝手に入るやつがポピュラーだけど、入れたいところに特別なタグを書くやり方の方が好きです。

    
    
  4. テンプレートタグ/next post link
    3番目と4番目のパラメータはめったに使わないのでメモ。

    in_same_cat
      (論理値) 表示している記事と同じカテゴリーの次の記事を表示するかどうかを設定。
      TRUE の場合、同じカテゴリーの記事だけが表示されます。FALSE (デフォルト)
    
    excluded_categories
      (文字列) 表示させたくない記事のカテゴリー ID の番号。
      複数のカテゴリーを除外する場合は コンマを使って区切るようです (例: '1, 5, 15')。
    

IE6/7/8のブラウザでも角丸やドロップシャドウが使えるCSS3


今日の画像(←)は借り物。
金子さんというデザイナーさんのブログなんですけど、イラストのタッチが好きです。

さて、標記のこと。ie-css3.htcというのをインクルードすると、不出来だけど可愛い(否、可愛くない)IEでも CSS3が使えちゃうよという技です。詳しいことはリンク先をご参照あれ。(詳しい順、参考になった順です)

  1. IEでもCSS3 その1(ie-css3)
  2. IE6/7/8でもCSS3が使えるようになるスクリプト -IE-CSS3
  3. IE6/7/8のブラウザでも角丸やドロップシャドウが使えるCSS3

text-shadowが使いたかったので「CSS3 PIE」は検討外だったんですけど、角丸とかグラデーションはPIEの方がきれいみたいです。
 
ie-css.htc を使うときの注意点。

  • CSSに↓のように書くと、普通、CSSのあるフォルダのものを引っぱってくると思いますが、さうではありませんでした。ルートのを持ってくるみたいです。安全のため、フルパスで書いた方がいいです。
    behavior: url(ie-css3.htc);
    behavior: url('/wp-content/themes/hoge/style-vega/ie-css3.htc');
    
  • 『text-shadow: 1px 1px 2px #a0a0a0;』の指定の仕方にちょっと癖があります。シャドウの位置(XとY)はどれくらい離すかで、わかりやすいですが、ボケ具合のパラメータがちょっと難しいです。

ググったこと(1)

シリーズものとして連載予定。
ググったものを淡々と記録していくよ。
ある程度の長さになるまで追記していくよ。

クライアント証明書による認証がかかったサイトへのアクセス

ssl

あまりご縁がないので、あれ?どうすればいいんだっけと迷ってしまった。
こういうときは、すぐメモメモ。
クライアント証明書による認証がかかっているということは『クライアント証明書』が手元にあるということなので、まずはこれを確認。
手元には『Mdev-YYYYMMDD.pfx』というファイルがありました。中はバイナリでした。
 
これを Firefoxにぶち込みます。
ツール > オプション > 詳細 > 暗号化 > 証明書を表示 > あなたの証明書 > インポート で、パスワード(秘密キー)を聞かれますから、入力すれば、OKです。
簡単ですね。

SQL:CASE WHEN

 
PostgreSQLだけというわけじゃなくて、いまのいままで(自分が)知らなかったのがびっくりというネタ。
それは、SQL文での CASE式。昔々、Accessで IIF(三項演算子)は使ったことがあったけど、SQLに IIFがないというのも、これを書こうと思って、ググって知ったくらい。

SELECT name, CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未記入' END as sex
FROM test_tbl

ほかの使い方はこちら「SQL の CASE 式って知ってますか?」参照。

SELECT count(*),
  CASE code WHEN 'M' THEN '男性' WHEN 'F' THEN '女性' ELSE 'オカマ?' END
FROM table1 GROUP BY code;

SELECT
 SUM( CASE WHEN code = 'M' THEN 1 ELSE 0 END ),  -- 男性の人数
 SUM( CASE WHEN code = 'F' THEN 1 ELSE 0 END )   -- 女性の人数
FROM table1;

CONSTRAINT check_salary  -- 平社員は給与が20万円以下という制約の例
 ( CASE WHEN code = '平社員' THEN 
   CASE WHEN salary = 100000 THEN 販売価格 * 0.9 ELSE 販売価格 END;

次ページへ »