[メモ]祝日の取得[覚書]

お久しぶりです。

今回は、googleカレンダーから日本の祝日をプログラムで取得してみたいと思います。

実際は、cronなどで月一回程度の頻度でデータの取得を行い、新規データの登録と変更分の更新をする感じで行うと、毎年行っているような祝日のデータ登録を行う必要がなくなると思います。

まず最初に、左図のgoogleカレンダーを表示で、日本の祝日にカーソルを合わせる

続きを読む

スポンサーリンク

[メモ]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では上手く動きませんでした。

続きを読む

スポンサーリンク

[自作]ハイフンなし電話番号をハイフン付き電話番号として返す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が作成されていることがわかりましたので
上記のソースを修正しました。

スポンサーリンク