XAMPPにComposerのインストール

margedocさんのオールインワン等PC内に複数環境を作っている場合の情報とかがなかったので残します。

コマンドプロンプトから次を実行

>cd [xampp/phpのパス]
[xampp/phpのパス]>php  -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
Failed loading \project\ec-cube3\pleiades\xampp\php\ext\\project\ec-cube3\pleiades\xampp\php\ext\php_xdebug.dll
All settings correct for using Composer
Downloading...

Composer (version 1.5.2) successfully installed to: [xampp/phpのパス]\composer.phar
Use it: php composer.phar

こんだけ。

ザックリいうと、composer.pharがphpのパスの通ってるところにあれば良いっぽい

次のコマンドで動作確認

[xampp/phpのパス]>php composer.phar
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.5.2 2017-09-11 16:59:25

Usage:
  command [options] [arguments]

こんなのが表示されればとりあえず動いてるらしい

composerを利用する場合は
↑みたいに

php composer.phar [パラメータ]

カレントが[xampp/phpのパス]以外だと

php [xampp/phpのパス]composer.phar [パラメータ]

ってしなきゃダメ臭い。
すんごい面倒なのでバッチを作る

[xampp/phpのパス]>echo @php "%~dp0composer.phar" %*>composer.bat

これでcomposer.batが作られました。
※[xampp/phpのパス]で実行しないとダメなので注意!
そしてディレクトリ名変更したら修正しなきゃダメなのでこの点も注意!
っても絶対このこと忘れてるよねwww

今後は「php composer.phar」を「composer」って読み替えて使う

カテゴリー: PHP

FireFox開発者ツールの使い方

Web制作初心者の方に開発者ツールの使い方説明のサイトとかないかな~
って探していたら、公式サイトを発見!

こんなサイトあったんですね!

https://developer.mozilla.org/ja/docs/Tools

「MDN」をみて「MSDN」と勘違いして、MSがなんでFireFoxの開発者ツール説明してるの!?Σ(゚Д゚)

って驚いたけど勘違い!紛らわしぃw

CakePHP2 Formヘルパーのcheckboxの使えなさときたら。。。

checkboxで複数選択の項目を作る場合、cakephpでは次のように書く説明がよくみられます。

$options = array('foo','var');
$formdata = $_POST['data'][フィールド名];

$this->form->input("フィールド名",
 	array(
 		'type'=>'select',
 		'multiple' => 'checkbox',
 		'div'=>false,
 		'label'=>false,
 		'legend'=>false,
 		'options' = $options,
 		'selected' = $formdata,
	)
);

確かに複数で出力される。

だがしかし!「’div’=>false」が効いてない(´・ω・`)

チェックボックスを横並び出来ないっていう。。。。
ソース追いかけたらdivオプション自体がシカトされてる。

皆どうしてるんだろう???

そもそも$this->form->inputは色々な機能を盛り込んだ$this->form->xxxxのalias的な物
エラーメッセージの出力なども自動でやってくれる便利な子ではあります。
色々共通化した結果の歪がこれなんでしょうね。

けど、CakePHPってこうした落とし穴がところどころ存在して悩まされる。
普通に使うFormヘルパーにもこんな落とし穴作るとかもうダメダメじゃん。。。
何でこんなフレームワークが日本でたくさん使われてるのかマジ理解不能。

さらに今回はフィールド名のところを空にしたり、name属性を調整したりと
ソース踏襲の為にFormヘルパーを使て次のように対応

$options = array('foo','var');
$formdata = $_POST['data'][フィールド名];

$i=0;
foreach($options as $val){
	$checked=false;
	if( $data[フィールド名][$i] == $val ) $checked = true;

	echo '<label>';
	echo $this->Form->input(false,
		array("name"=>"data[フィールド名][$i]","type"=>"checkbox",'label'=>false,'div'=>false,'value'=>$val,"checked"=>$checked));
	echo $val.'</label> ';
	$i++;
}
if(isset($errors[フィールド名])) echo '<div class="error-message">'.$errors[フィールド名][0].'</div>';

第1引数のフィールド名をfalseにして色々な機能をOffにして対応。
とりあえず目的の事は出来た。

で、テストしてたら何故だか直前の入力フィールドのエラーメッセージがこのcheckboxに反映されるという
奇々怪々な現象が発生。

いやね、最初は私がフィールド名を間違って書いたのかと思いましたよ。
けどそうじゃなかった!!

inputメソッドの第1引数にフィールド名を指定して使った後に
inputメソッドの第1引数にfalseを使うと、前者のエラーメッセージを拾い上げてくれる優れもの!
もう失笑です。

‘error’=>false

のオプションを追加して非表示にできたけどもさ。。。
もうほんと、なんだかなぁ~って感じです。

昔から不勉強を棚に上げて「使いにくいから!」とFormヘルパーを使わずにゴリゴリPHPコード書いてたんだけど、
やっぱりその方法が正解のようです。

ちなみにバージョンは2.7.8です。

EC-CUBE::多数注文中にカートが空になる

MySQLを利用したEC-CUBEサイトで件名の不具合が出るようです。

原因はdtb_session.sess_dataの型がtextになっていて、文字列が足りなくなったために起こるようです。

EC-CUBEはsessionデータをDBで保存しており、serializeしたsessionデータを保存しています。

対策としては次のコードを実行する。

alter table dtb_session change sess_data sess_data longtext;

MySQLの仕様を確認したところ、文字列の長さは次の通り

text longtxt
65,535byte 4,294,967,295(4G)

私の環境では65kどころか1k程度でセッションが途切れてました。

writeする前に既に文字が途切れていた節もあって、この対応ですべて片付くかは微妙な所。

ひとまずこの対応で様子見をしてみます。

※SC_Helper_Session.sfSessWrite()の第2引数「$sess_data」がわたって来た時点で途切れていた。
※UTF-8環境で若干の日本語文字を含みます。

WordPress::ログインユーザのパスワードを忘れてしまった時の対処法

たま~にやっちゃう。パスワード忘れ。
そんな時には次の方法で対処します。

mysqlでパスワードを強制的に上書きする方法です。

update wp_users set user_pass=md5('newpassword') where id=xxx;

newpasswordの部分を書き換えて、idの「xxx」を該当ユーザのidを指定しましょう。

EC-CUBE3.0.x::xamppにインストール

php.iniを開いて次のエクステンションを有効にします。

extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_openssl.dll

※私の環境だと上記でOKでした。
※エクステンションを有効にするにはxampp(apache)の再起動が必要です

あとはEC-CUBE2.x同様ルートディレクトリにアクセスすればインストールウィザードが表示されます。

ようこそ  EC-CUBEインストール

WinCacheはIIS上でしか動かないようなので無視してよさそうです。

EC-CUBE3.0.x::xampp環境でインストール時にエラー「RuntimeException in SecureRandom.php line…」

EC-CUBE3.0.xをインストールしようとしてhttp://localhost/install.phpにアクセスするとエラーが表示されました。
URLは「/install.php/step1」です。

■原因
opensslが必要なようなのでphpのエクステンション「php_openssl」を有効化しましょう。

■手順
php.iniの

#extension=php_openssl.dll

これのコメントを外して

extension=php_openssl.dll

として保存してください。

xamppを再起動すれば無事インストール画面が表示されるはずです。

横並びメニューをdisplay:inline-blockで表現

結論から書くと次の通り

HTML

<ul>
    <li><a href="#">item1</a></li>
    <li><a href="#">item2</a></li>
    <li><a href="#">item3</a></li>
    <li><a href="#">item4</a></li>
</ul>

CSS

ul {font-size:0}
ul li{
font-size:10px;
display:inline-block;
text-align:center;
vertical-align:middle;
}

display:inline-blockで横並びメニューを表現すると、
HTMLのマークアップの問題でメニューの間に1文字分の空白ができてしまいます。

上の方法では、font-sizeを0にして幅をなくす方法で対処しています。

このほかにも次のような方法があるようです。

可読性のためのスペースをコメントアウトする方法
<ul><!--
    --><li><a href="#">item1</a></li><!--
    --><li><a href="#">item2</a></li><!--
    --><li><a href="#">item3</a></li><!--
    --><li><a href="#">item4</a></li>
</ul>

CSSセレクタでDOMみたいにテキストノード指定ができると綺麗なんだけどな~。。。

PHP::先頭?が表示されるけどなんで!?

PHPでプログラムをしていてごくまれに先頭に?が表示されて「なにこれ。。。キモイ」って思うことがあります。

うん。。。あるんです。

どこで出力されてるやらさっぱり分かんない謎の「?」

その答えはきっと文字コードの問題。

UTF-8(BOM有)の保存形式になってないですか!?

UTF-8(BOM有)だと0xEF BF BF っていう3バイトの符号がファイルの先頭についてしまうんだそう。

先頭以外のところで?があったら、それはきっと「~」でしょう。
これを「~」が?になっちゃう問題を波ダッシュ問題って言います。

カテゴリー: PHP

PHP::複合チャートが作れるグラフライブラリ

PDF帳票で複合グラフチャートを出さなきゃいけなかったのでサーバサイドで画像を生成できるライブラリを探してみた結果を備忘として残します。

結果として3軸以上の複合チャートを実装できるPHPのグラフ・チャートライブラリは見つけられませんでした。

なので、ベースになるSVGのチャートを準備して、プログラム上から折れ線や棒グラフを実装することにしました。だって。。。この方が早いんだもん!w

惜しいところまでいったライブラリをご紹介

  1. pChart
    右左の2軸複合チャートまでは対応できるけど、3軸以上の複合チャートには対応できず。ライブリを継承した別機能を作らないとダメそうです。デフォルトテンプレートになるサンプルが26種類あってコードも比較的シンプルにかけて勉強・解析が楽でした。
  2. SVGGraph
    こちらも左右2軸の複合チャートまでは対応できるみたい。当然といえば当然だけど、グラフテンプレートはめ込み型のライブラリでした。
    なので、複雑なグラフでも自分でテンプレートを作れば何でもできちゃいそうな感じ。
    ただその為には内部構造を理解しながら。。。になるので勉強は大変かもしんない。。。

その他

  1. JpGraph
  2. vnStatPHP
  3. ezGraph component

その他にもPhantomJSっていうコマンドラインベースでwebkitエンジンを利用してHTML画面を画像化する手法もあるようなので、これを使えば、JSライブラリを使って画像を生成することもできるそうです。

— 2015/02/02追記

日本語文字を含むSVGをFPDIで取り込むと文字化けしてしまってこれが解決できず。。。
結局PhantomJSで画像かすることにします