Posted on

PHP7、RC版の配布始まる!

2015年、政治的にも経済的にも気象的にもいろんなことが起こって激動の日本ですが、世のWEBアプリケーションエンジニアの皆さま的には2015年の一大事は

PHP7のリリース

になるかもしれません(^^)

PHP4から5になるのに4年かかりましたが、6が欠番になる騒動も含めて11年ぶりのメジャーヴァージョンアップになるわけですから。

もうRC(リリース候補)版のリリースは始まっておりまして、

ソースはコチラ

すでにRC版でいろいろ試しておられるエンジニアの方も多いと思われますが、実際にPHP7の正式版がリリースされるのは11月になりそう、とのことです。
当初は10月半ば、と言われていたので、それほど大きな遅延はない、という感じでしょうか。

個人のベンチマークテストではPHP7.0は5.6の2倍近く速い結果が出たりしてるそうなので、楽しみです。

とは言うものの、

続きを読む PHP7、RC版の配布始まる!

Posted on

RSS内の画像を取得する

RSSで記事一覧を取得する際に画像を一緒に取得して欲しいという要望があったのでこんな形で取ってみました。

$rssurl = "http://xxxxxx.xml";
$xml_data = file_get_contents($rssurl);
$rssdata = XML_unserialize($xml_data);
foreach ($rssdata['rss']['channel']['item'] as $val){
// リンクのURLを見に行って最初に現れる画像のsrc取得
$url = $val['link'];
$src = getChildRss($url);
if (!empty($src)){
$img = "";
echo $img;
}
}
}
// リンクのRSSを見に行って最初に現れる画像のsrc取得
function getChildRss($url){
$xml_data = file_get_contents($url);
$rssdata = XML_unserialize($xml_data);
if (!empty($rssdata['rss']['channel']['item'])){
foreach ($rssdata['rss']['channel']['item'] as $val){
// 最初に現れるimgタグ取得
preg_match_all("//", $val['content:encoded'], $img);
if (count($img[0]) !== 0) {
// imgタグ内のsrc取得
preg_match_all('/src="(.+?)"/', $img[0][0], $src);
if (count($src[0]) !== 0) {
return $src[1][0];
}
}
}
}
return "";
}
Posted on

MySQLで新規追加と更新を同時に出来るSQL文

データベースのテーブルに対して、

・指定したキーのデータが存在していないなら追加したいが、あるのなら内容を更新したい

ということがあると思います。

そういう時、普通にプログラムで処理すると

1.SELECT文でデータの存在確認
2.データが存在しないならINSERT文で新規追加
3.データが存在するならUPDATE文で上書き

となると思います。

これでももちろん問題はないのですが、MySQL上で1.2.3.を一文で行うSQLも存在します。

続きを読む MySQLで新規追加と更新を同時に出来るSQL文

Posted on

PHPExcelで動的に複数セルに対して操作したい

PHPExcelである場所からある場所までのセルに対して操作をしたい時は、getStyle( “A4:G37” )のように指定したら良いのですが、プログラムで動的にする場合、Y座標は数字なので問題無く指定できるのですが、X座標はアルファベットなので動的に指定する事が出来ません。

そこで便利なのがPHPExcel_Cell::stringFromColumnIndex()です。

これは列の数字からアルファベットを返してくれる関数で、PHPExcel_Cell::stringFromColumnIndex(10)と渡すとKと返してきてくれます。

ですので、下記のように指定してあげるとgetStyle( “A4:G37” )のように指定することが可能になります。

$col = PHPExcel_Cell::stringFromColumnIndex(6); // 列の数字からアルファベットに変換
$sheet->getStyle( "A4:{$col}37" )->getFont()->setSize(10);// フォントサイズの指定
Posted on

sortableは超便利!

javascriptの拡張ライブラリ、jQueryの便利さはWebアプリケーション開発に携わっている皆さんにとっては自明のことだと思います。
そしてそのjQueryをベースにしてインタラクティブなUIをブラウザ上で実現してしまうのがjQueryUIライブラリです。
コレもご存知のことと思いますが……(^^;

このjQueryUIではUI操作の基本となるDraggable(ドラッグ),Droppable(ドラッグしたものを落とす),Resizable(大きさを変える),Selectable(選択する),Sortable(順番を並び替える)というインタラクティブ動作を支えるライブラリがあるのですが、一番UI的に受けがいいのはSortableではないかと思います。

たとえばこんなのです↓

続きを読む sortableは超便利!

Posted on

PHPプログラム内から他のプログラムにGET,POSTで引数を渡して戻り値を得る方法

あるPHPプログラムから他のプログラムを呼び出す、ということが時々あります。
API的に独立したプログラムに引数を渡して、結果を戻り値で得る、というような場合ですね。

そんな時、使うのがfile系の関数。
file_(f)ではじまるファイルを操作する関数は、同時にURLに対しても同じように動作する、という仕様に驚きを隠せないのは僕だけでしょうか。

URLが指し示すプログラムに対してfopenで開いてから引数を渡して戻り地を得る、という流れでももちろんできるようなのですが、今日のタイトルのように引数を渡して戻り値を得るだけであれば、

続きを読む PHPプログラム内から他のプログラムにGET,POSTで引数を渡して戻り値を得る方法

Posted on

CakePHPのHasAndBelongsToManyを使う時の注意

以前下記の記事を書かせていただいたのですが、保存の所で想定の動きをしてくれない場合があるので注意が必要です。

————————————————————–
↓↓↓↓↓↓↓↓↓ここから前回の記事↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
————————————————————–

多対多のデータを扱うのにHasAndBelongsToManyをモデルで指定してあげると
簡単にデータの取り出しや保存が出来ました。

今回は社員が複数の部署に属すという仕様で使いました。
テーブルは次のようにしました。
parts(部署テーブル)、
users(社員テーブル)、
parts_users(部署・社員連携テーブル)
部署・社員連携テーブルは繋げたいテーブルを「_」で連結させてテーブル名とします。
parts_usersのフィールドは「part_id、user_id」となります。

次にPartsUserモデルを作っていないとエラーになるので作っておきます。

class PartsUser extends AppModel
{
var $name = 'PartsUser';
var $useTable = 'parts_users';
}

Userモデルで

class User extends AppModel
{
var $name = 'User';
var $useTable = 'users';
var $hasAndBelongsToMany = array('Part');
}

と記述してあげるとUserモデルでセレクトして得られた配列に
所属している部署全てが取得できています。

データの取得はこれですんなりと上手くいったのですがデータの保存が
あまり資料が無くはまりました。
データをセレクトで取得した形式でsaveしてあげても上手く保存が出来ません。
ではどういう配列構造で保存してあげればいいのか、

$this->data['Part']['Part'][0] = 部署番号
$this->data['Part']['Part'][1] = 部署番号
$this->data['Part']['Part'][2] = 部署番号
・
・
・

という感じにデータを持たしてあげるとparts_usersテーブルに社員と部署を
連携したデータを保存してくれます。

————————————————————–
↑↑↑↑↑↑↑↑↑↑↑ここまで前回の記事↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
————————————————————–

上記の方法で保存した時に実際の保存のSQLは下記のようになります。

UPDATE users SET name = '○○' WHERE users.id = 3;
SELECT PartsUser.user_id FROM parts_users AS PartsUser WHERE PartsUser.user_id = 3;
DELETE PartsUser FROM parts_users AS PartsUser WHERE PartsUser.user_id = (3);
INSERT INTO parts_users (user_id,part_id) VALUES (3,17), (3,2);

これがCakePHPのバージョンが変わったところ、下記のようなSQLになってしまいます。

UPDATE users SET name = '○○' WHERE users.id = 3;
SELECT PartsUser.part_id FROM parts_users AS PartsUser WHERE PartsUser.user_id = 3;
DELETE PartsUser FROM parts_users AS PartsUser WHERE PartsUser.part_id = (17, 2);
INSERT INTO parts_users (user_id,part_id) VALUES (3,17), (3,2);

このSQLだときちんと登録できないので、登録箇所はunbindModelをしてSQLを自分で作成することにしました。

Posted on

HighChartsでhighcarts.comへのリンクを消す方法

ブラウザ上でグラフを描画するライブラリはたくさんあるのですが、最近、多くの商用サイトで使われているのがこれだと思います↓

HighCharts JS

こんな感じのグラフを作ることが出来ます↓
HighCharts Demo

見栄えやグラフの描画され方が洗練されていて、プロ仕様のチャートライブラリです。
商用目的の使用は有料なのですが、非商用目的なら無料ですので、実験的に使ってみられても面白いかと思います。JQueryベースの無料のチャートライブラリでも結構すごいのがあるのですが、やはり仕事で使うとなると有料でもHighChartを使う場面が増えてきています。

さて、このHighChart、デフォルトの状態ではこの折れ線グラフのようにチャートの右隅にhighcharts.comというロゴが表示され、クリックするとHighChartsのサイトへとジャンプしてしまいます。

このリンクの表示を消すには、チャートの初期化時に以下のように書けば大丈夫です。

続きを読む HighChartsでhighcarts.comへのリンクを消す方法

Posted on

Linuxからwindowsサーバーにファイルを渡す

あるプロジェクトで(PHPを動かして)Linuxで生成したCSVファイルをwindowsサーバーに渡さないといけない状況が発生しました。

まずLinuxからwindowsサーバーにファイルを渡せるの?という疑問から解決していきます。
googleで調べるとsmbclientというのを使うとwindowsの共有フォルダにアクセス出来るみたい!!

smbclientを使うにはLinuxとwindowsの両方に設定が必要みたいです。

続きを読む Linuxからwindowsサーバーにファイルを渡す

Posted on

Twitter Bootstrap上でJQuery UI Datepickerを使用する際の問題

Twitter Bootstrapは単純なデザイン性から一歩進んだコンポーネントまで提供してくれる、WEBアプリケーション開発者にとって心強いフロントエンドフレームワークです。

Twitter Bootstrap
http://getbootstrap.com/

個人的にはTwitter Bootstrap + JQueryを使用すればかなり柔軟なUIを構築できると感じていますが、ひとつ大きな問題があります。
それは、

JQuery UIとの共存が難しい

ということです。
Bootstrapはcssだけでなくコンポーネント等の機能はJQueryで作成された基本ライブラリの読み込みが必須ですので、Bootstrapを使用する場合はTabやDialogといった機能はできるだけ最初からBootstrap標準のものを使用するのが良いと思われます。

ただ、datepickerに関してはJQuery UIのものが高機能で実績もあるのでできたらそっちを使いたい、というのが本音です。

JQuery UI datepickerをBootstrap上で使用する際にもっとも問題になるのは、

続きを読む Twitter Bootstrap上でJQuery UI Datepickerを使用する際の問題