WSLでphp-fpmを動かしていると挙動がおかしい事がある

よくあるnginx+php-fpmの環境でlaravelを動かした時に遭遇したんですが、
レスポンスが返ってこないことが頻繁にある。
原因を調べていたら
fastcgi_finish_request
ここで止まってる模様。
関数の説明読めばわかりますが別になくても問題ないものです、
なのでこれを呼びだしているところをコメントアウトすれば解決します。
laravelの場合は vendor/symfony/http-foundation/Response.php の中に一か所だけあります。
他のものを動かす場合でもgrepで探して呼び出さないようにしてしまえば大丈夫だと思われます。

PhpExcelが更新されてないと思ったらPhpSpredsheetになってたようだ

PHPOffice/PhpSpredsheet(github)

phpからexcelを扱う場合、comを使う方法もありますが、それはWindowsでExcelが入っていないと使えないので、
一般的に使用されているようなサーバーでは使用できません。

PhpExcel/PhpSpredsheet使えばLinuxでも読み書き可能になります。
管理画面から直接Excel読ませたりとかできるようになるので手間が軽減できてなかなか良いです、
私の場合はExcelを汎用的にdbにインポートできるようなものを作って使ってます。

今度はCodeigniter

うーん、サーバーサイドの仕事に復帰?してからまだ1年も経たないのにずいぶんいろんなフレームワークを触る事になったもんだ。
FuelPHP,CakePHP,Laravel,Codeigniter,
Laravelは自主的にやったけど他は仕事の都合で使う事になった感じ。

まだあんまりコード書いてないけど、
Codeigniterも素直で使いやすそうな感じがする。

phpのフレームワークいくつか使ってみて軽く感想

fuelphp まぁ普通。
cakephp 最悪、勝手にいろいろするな!細かい事やろうとしないならいいのかもしれないが・・・
laravel 速度はともかく素直で使いやすい、さすが今一番人気なだけはある。

laravel本体とは別だけど yajra/laravel-datatables が使いやすくて good。
今度 phalcon も使ってみたいなー。

Laravel5.2のクエリビルダをオーバーライドしてみた

クエリビルダを直接使う場合はオーバーライドしたクラスを使えばそれで済むのだが、
モデルだとどうしていいかわからなかったので調べて実装してみた。
fuelphpとかだとmodelに書けば動いてくれたけど、
laravelの場合はクエリビルダを別に生成してるのでmodelオーバーライドしても有効にならない。

開始終了を入力して範囲検索する場合、
どちらか片方だけ入力した場合とか入力してない場合にいちいち毎回判定してwhereに振るのがめんどくさい。
ということで
whereBetweenをオーバーライドして勝手にやってくれるようにする。
適当に app\CustomQueryBuilder.php とかに以下を保存。
入力判定をemptyでやってるのは存在しない場合に null ではなく “” を返しているため、
数値で0を使いたい場合等は対策が必要。

<?php
namespace App;


use Illuminate\Database\Query\Builder;

class CustomQueryBuilder extends Builder
{
    /**
     * 指定なしならそのまま、片方だけなら where に振る
     *
     * @param string $column
     * @param array $values
     * @param string $boolean
     * @param bool $not
     * @return \App\ModelBase
     */
    public function whereBetween($column,array $values,$boolean = 'and',$not = false)
    {
        if( !empty($values[0]) && !empty($values[1]) ){
            return parent::whereBetween($column,$values,$boolean,$not);
        } else if(!empty($values[0])){
            return  $this->where($column,'>=',$values[0]);
        } else if(!empty($values[1])){
            return  $this->where($column,'<=',$values[1]);
        }

        return $this;
    }
}

モデルのクエリビルダ作ってるところをオーバーライドする、これを継承してモデル作れば全部に適用されて楽。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use DB;

class ModelBase extends Model
{
     protected function newBaseQueryBuilder()
    {
        $connection = $this->getConnection();
        $grammar = $connection->getQueryGrammar();
        return new CustomQueryBuilder($connection,$grammar,$connection->getPostProcessor());
    }
}

 

CakePHP2.8で作ってたものをLaravel5.2に移植してみるテスト

仕事が暇なので仕事中に実験的に移植中、
基本的にLaravelのほうがスマートに書ける感じ、
CakePHPはなんか余計な事してくれる感じが強くて嫌、特にDB周り、
そこら辺はLaravelだとイイ感じ。

ただ、機能的に存在してないものとかLaravelのほうが使いにくい部分もある、
そういうところは生php関数使ったりして補う。