Archive for the ‘PHP’ Category

PHP カンファレンス福岡 2016 に参加しました

昨年に引き続き、今年も PHP カンファレンス福岡に参加しました。

昨年同様今年もとても価値のあるイベントだったので、レポートしておきます。

(more…)

Facebooktwitterlinkedintumblrmail

『Laravel リファレンス』発売、電子とキャンプ、そして紙

muraveです。最近はCakePHP(2系)を扱っていてLaravelはすっかりご無沙汰です。

2016/1/8 に株式会社インプレスより発売された『Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク』(以降『Laravelリファレンス』)の見本誌を頂きました。ありがとうございます!

電子書籍のはなし

『Laravelリファレンス』、電子書籍版も同日に発売されました。すばらしい!

見本誌をいただけるというお話はあったのですが辛抱たまらず「田舎で最速で読むには電子書籍だべやばってん荒川」(嘘方言)とKindle版の予約をクリッククリックしておりました。

おかげで発売日の0時から読み始めることができましたが残念な点もかなり。

(more…)

Facebooktwitterlinkedintumblrmail

PHPの関数やメソッドで多値を返すときのパターン

muraveです。「多値を返せる #lua」というツブヤキをTwitterで見かけて、ふとPHPでよくやってるパターンを書こうかと。

配列で返してlistで受けるってだけですが。

function retManyValues()
{
    return ['m', 'a', 'n', 'y'];
}

list($m, $a, $n, $y) = retManyValues();

直書きしたのでバグってるかもしれませんがご容赦を(php -a して確認してみたら大丈夫っぽいですね)。

[]で配列を書けるようになったので以前より見た目がスッキリして嬉しい今日この頃です。

Facebooktwitterlinkedintumblrmail

PHP カンファレンス福岡に(ry

行ってきました。shun です。
ひと月以上前に参加登録が始まった当初からいつかやらなければと思っていたんですが結局時間を作れず、php 無知なまま出発しました。そう私、実は php 経験が無かったのです…!(続く)

(more…)

Facebooktwitterlinkedintumblrmail

PHPカンファレンス福岡2015 に参加しました

murave@プレモル1本目です。

2015年6月27日に開催された PHPカンファレンス福岡2015 に参加しました。

http://phpcon.fukuoka.jp

私が参加したのは以下の通り。

・開会式・スポンサー紹介
・基調講演「全てを結ぶ力」(郡山 昭仁 @koriym)
・あなたと秘伝のタレ mid 2015 (石田 絢一 @uzulla)
・10年超えるサービスのphpバージョンを4から最新にする話 (小田 知央 @linyows)
・CakePHP3ウォークスルー (長谷川 智希 @tomzoh)
・CodeIgniter update (宮川 貴子 @NEKOGET)
・Laravel5を使って開発してみた (野田 健夫)
・Phalcon PHPフレームワーク Sense of Use (近藤 和宏)
・CakePHPを業務で使ってみた(7年ほど) (小山 健一郎 @k1LoW)
・インフラエンジニアからレガシーPHPへのレイヤーアップ (山下 和彦)
・レイヤードアーキテクチャを意識したPHPアプリケーションの構築 (新原 雅司 @shin1x1)
・ライトニングトーク
・閉会式

(more…)

Facebooktwitterlinkedintumblrmail

baserCMS 3.0.7 でカテゴリ名、簡単に取れました

muraveです。

チョイ前の記事

baserCMSを3.0.2から3.0.7へ。ところでカテゴリ名ってまだ簡単に取れないんです?

で、タイトル通りの疑問を書いてましたら親切な匿名の方からコメントで情報を頂きました。

曰く、$category = $this->BcPage->getCategory(); echo h($category[‘title’]);

$categoryへの代入等はこちらで追加させてもらいましたが、確かにこれです!

ありがとうございます。

てなわけで、getCategory関数を使用してのカテゴリーのタイトル取得は以下のようになりました。

//カテゴリーのタイトルを取得
$category = $this->BcPage->getCategory();
$product_title = $category['title'];

真っ当感、ありますな。

ところで、このgetCategory関数のリファレンス、http://wiki.basercms.net/関数リファレンス/getCategoryにあったんですが、用例が変ですね。

BcPage->getCategory() ?>

でカテゴリー名が出力されるように読めるんですが、getCategory関数の返り値はarrayですのでそのままechoしちゃだめです。

Facebooktwitterlinkedintumblrmail

『Laravelエキスパート養成読本』献本いただいたのでキャンプへGO!

muraveです。Laravel(4系)には平素よりお世話になっております。

待望のLaravel本『Laravelエキスパート養成読本』が4月21日に技術評論社から発売されます。

著者のお一人、Laravel答えるマンことlocaldiskこと松尾大さんから献本いただきました。ありがとうございます!

先週の木曜日午後に届きまして、翌日、とても晴れていたので、休みを貰ってキャンプに行きました!(謎)

(more…)

Facebooktwitterlinkedintumblrmail

baserCMSを3.0.2から3.0.7へ。ところでカテゴリ名ってまだ簡単に取れないんです?

muraveです。どもども。

時間ができたので自社サイトのbaserCMSを3.0.2から3.0.7へアップデートしました。今朝。

残念ながら順調にはいかなかったので自分のためにもメモを残しておこうと思います。
ところでカテゴリ名ってまだ簡単に取れないんです?(前振り)

■ アップデート処理を実行出来なかった件
スマートURLをオンにした状態ではアップデート処理を実行できませんでした

ギニャーーーー!

WordPress(ココ)と同居していることもあって.htaccessにいろいろと設定を追加しているせいかPOST先のページにアクセスできなかった模様。
スマートURLについて手作業でオフ、.htaccessを調整して実行しました。

/app/config/install.php の次の行をコメントアウト。

//Configure::write('App.baseUrl', '');

/app/webroot/.htaccess の一部をコメントアウト

RewriteEngine on
RewriteBase /app/webroot
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

もちろん実行後、手作業で元に戻しました。

■ レイアウトの中でカテゴリ名を取得していたページが全滅
どうかんがえてもイリーガルなことをやっていたので文句はいえないのですが、参りました。

イリーガルなことってのはこういうこと。

//カテゴリーのタイトルを取得
$product_record = $this->BcBaser->PageCategory->find('first',array(
      'fields' => array('title'),
      'conditions' => array('name' => $product_category),
      'recursive' => -1,
));
$product_title = $product_record['PageCategory']['title'];

3.0.7のコードを調べた所 $this->BcBaser を $this->Page に変えたら行けそうな気がしたのですが、気のせいだったのでさらにイリーガル感が増してしまいました。

//カテゴリーのタイトルを取得
$page_category = new PageCategory(false, null, 'baser');
$product_record = $page_category->find('first',array(
      'fields' => array('title'),
      'conditions' => array('name' => $product_category),
      'recursive' => -1,
));
$product_title = $product_record['PageCategory']['title'];

本当はこんなことしたくないんです! カテゴリ名って簡単に取れるようになってるんでしょうか?

Facebooktwitterlinkedintumblrmail

Jenkinsでphpcsする。

1.今回は、Jenkinsでphpcsを使う手順を書いていきます。
  最近CakePHPの仕事をやっているのでcakephp-codesnifferを使用します。

2.phing、phpcs、cakephp-codesnifferのインストール
  とりあえず、以下の作業はjenkinsユーザーで行いました。
  phing、phpcsのインストール
  phpcsはphingと一緒に入ります。

composer global require 'phing/phing:2.*'

  cakephp-codesnifferのインストール

composer global require 'cakephp/cakephp-codesniffer'

  全ユーザーでコマンドを使えるように/etc/profileに以下の行を追加
  (composer globalだと対象ユーザーのホームの.composerにインストールされます。)

export PATH="$PATH:/var/lib/jenkins/.composer/vendor/bin"

  phpcsでcakephp-codesnifferを使えるようにします。

/var/lib/jenkins/.composer/vendor/bin/phpcs --config-set installed_paths /var/lib/jenkins/.composer/vendor/cakephp/cakephp-codesniffer

  以下のコマンドでCakePHPが表示されればOKです。

phpcs -i

3.phingの設定
  Jenkinsの管理→システムの設定を押下
  Phingの追加を押下し、以下のように入力します。
5

4.Jenkinsのプラグインのインストール
  以下のプラグインをインストールします。
  Checkstyle Plugin
  Phing Plugin
  PHP Plugin
  Git Plugin

5.ジョブの実行手順
  ①gitでプロジェクトを取得
  ②phingでphpcsを実行

  プロジェクトの構成は以下のようになります。
4
  appがCakePHPのプロジェクトディレクトリで
  build.xmlがphingのbuildファイル
  buildディレクトリにphpcsの設定ファイルを入れています。

  phingのbuildファイルは以下のようにしました。
build.xml




    
    
    
    

    
    

    
    
        
            
            
            
            
        
    


  上記の設定の場合次のコマンドを実行するのと同じになります。

phpcs --standard=${basedir}/build/phpcs.xml --report=checkstyle --report-file=${logdir}/phpcs-report.xml ${appdir}

  変数を展開すると以下のような感じ

phpcs --standard=/var/lib/jenkins/jobs/phpcs-test/workspace/build/phpcs.xml --report=checkstyle --report-file=/var/lib/jenkins/jobs/phpcs-test/workspace/build/logs/phpcs-report.xml /var/lib/jenkins/jobs/phpcs-test/workspace

phpcsの設定ファイルは以下のようにしました。
phpcs.xml




    
    

    
    *database.php
    *i18n.php
    *core.php
    */app/Config/*
    */app/Console/*
    */app/Lib/*
    */app/Plugin/*
    */app/tmp/*
    */app/Vendor/*
    */app/webroot/*
    */app/Test/*
    */app/View/Helper/*
    

6.新規ジョブの作成
  新規ジョブ作成を押下します。
  ジョブ名を入力し、「フリースタイル・プロジェクトのビルド」を選択します。
  ソースコード管理を設定後、ビルド手順の追加で「Phingの呼出し」を選択します。
1
  使用するPhingでmyphingを選択
  Phingの呼出しに「phpcs」と入力します。
6
  設定ファイルとの関連は次のようになります。
7

7.試してみる
  以下のようにメソッドを追加してビルドを試してみます。

log('hoge', LOG_DEBUG);
}
}

以下のように出力されました。
8

コメントでhogeと@return voidの間に1行必要
hoge(){でhoge()と{の間にスペースが必要とでています。

難しい・・。

8.sublime-phpcsを使ってみる
  package controllでPhpcsをインストールします。
9

  ローカルで以下のコマンドを実行します。

composer global require 'phing/phing:2.*'
composer global require 'cakephp/cakephp-codesniffer'
~/.composer/vendor/bin/vendor/bin/phpcs --config-set installed_paths ~/.composer/vendor/bin/vendor/cakephp/cakephp-codesniffer

Preferences→Package Settings→PHP Code Sniffer→Settings – Userと開きます。
以下のように記述します。

{
"phpcs_executable_path": "/ユーザーのホームディレクトリ/.composer/vendor/bin/vendor/bin/phpcs",
    "phpcs_additional_args": {
        "--standard": "CakePHP"
    },
}

これでだめなところを表示してくれるようになりました。

11

Facebooktwitterlinkedintumblrmail

pChart2でグラフを描く

ロウソクチャートが使えるライブラリを探してみたところ、
pChart2というライブラリを見つけましたので紹介したいと思います
もともとあったpChartから更に扱えるグラフの種類が増えました

addPointsに配列で値を入力することで、グラフに値が描画されます
今回はDBから値を抜き出して配列にしているのですが、そこは省略しています
candle_chart

// グラフ生成
$dir = dirname(__FILE__) .'/../../public/pChart/';
include($dir .'class//pData.class.php');
include($dir .'class/pDraw.class.php');
include($dir .'class/pImage.class.php');
include($dir .'class/pStock.class.php');

/* Create and populate the pData object */
$MyData = new pData(); 
$MyData->addPoints($addOpen,"Open");
$MyData->addPoints($addClose,"Close");
$MyData->addPoints($addMin,"Min");
$MyData->addPoints($addMax,"Max");

$MyData->addPoints($addDate,"Time");
$MyData->setAbscissa("Time");
$MyData->setAbscissaName("Date");

/* Create the pChart object */
$myPicture = new pImage(700,330,$MyData);

/* Turn of AAliasing */
$myPicture->Antialias = FALSE;

/* Draw the border */
$myPicture->drawRectangle(0,0,699,329,array("R"=>0,"G"=>0,"B"=>0));

$myPicture->setFontProperties(array("FontName"=>$dir ."fonts/pf_arma_five.ttf","FontSize"=>6));

/* Define the chart area */
$myPicture->setGraphArea(60,30,650,290);

/* Draw the scale */
$scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);

/* Create the pStock object */
$mystockChart = new pStock($myPicture,$MyData);

/* Draw the stock chart */
$stockSettings = array(
    "BoxUpR"=>226,"BoxUpG"=>159,"BoxUpB"=>149,
    "BoxDownR"=>180,"BoxDownG"=>188,"BoxDownB"=>201,
    'BoxUpBorderR'=>220,'BoxUpBorderG'=>75,'BoxUpBorderB'=>66,
    'BoxDownBorderR'=>127,'BoxDownBorderG'=>142,'BoxDownBorderB'=>166,
    );
$mystockChart->drawStockChart($stockSettings);

/* Render the picture (choose the best way) */
$myPicture->Stroke();

line_chart

$dir = dirname(__FILE__) .'/../../public/pChart/';
include($dir .'class/pData.class.php');
include($dir .'class/pDraw.class.php');
include($dir .'class/pImage.class.php');

$MyData = new pData(); 
$MyData->addPoints($addPoint,"Stock price");
$MyData->addPoints($addDate,"Labels");
$MyData->setSerieDescription("Labels","Months");
$MyData->setAbscissa("Labels");


/* Create the pChart object */
$myPicture = new pImage(700,330,$MyData);

/* Turn of Antialiasing */
$myPicture->Antialias = FALSE;

/* Add a border to the picture */
$myPicture->drawRectangle(0,0,699,329,array("R"=>0,"G"=>0,"B"=>0));

/* Set the default font */
$myPicture->setFontProperties(array("FontName"=>$dir ."fonts/pf_arma_five.ttf","FontSize"=>6));

/* Define the chart area */
$myPicture->setGraphArea(60,40,650,300);

/* Draw the scale */
$scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);

/* Turn on Antialiasing */
$myPicture->Antialias = TRUE;

/* Draw the line chart */
$myPicture->drawLineChart();

/* Write the chart legend */
$myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));
$myPicture->Stroke();

JpGraghとくらべても見栄えが良く、カスタマイズ性にも富んでいます
ただこのpChart2、更新がだいぶ前からされていないようなので、
その辺を注意して使わないといけないようです

Facebooktwitterlinkedintumblrmail