伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか…がんばっても8割だ。
11月 30

imagickでテキストを書く実験。本当に資料がなくて困る・・・。なんとなくやってる間に分かってきたけど・・・。




今日の実験、前回の記事では四角形をつくったので、そこに各辺(たて・よこ)の長さの注釈を入れてみる。


<?php

//四角形用
$draw = new ImagickDraw();
$draw->line( 0, 0, 250, 0);#上の辺
$draw->line( 250, 0, 250, 120);#右の辺
$draw->line( 250, 120, 0, 120);#下の辺
$draw->line( 0, 120, 0, 0)#左の辺

//ヨコの辺の注釈
$draw2 = new ImagickDraw();
$draw2->setFont('./Justus-Versalitas.ttf');#フォント指定
$draw2->setFontSize(11);#フォントサイズ指定
$draw2->setFillColor('#000000');#フォントカラー
$draw2->setTextAlignment( imagick::ALIGN_CENTER );#センター寄せ
$draw2->annotation(125, 12 , '250');#テキスト書き込み(x位置,y位置,テキスト)

//タテの辺の注釈用
$draw3 = new ImagickDraw();
$draw3->setFont('./Justus-Versalitas.ttf');
$draw3->setFontSize(11);
$draw3->setFillColor('#000000');
$draw3->translate( 253, 60 );#指定の座標へ移動させる(x位置,y位置)
$draw3->rotate(90);#90度回転
$draw3->setTextAlignment( imagick::ALIGN_CENTER );#センター寄せ
$draw3->annotation(0, 0 , '120');#テキスト書き込み(x位置,y位置,テキスト)


//Imagickオブジェクト
#参考http://labs.unoh.net/2009/05/imagemagick.html
$image = new Imagick();
$image->newImage( 264, 122, new ImagickPixel('#FFFFFF'));
##$image->setPage( 300, 300, 0, 0);
#$image->spliceImage( 300, 300, 0, 0);
#$image->setImagePage( 300, 300, 0, 0);
#$image->setFormat('gif');
$image->setImageFormat('gif');
#$image->setResolution( 300, 300 );
$image->drawImage( $draw );
$image->drawImage( $draw2 );
$image->drawImage( $draw3 );

header('Content-type: image/gif');
echo( $image->getimageblob() );
#$image->setImageFormat('jpeg');
#    $img->writeImage('test.jpg');
$image->destroy();
$draw->destroy();
$draw2->destroy();
$draw3->destroy();

一度やってしまえば案外簡単。
簡単な図形くらいはどうにかなりそう。

GUI環境がインストールしてあるOS環境なら、setFont()はいらないっぽい。

CUI環境のみの場合、setFont()で使うフォントは、スクリプトと同ディレクトリに使うフォントを入れておく必要があるらしい。(フリーフォント探すのが面倒だ!)

※※余計なコメント行がたくさんありますが、色々実験した痕跡なので無視してくださいな。

11月 26

PHPのImagickで四角形とか描画とかしなきゃいけなくなったので、調べたら、うわぁ。。。全然参考になるところないね・・・。

ということで今日まで分かったことをメモメモ。



線を描いたりフォントで文字書いたりするのは、ImagickDrawオブジェクトを利用

このImagickDrawオブジェクトをImagickオブジェクトへはっつける。

出力

という手順を踏むらしい。

どうやらファイルに出力しなくても直接バイナリを得てPHPで出力も可能ということ。



じゃあやってみよう!

<?php

//四角形を描く
$draw = new ImagickDraw();#ImagickDrawを作って...
$draw->line( 0, 0, 250, 0);#右$draw->line( 250, 0, 250, 120);#下
$draw->line( 250, 120, 0, 120);#左
$draw->line( 0, 120, 0, 0);#上
#↑このように線を引く。多角形を描く「polygon」メソッドもあり、こっちでもいいじゃないかなぁと...

//Imagickオブジェクトを作成。実際の出力とかはこっちでやる!
$image = new Imagick();
$image->newImage(252, 122, new ImagickPixel('#FFFFFF'));
#↑新しい画像(キャンバスみたいなもの??)を作成
# 線の幅分を加算しなきゃいけないことに注意。

$image->setImageFormat('gif');#画像フォーマットをgifに設定します。
$image->drawImage( $draw );#描画した四角形を画像に貼り付け!

header('Content-type: image/gif');#適切にMIMEタイプを設定して...
echo( $image->getimageblob() );#「getimageblob」メソッドを使うとバイナリを得ることができるのでそのまま出力。

?>

↑こんな感じ。。。うーむ・・・理屈は理解したが、、、慣れが必要だ・・・。

とりあえず第一関門突破。ここにあとは文字を流し込まなきゃならないので、それはまた後日。

9月 14

このサイトで公開しているメールフォーム「900-8570」の次期バージョンの開発に着手しました。
いまどきCGIはねぇかなと思い、とりあえずPHPの予定で。

PHPのウリ。安い早い旨い。

これに尽きるのですが。反面、気をつけないとセキュリティホール作りまくる可能性大。設定が環境により様々すぎて、意外に汎用なアプリケーションが作りにくいなどなどの問題も山積で、「これだからPHPは」と思うことが多すぎる困ったちゃん言語。
他に何がある?と聞かれるとやっぱりPHPしかないので、PHPで行くことに。

これまで自分で作っていたオレオレフレームワークが、内部コードEUCだったんですが、EUCでは同字体や旧字で問題が出るし、一番使ってもらえそうなお友達のみなさんがUTF-8を主に使っているようなので、内部コードをUTF-8にするため1から作り直すことに。出力はSJIS・EUC・UTF-8に対応できるようにします。

ネットで調べたら、みなさんPHPの内部コードと出力コードで結構悩んでいるよう・・・。これだからPHPは。

PHPへの恨み節のような記事となりましたが、次期バージョンおたのしみに。

8月 22

EC-CUBEで特に理由もなく「不正なページ移動です」と表示される問題が発生。

動作を見ていたら、どうもセッション周りのエラーっぽい。でIEだけっぽい。
これだからIEは!!!

ググってみるとあちこちで困っているよう。
対策方法もあれこれあったけど、うちの環境の場合は、.htaccessに

php_flag session.auto_start 1

を追記したら直った。

EC-CUBEのカスタマイズガイド本を見たら、
「バグがあり2.4以降なら直ってる」とのこと。
まぁでも古いバージョンでもPHPの設定を変えたら直ったってことは、
確かにEC-CUBE自体のバグでもあるかもしれないのだけど、
PHPがアレってことでもある・・・よね。

8月 18

近頃はトランザクションを使いたいので、データベースエンジンの選択はもっぱらSQLiteかPostgreSQL。(別にMySQLがトランザクションないわけじゃないけど)
そんな話はまぁどうでもよくて。
久しぶりにPHPでMySQL使ったら文字化け起こしたので、
「SET NAMES」
を使おうとしたら、どうもPHPからSET NAMESを使うのはご法度っぽいΣ( ̄□ ̄;

こちらのサイトに良くまとめられている。

なるほど。

早速対策しなくちゃ。

要するに、MySQLが悪いわけじゃなくて、PHPがアレなのねと。。。

ちょっと前には当たり前のノウハウも、今やバッドノウハウ。
毎日勉強しないと置いていかれるわい。

8月 7

EC-CUBEはデフォルトで、
「店名/ページのタイトル」というタイトルが吐き出されるようになっています。

これではSEO的に???なので、変えたい。

一番基本的なやり方は公式フォーラムに書かれています。

が、なんか個人的に自由度が低くてイヤだ。
テンプレートだけでどうにかしたい(>_<)

ってことで、人によってはそんな実装ダメだと怒られるかもしれない、
力技のタイトル変更方法です。

site_frame.tplを編集します。

<title><!--{$arrSiteInfo.shop_name|escape}-->/<!--{$tpl_title|escape}--></title>

↑ここがタイトルを定義している記述です。

では、力技を実装しましょう。

まず、テンプレートファイルの頭にでも、

<!--{php}-->
$this->assign( 'selfFile', basename( $_SERVER['PHP_SELF' ] ) );
<!--{/php}-->

と書きます。これで、テンプレートファイル変数「selfFile」に今実行されているスクリプトのファイル名が代入されます。(この部分はPHPを実行しているので、「あまりよくない」と指摘される部分です。キレイにMVC分離をしたい人は、上記のロジックをSC_View.phpにでも書いておくと良いかと思います。)

で、上記のタイトル定義部分を

<!--{if $selfFile=='detail.php'}-->
商品詳細ページのタイトル
<!--{elseif $selfFile=='list.php'}-->
一覧ページのタイトル
<!--{else}-->
そのほかのページのタイトル
<!--{/if}-->

このように変更すれば、テンプレートで、ページごとのタイトルの切替ができます。もちろん、テンプレート変数がそのまま利用できるので…

<!--{if $selfFile=='detail.php'}-->
<!--{$arrProduct.name|escape}-->  <!--{$arrSiteInfo.shop_name|escape}-->
<!--{elseif $selfFile=='list.php'}-->
<!--{$tpl_subtitle}-->  <!--{$arrSiteInfo.shop_name|escape}-->
<!--{else}-->
<!--{$arrSiteInfo.shop_name|escape}-->/<!--{$tpl_title|escape}-->
<!--{/if}-->

上記のように実装すれば、、
商品ページのタイトル => 「商品名 店名」
一覧ページのタイトル => 「カテゴリ名 店名」
そのほかのページ => 「店名/ページタイトル」(デフォルトの状態)
とタイトルを変えることができます。

8月 6

EC-CUBEのメールマガジンの送信元の名前は、
会社名がデフォルトで入力されます。

個人事業主とか、会社名と店名がちがうときとか不便(>_<)

ってことで、メルマガの送信元の名前を店名に変更するメモ。

LC_Page_Admin_Mail_Sendmail.php

のprocess()を

LC_Page_Admin_Mail_Sendmail_Ex.php

へ継承。

まぁここまではEC-CUBEの改造の基本なので言うまでもなし。

継承したメソッドの中で、
$this->objMail->setItem();
を実行しているところがあるので、
そこの
$objSite->data["company_name"]
という引数を
$objSite->data["shop_name"]
に変更すればOK。

7月 7

先日までMySQLでEC-CUBEサイトを構築中。

だったのだけれど、商品数1,000を越えたあたりでサイトが激重に。
調べたらMySQLでEC-CUBEつかうのはアレなんですね・・・。

EC-CUBEが使っているMySQL用のクエリがダメダメみたい。
一つ一つSQL文を書き直せばいいのだろうけれど、
そんなのあまりにムダな作業だ!!!

ってことで、PostgreSQLに変更し、
EC-CUBEを意気揚々と再インストールっ♪

でも、接続できないみたいなことを言ってくる?

はぁ?


MySQLにイージーさに慣れすぎて色々忘れてた。
ポスグレってpostgresql.confとpg_hba.confの設定が必須だっけ?
でググったらありましたよ。

http://www.dotconf.com/modules/dev/content0001.html


弊社はクララオンラインさんのPlesk導入サーバーを愛用させてもらっていますが、こちらの記事も同様のサーバー構成(OSは違いますが)のようですから、このままやれば良いだろうーーー。という希望的観測で今日はここまで。眠い。なんか頭イタイ。深夜0時。

ネタ元の記事の方。多謝です。

成功後、この記事に追記します。

【追記&結論】

あれこれ設定を変えてもうまくいかない(>_<)
と12時間近く悩んだあと発見。

クララオンラインのサーバーでPHP→ポスグレ接続するときは、
ホスト名を指定すると接続できません(>_<)

で、EC-CUBEのデータベース接続はどうなってるかと言うと、
PEAR_DBを使ってポスグレやらMySQLに接続をしてますが、
デフォルトの接続文字列が、

pgsql://username:password@hostname:port/dbname

という書式が使われています。ホスト名が見事に設定されています。
ってことで、これを

pgsql://username:password@unix()/dbname

となるように、install.phpとSC_Initial.phpを変更すると接続できるようになりました。
install.phpの方は書き換えなければならない箇所が複数あるので、
見落とさないように注意。

なぜ、このようにしなければならないのか・・・。
まさかこんなところで丸半日悩むとは思いもよりませんでした。

12月 13

オープンソースに関する知識では日本で屈指の知識を有するであろう「moongift」運営者中津川篤司さんのレビュー記事を読んで、「理想のCMS」と方々で言われているCMS「Concrete5」をインストールしてみた。

まず、インストール。
筆者の環境では、インストーラーを走らせるだけで、インストール作業は完了したものの、日本語の表示に問題が発生。
調べたところ、DBへ正しく日本語が保存されていなかったので、MySQLへの接続の問題と判断。
drivers\adodb-mysql.inc.phpの371行目に
mysql_query( "SET NAMES utf8");
を追加。
以上で、文字化けの問題はクリアしました。

簡単に使ってみました。
コンテンツの管理という意味では、Adobe「Contribute」に近い印象を受けました。
WEBアプリケーションでこういったインターフェイスを実装しているのは衝撃。
これまで、なかなか一般の現場に任せられなかった、
いわゆるブログ以外のコンテンツ管理も任せられそうだ。
また、オープンソースで使いやすさと安定度を両立した(ブログ以外の)CMSはなかったが、
これは使いやすく安定もしている(ように見える。今のところ)
そういう意味で、個人的には、企業サイト構築を安価に済ませたい場合に利用したい。

ということで、個人的に応援している東海地区地元プロレス団体である「でら名古屋プロレス」「DEP」の2団体の応援コンテンツや動画コンテンツの構築に使ってみたいと思う。

12月 9

Windows環境でサイト構築・PHP・Perl(CGIもmod_perlも)なんかのテストを行うのに、
最近は仮想環境なんかを使うのも流行っているが、
やっぱり一番手軽なのは、XAMPPなわけで。
ネットワークの設定なんかもラクだからね。

普通の使い方をしたい方はこちらを参考に。

多くの説明サイトでは、インストーラーを使うことを薦めているわけだが、
個人的にそれはイヤだ!!!

・インストーラー使っちゃうと一つのサイトしかテストできなくなる。

というのが大きな理由だ。

じゃあどうするのか、

XAMPPは、ZIP形式でダウンロードして、
その中身をどこかのドライブのルートに置いて使えば、
基本的な動作は、インストールや設定なしに動く。

ほぉほぉ。じゃあCドライブのルートにおいて使えばいいのか。
とも思うが、いくつかのサイトを状況に応じて増やしたり減らしたりするのには向いてないし、
何よりCのルートに何かを置くのは、何か抵抗ある。

ということで、私は、必要なサイト分仮想ドライブを作成し、
そこへXAMPPを入れて使っている。

不要になったサイトは、仮想ドライブの中身をすべて消去し、
仮想ドライブを解除するだけ。
レジストリも仮想ドライブを作成するソフトの分だけ汚れるだけだ。
(結局汚れるんかい!という突っ込みは勘弁)




では、まず材料。

・XAMPPをダウンロード
http://www.apachefriends.org/jp/xampp-windows.html
こちらのページの
「XAMPP Windows版[バージョン番号]」の「ZIP」版をダウンロードする。
当然ながら、バージョン番号はそのときによって異なる。

・仮想ドライブ作成ソフトをダウンロード
仮想ドライブとは、
たとえば「C:\vituralDrives\a」というフォルダがあるとして、
このフォルダを仮想的に「X:\」だったり「Y:\」だったりと、
あたかもHDDなどのようなドライブのルートとして利用することだ。
私は、仮想ドライブ作成ソフトに「Visual Subst」というソフトを利用している。
http://www.forest.impress.co.jp/lib/sys/hardcust/virtualdrv/visualsubst.html
本記事の説明もこのソフトを利用する前提で進めていきます。

材料はこれだけだ。

仮想ドライブ作成ソフトのインストールについては割愛する。
各ソフトの説明書に従ってインストールを完了させておいてください。



じゃ、まずは仮想ドライブを作成しよう。

まずはどのフォルダを仮想ドライブにするか決めよう。

本記事では「C:\VirtualDrives\1\」というフォルダを「K:\」というドライブとして利用するものとして話を進める。

では、そのフォルダを作成しよう。


▲フォルダを作成するのに、マイコンピュータを開くと思うが、
この時点ではまだ「K」ドライブは存在しない。

こんな感じにフォルダを作成。
いくらなんでもフォルダの作り方くらい知っているとは思うが、
上記の写真のように右クリックをしていくとフォルダが作れる。




では、仮想ドライブを作成しよう。

Visual Substを起動すると▲このような画面になる。
筆者の環境ではすでに二つの仮想ドライブが作成されているため、
上部の大きな枠の中に二つのアイコンがある。
新規に起動した場合は、空欄のはずだ。

仮想ドライブを作成後、そのドライブを消去したい場合は、
該当の仮想ドライブを選択し、左下の「×」を押すことで削除できる。

仮想ドライブの作成方法について。

まず上の写真の赤枠の部分に作成したいドライブ名を選択する。
A~Xまでのドライブを作成できる。
(ただし、通常C:は作れない。またHDDを増設している場合などは、
 そのドライブと同名のドライブは作成できない)
今回は、「K:」を作成するので「K:」を選択。

次に、仮想ドライブにしたいフォルダを選択する。
上の写真の紺色の枠の虫眼鏡ボタンをクリックすると、
フォルダ選択ダイアログが表示されるので、
先ほど作成した、「C:\VirtualDrives\1\」を選択する。

上の写真のオレンジ色の枠の部分のチェックを入れておくと、
次回Windowsがスタートした場合も自動で仮想ドライブが作成される。
Windowsをログアウトするまでの一時的な利用で仮想ドライブを作成したい場合は、
チェックを外す。通常はつけておいたほうが楽だろう。

最後に上の写真の黄緑の枠の「+」ボタンをクリックしたら仮想ドライブ作成完了だ。

画面はこのように切り替わり、上の枠に「K:」の項目が増え、
その下に、そのドライブがどのフォルダのことを指すのか説明されている。

改めてマイコンピュータを開くとK:が作成されている。

ためしにこのドライブ中に適当なファイルを入れると、
同じファイルがC:\VirtualDrives\1\の中にもできているはずだ。

仮想ドライブは、テストサイト・環境が必要な分作成する。

ちなみに筆者はひとつだけ、常に仮想ドライブを作成しておき、
その中でPHPなりPerlなりで簡単なツールを作成・利用するのに利用している。
分かりにくいWSHを利用するより平易で、
GUIはHTMLで代替できる。
(たとえば複数ファイルをまとめてリネームするツールなど)



では、XAMPPをインストールしよう。

XAMPPサイトからダウンロードしたZIPファイルを解凍すると、
「XAMPP」というフォルダが作成されるので、
(解凍ソフトによっては、1階層上にフォルダが作成される場合がある)
そのフォルダをK:\へコピーする。

K:\xampp\というフォルダへxampp-control.exeというアプリケーションができるように
コピーできていれば問題なしだ。



では、インストールできているかチェックだー!

K:\xampp\xampp-control.exeを起動する。

こんなウインドウが起動されるので、
上の写真で赤枠の部分の「Start」といボタン2つをクリックする。

しばらく待つと「Apache」と「MySql」という項目の横に「Running」と表示される。
こうなればサーバーが起動された状態だ。
サーバーを終了したい場合は、「Running」と表示されている
横の「Stop」ボタン2つをクリックするとサーバーが終了し、
ウインドウは初期状態に戻ります。

なお。このウインドウを終了したい場合は、×ボタンではなく「Exit」をクリックします。

「Running」が二つ表示された状態で、
WEBブラウザから「http://localhost/」へアクセスして


こんな画面が表示されたらインストール完了です!お疲れ様です。

K:\xampp\htdocs\がサイトルートディレクトリになっていますので、
この中にテストサイトを構築していけば、
簡単にローカルPCでテスト環境が作成できます。

前述の通り、XAMPPの自動インストール機能を使えばもっと簡単にテストできますが、
通常サイト構築の業務において、サイトがひとつで足りることはまず有り得ません。
この方法でいくつもテストサイトを作っておけば、
業務がすいすい進むことうけあい。(??)

なお、上記のWEB画面の「日本語」をクリックすると、
「PHPMyAdmin」などの便利な管理ツールがあるので、
そちらも活用しよう!

また、他の仮想ドライブのサーバーを起動する場合は、
K:\のサーバーを起動したまま、
別のドライブのサーバーを起動すると、
コンフリクトを起こして正常に動作しないので、
必ず、サーバーを停止する癖をつけよう!

ってことで分かりづらい説明に最後までお付き合いありがとう。

ところでWEBアプリケーションを作成する上で、
PHPやPerlからのメール送信って絶対必要だよね?
XAMPPはそのままの設定では送信できないことが多い。

ちょっと面倒な手順を踏んでもいい場合は、
こちらが超参考になる。

もうちょっとラクにならない?って人は、次回の記事で説明しますので、お待ちを。

« Previous Entries

 ANZXCvg