明滅するプログラマの思索

WEBエンジニアとして勤務している一介の男が、日々気づいたことをまとめるブログです

自作ライブラリをSubversionでバージョン管理し、composer でインストールする

自作のライブラリを composer 経由でインストールできるようにしたい。 ただし社内だけに公開したい。 そういった場合に、VCS(バージョン管理システム)にコミットしたものを composer 経由でインストール(チェックアウト)できます。 今回は、社内で VCS とし…

composer を使おう

composer とは、PHPのライブラリを依存パッケージごと管理するツールです。 これまでにも PHP のライブラリツールとしては PEAR がありましたが、現在では composer でインストール可能なものはこちらで管理する流れが出来上がっています。 今回は今更ですが…

ストリーミング動画のプレイリストを非同期に切り替える

3つ目の HLS(HTTP Live Streaming)ネタです。 HLSプレイリストをPCで再生する場合、video.js ライブラリを利用すると楽です。 <html> <head> <link href="https://vjs.zencdn.net/6.2.7/video-js.css" rel="stylesheet"> <script type="text/javascript" src="./js/jquery-2.1.1.min.js"></script> </head> <body> <div class="movie_content_cap"> </div></body></html>

PHP で Yahoo!ID連携v2 の認証を行う

Yahoo!ID連携は現在 v2 と呼ばれるバージョンで OpenId 認証が可能です。 それまで使用されていた v1 は今年の3月以降、新規の登録が不可能となりました。 Yahoo!ID連携v1 は、PHPのSDKが用意されており、実装が楽になっていますが、v2 では Javascript SDK …

PHPのMediaInfoパッケージを利用してHLS用に動画分割する

HTTP Live Streaming を実装する際、もともとの動画ファイルを分割し、プレイリストファイル(m3u8)を作成する必要があります。 HLS(HTTP Live Streaming) を構築する - 明滅するプログラマの思索 で分割する流れをまとめてありますが、今回はこれをPHPで自動…

Google Cloud Platform の負荷分散に Let's Encrypt のSSL証明書を設定する

Google Cloud Platform(以下 GCP)で利用可能なロードバランサでフロントをSSLにするために Let's Encrypt を利用することができます。 この件については、以下の参照先が大変参考になります。 qiita.com ここでは、参照先の内容を踏まえて気を付けるべき点と…

Apache ユーザに別のユーザとして処理を実行させる

Apacheで立てた Web サーバにリクエストを送り、それをトリガとしてサーバ上で操作を行う場合、その実行ユーザはデフォルトでは apache ユーザとなります。 これだと、そのファイルのユーザ・権限によっては、アクセス権がなく実行に失敗してしまうことが考…

Postfix を利用して外部の qmail サーバからメールを送信する

Google Compute Engine は、Google の制約によりメール送信が行えません。 すなわち、SMTP(25番ポート)・SMTPS(465番ポート)・Submission(587番ポート)が閉じられています。 メールを送信する場合、サードパーティのメール送信ツール SendGrid を利用するよ…

Nginx のリバースプロキシを利用し PHP 処理を Apache で行う

Nginx のシェアが堅調に伸びているようです。 Apache と違い、静的なコンテンツを大量にさばくのに適した Web サーバですが、サーバサイドスクリプトを実行する場合はちょっとしたテクニックが必要となります。 PHP の場合、php-fpm を起動し UNIXドメインソ…

jQuery で画面を暗転させる

画面の遷移やなんらかの効果を実装する際、いったん画面を暗転させて処理を施したいとします。 その場合、jQuery では以下のようなコードで実現できます。

ps ax|grep コマンドで自分自身を除く

ps コマンドと grep コマンドを使って、実行中のプロセスを確認するとき、結果にその実行コマンドも含まれてしまいます。 たとえば、httpd プロセスを確認するとき、以下のように書きますが、 $ ps ax|grep httpd 1468 ? Sl 1:11 /usr/sbin/httpd 1469 ? Sl …

HLS(HTTP Live Streaming) を構築する

HLS とは Apple が開発した動画ストリーミングのためのロジックです。 主にSmartphone向け、iPhone / Android3.0 以上で動作します。PCではデフォルトでは再生できませんが、Javascriptベースの再生可能なプレイヤーは開発されています。 特別なサーバを必要…

ディレクトリ内のファイルを一覧表示する

PHP

PHPを利用して、サーバ上の特定ディレクトリ内のファイルを一覧表示するスクリプトを書いてみます。 実装条件 ソフトウェア バージョン PHP 5.6.30

jQuery における context の役割

jQuery には context という名のプロパティ、オプションがあります。 今回はこれの役割についてまとめてみます。 context とは 日本語にすると「文脈」とか「前後関係」なんて訳されます。 jQuery の中では、「関連付け」というような意味の役割を持っていま…

クラス内 static プロパティについてまとめ

PHP のクラスが持つプロパティ(メンバ変数)には、static 修飾子を付けることができます。

画像をHTMLに直接埋め込む方法

HTMLで画像を表示する場合、<img />タグを使用します。 このとき、画像のバイナリデータが取得できるなら、以下のように書くことができます。 EOF;

PHPで require_once / require を使わずにクラスをロードする

PHP でファイルを読み込む際 require_once や require を使うことになりますが、読み込むファイルが膨大になると大量の require_once / require を記述しなくてはいけなくなります。 spl_autoload_register() を使うと、読み込まれていないクラスをコールし…

確率による重みづけをしてn個のものを取り出す

X種類のフルーツ中からランダムにn種類取り出す場合、PHPなら mt_rand() などの関数を使えばすぐに実装可能です。 実装条件 ソフトウェア バージョン PHP 5.6.30

親ウィンドウのhtml要素・関数を操作する

Javascript の window.open() 関数を利用して開いた子ウィンドウ上で、親ウィンドウ上の html要素を操作する方法です。 Javascript での記述 Javascript では次のように記述すれば可能です。 <script> // 親ウィンドウの id=hoge 要素の value 属性を変更する obj = </script>…

data属性で JSON データを管理する

Javascript では JSON データを簡単に扱うことができます。 今回の記事では、ページ内の一時的な情報を JSON オブジェクトとしてキャッシュし、それを HTML5 の data 属性で管理してみます。 実装条件 ソフトウェア バージョン jQuery 2.2.4 Browser Chrome

qmail で特定のメール送信に失敗する問題

古いネタです。 メールサーバとして qmail を利用している環境において、特定のメール送信に失敗することがあります。 そのとき、クライアント側に帰ってくるエラーに451 See http://pobox.com/~djb/docs/smtplf.html.が含まれている場合、Bare LFs 問題と呼…

PHP でウィザード形式のページ遷移を実現する trait

Wizard とは ウィザードとは、対話形式で遷移を踏みつつ処理を進めさせるためのユーザインターフェイスのことです。 ウェブでは、複数ページにまたがるフォームなどで実装されています。 ウィザードを実装するためには、遷移途中の入力データや今どのページ…

背景色に対する文字色を明度の差で動的に決定する

背景色を動的に変更したい、そのうえで、文字も見えづらくならないように動的に変更したい、という場合があるとします。 たとえば、とある表があって、各セルの背景色を任意に指定できる場合、文字色も併せて変更しないと、文字がつぶれて見えなくなってしま…

PC と Smartphone で共有のクリック時イベントを実装する

jQuery を使って、ある要素をクリックしたときのイベントを実装する場合、PC と Smartphone で同じ挙動を実装しようとすると、ちょっとした問題にぶつかります。 それは、イベントハンドラを何にすればよいか?という問題です。 PC 向けであれば click イベ…

Client aborts on SNI unrecognized_name warning の サーバ側での対処

1つの Web サーバで複数の SSL サイトを運用する際、SNI(Server Name Indication)という拡張仕様を利用することが一般的になっています。 名前ベースで SSL のバーチャルホストを管理するということなのですが Apache では2.2.12以降において設定が可能とな…

ジェネレータを利用した MySQL データの抽出

DBテーブル上にレコードが大量にあり、これをプログラムでループさせながら処理したい、というケースは非常に多くあります。 この場合、大量にあるレコードを配列に格納することで、よく問題になるのが使用メモリの肥大化です。 PHP5.5以降で実装されたジェ…

MySQL で既存テーブルに JSON 型カラムを追加すると、デフォルトで null が入る

MySQL5.7以降で追加された JSON 型ですが、仕様を把握していないとハマるポイントがあります。 たとえば、テーブルに NOT NULL でJSON型のカラムを追加をすると、既存レコードには null が入ります。 この null は MySQL の NULL ではなく(NOT NULL で追加し…

HTTPレスポンスを返した後も処理を続ける方法

PHP

HTTPリクエストを受け取ったWEBサーバは、そのプロセスで処理をすべて実行した後にレスポンスを返却します。 この処理に時間がかかることが予想されるとき(たとえば30秒でタイムアウトするリクエストで40秒かかるとか)、プロセス内で別のプロセスを起動し…

クラスにメソッドを動的に追加する trait

PHP

実装済みのクラスに、あとからメソッドを動的に追加することができるようにします。 実装環境 ソフトウェア バージョン PHP 5.6.30 ※ ただし trait 自体は PHP5.4 以降で利用可能