[メモ]libxl:PHP7でExcelを扱うphp_excelのインストール[libxlは有料]

LibXL

今回は有料のlibxlをPHP7で使うためにしたことのメモです。
※PHPExcelより全然メモリ喰わないし、グラフとかのオブジェクトもそのまま行けるのでちょーいいです。

ダウンロードページ
購入ページ(※1ライセンス$199)

今回ダウンロードしたのは現時点で最新のLinux版3.8.0です。

セットアップページのPHP extension (3rd-party, open-source)からPHPへのセットアップ方法のページへとび、そちらのページの「extension for PHP」のリンクからPHPのエクテンションのサイトへ行けます。
PHP extension (3rd-party, open-source)のページではPHP5でのセットアップ方法が書かれています。
最初この方法でexcel.soを作ってみましたがPHP7では上手く動きませんでした。

最終的に以下の様にしました。(すべてrootで実行しています)
まず、最新のPHP7を使用するためにダウンロードし展開

cd /usr/local/src/
wget http://jp2.php.net/get/php-7.1.5.tar.bz2/from/this/mirror -O php-7.1.5.tar.bz2
tar jxvf php-7.1.5.tar.bz2
cd php-7.1.5

php_excelをクローンしPHP7をchekoutし、buildconf –force実行

git clone https://github.com/iliaal/php_excel.git ext/excel
cd ext/excel && git checkout php7 && cd ../..
./buildconf --force

PHP7をconfigureしmake、make install
configureは、それぞれの環境に合わせてください。今回は端折っています。

./configure \
--with-excel \
--with-libxl-incdir=/usr/local/src/libxl-3.8.0.0/include_c \
--with-libxl-libdir=/usr/local/src/libxl-3.8.0.0/lib64
make
make install

後は、webサーバーの再起動をすると使えるようになっているはずです。
確認は、phpinfoなり、コンソールでphp -i|grep excelでどうぞ。

スポンサーリンク

[自作]ハイフンなし電話番号をハイフン付き電話番号として返すAPI[なんとなく]

おひさです。
久しぶりの投稿です。

何気に、電話番号をハイフン無しで登録することが多くなってきている昨今なんですが、
環境によっては市外局番、市内局番、加入者番号の3つに分けて登録しなければいけないことがあるんですよね・・・

そんな時に、便利なAPIを自作してみました。デモで動きは確認できます。
とりあえず、固定電話と携帯電話のみの対応となります。
デモ

現状ではエラーとか何それ?です・・・

スポンサーリンク

[mongo]配列カラム内の連想配列の複数条件一致検索

はまったのでメモ

[{
id:1,
name:"A class",
array_data:[
    {age:17, sex:"f", height:160, wight:40},
    {age:18, sex:"f", height:150, wight:35},
    {age:19, sex:"f", height:170, wight:45}
  ]
},
{
id:2,
name:"B class",
array_data:[
    {age:17, sex:"m", height:160, wight:50},
    {age:18, sex:"m", height:150, wight:55},
    {age:19, sex:"m", height:170, wight:65}
  ]
}
]

上記のようなデータが存在した場合に
array_dataカラムの配列中にage=18 且つ sex=”m”のある行のデータだけ
取得したい場合の書き方を下記に記述します。

db.hoge.find({
  "array_data.age":18,
  "array_data.sex":"m",
  $where: function(){
    var arr = this.array_data;
    for (var i in arr) {
      if (arr[i].age==18 && arr[i].sex == "m"){
        return true;
      }
    }
   return false;
  }
});

結果はid:2の行のみを取得できます。
※$whereのスクリプトを書かないとid:1も対象として取得されます。

また、phpでも上記$where部分を書けば思った通りのデータ行が取得できます。
更にarray_data内の該当行のみを取得する場合は、
プログラムで該当の連想配列行を取得する必要があります。

記憶を辿り書いてしまっているので誤って書いている部分があるかもしれまん、、

スポンサーリンク

[メモ]アニメーションgifのチェック[php]

おひさしぶりです。

タイトルの通り、チェック対象のファイルがアニメーションgifかそうじゃないかのチェックプログラムを・・・

で、とほほさんのGIFフォーマットの詳細を参考にしてみました。

/**
 * アニメーションGIFかチェック
 *
 * @params string $img_file   画像ファイル(画像ファイルまでのPATH付き)
 * @return bool               true:アニメーションGIF false:それ以外
 */
function checkAnimationGif($img_file) {
    if (!file_exists($img_file)) {
        // ファイルが無い
        return false;
    }
    if (!($fp = fopen($img_file, "rb"))) return false;
    $head = fread($fp, 6);
    if (!preg_match("/^GIF89a/", $head)) {
        // GIF89a 以外
        return false;
    }
    // カウント初期化
    $gce_cnt = 0;
    while (!feof($fp)) {
        if (bin2hex(fread($fp, 1)) != "21") continue;
        switch (bin2hex(fread($fp, 2))) {
            /*
            // 2014-11-06 削除
            case "ff0b": // Application Extension
                fclose($fp);
                return true;
                break;
            */
            case "f904": // Graphic Control Extension
                $gce_cnt++;
                if ($gce_cnt > 1) {
                    fclose($fp);
                    unset($gce_cnt);
                    return true;
                }
                break;
        }
    }
    fclose($fp);
    unset($gce_cnt);
    return false;
}

多分これで、チェックできるはず・・・

追記:2014-11-06
adobeのフォトショップで作成されたgifでApplication Extensionが含まれる通常のgifが作成されていることがわかりましたので
上記のソースを修正しました。

スポンサーリンク

[chunk]twitter REST API[api1.1]

連投・・・

土日のREST APIがハングしなかった・・・

今しがた、コンソール叩いてレスポンスヘッダー見てみたら

chunkの文字が見当たらない・・・

ちょっと前までchunkがあったと思っていたんだけど・・・

?もしかして、twitter側でchunkやめたのか??

かなり安定しているんだけど、、chunkのせいだったのか・・・

もう少し様子を見よう・・・

追記(2014-05-20 20:45):そんなことはなかったorz

スポンサーリンク