サーバの構成をCentOS7+H2O+php-fpm(PHP7)にしてみた

最近H2Oというnginxよりも早いと言われているらしいWebサーバを知ったので、取り敢えず入れてみました。 またコレを機に、HHVMよりも早くなったらしいPHP7も気になっていたので、そちらも入れてみました。今のところWordPressは動いているみたいです。 ちなみにCentOS7です。 目次 H2Oの用意 H2Oのインストール H2Oの設定 H2Oの起動・停止 PHP7をphpenv+php-buildでインストール phpenvのインストール php-buildのインストール php-buildでPHP7をインストール PHP7でphp-fpmを設定・起動 H2Oの用意 H2Oのインストール 「Development Tools」をインストールしておけば、わりとサクッとインストール出来るようです。 »

WordPress 4.1の管理画面の一部だけ文字化けが発生したのでメモメモ

WordPressの管理画面の一部だけ文字化けが発生するという、不思議な現象が発生したので調査した内容をメモしておきます。 目次 文字化けの発生箇所 文字化け発生の原因を推測 動的生成時の翻訳処理について調査 解決策 文字化けの発生箇所 文字化けが発生したのは、管理画面内の一部分だけで、下記の通りです。 投稿画面の「メディアを追加」クリック時のモーダルウィンドウ内 メディア画面のソートするプルダウン(グリッド表示時のみ) 文字化け発生の原因を推測 全てが文字化けしているのであれば、PHPやApacheの設定かと思いましたが、ごく一部だけだったので、最初に疑ったのは翻訳ファイルの破損でした。 検証/wp-content/languages配下のpoファイルを確認し、破損していないことを確認してmoファイルに再コンパイル、上書き。 »

WordPressのカスタムフィールドをカスタムしてみた

WordPressをブログではなくもう少し大掛かりなCMSとして利用する際には、どうしても必要になってくるカスタムフィールドですが、ただのinput, textarea, selectでは面白くないので使い勝手が悪いので、色々とカスタマイズした内容を残しておきます。 目次 今回カスタマイズしてみた内容は下記の通りです。 プラグイン無しでカスタムフィールドの入力欄を追加する 通常の本文と同じTinyMCEを使う メディアアップロードボタンを使う 雑感 参考 プラグイン無しでカスタムフィールドの入力欄を追加する まずはカスタムフィールドの入力欄の追加方法からです。 カスタムフィールドの管理を行うプラグインは様々ありますが、管理側の使い勝手を向上させるためにどうしても入力欄は一定のレイアウトで、もうちょっと違う表示をさせたいんだけどな…という所が出てきてしまいます。 なので、そんな時にはプラグイン無しで入力欄を追加してしまいます。 <?php function _add_custom_ »

Jetpack for WordPressのパブリサイズ共有を色々カスタマイズしてみた

様々な追加機能を用意してくれるJetpack for WordPressですが、その中のTwitterやFacebook等のSNSに投稿時に自動的に共有をしてくれるパブリサイズ共有で色々とカスタマイズしたい所があったので、調べたことのメモを残しておきます。 Jetpack インストール方法や設定方法は、丁寧に説明されているページがありますので割愛させていただきます。 パブリサイズ共有 ソースを追ってみたところ、デフォルトでは「title url」で共有され、投稿内容と共有するサービスをwordpress.comに送信してそこから発信しているようなので、各サービス毎に内容を変更する、と言ったことは難しそうです。 ちなみに今回調べてみた内容は下記の通り。 カスタム投稿タイプでも適用させる 共有する文言を変更する 強制的に文言を変更する 共有するURLを変更する 雑感 カスタム投稿タイプでも適用させる 単純にインストール→ »

サーバをLinodeに移管してみた

何度か 移管を 繰り返してきている当サイトですが、今回はLinodeに移管をしてみました。 t1.microからt2.microという手もあったのですが、AWSを利用する理由も特にないかなぁということでまたVPSに舞い戻っています。 ついでにCentOSも7にしてみたので、色々変更点をメモメモ。 Linodeを契約 メンバー登録して、必要情報を入力、プランは「Linode 1024」を選択、デプロイ等ゴニョゴニョしていたら立ち上がりました。 開設あたりまでは、こちらのページに詳しく記載されていましたので参考にさせていただきました。 必要なモノをインストール AWSとほぼ同じ環境を用意していきますので、PHP(php-fpm)、MySQL、nginxをインストールしていきます… »

Twilio APIを使ってPHP経由でSMSを送信してみた

クラウド電話APIのTwilioをPHPで使ってSMSを送信する機会があったので、今後のためにも残しておきます。 Twilioについて Twilioとは、Web上で電話を操作することが出来るクラウド電話サービスで、APIも提供されているため、Webシステムと連動して利用することが出来ます。 最近では本人認証のために、電話番号を入力→電話 or SMSで認証コードを通知という流れがあるかと思いますが、そういった電話やSMSの送信を自動的に制御する、といったことが出来るようになります。 Twilio API Twilio APIは「Twilio REST API」というREST形式も提供されており、HTTP通信で操作を行うことが出来ます。Twitter APIやFacebook API等の最近主流の方法ですね。 »

Amazon EC2(t1.micro)のPHP実行環境をHHVMにしてみた

Facebookが開発しているPHPを高速に実行するHHVMが気になっていたので、試しにこのブログを動かしているサーバにインストールさせてみました。 HHVM単体でサーバもたてれるようですが、今回はCentOS6 + Nginx + HHVM(Fastcgi)で動かしています。 HHVMをインストール まずはHHVMをインストールします。RPMが配布されていますので、yumでサクッと(いきませんでした)。 $ wget http://www.hop5.in/yum/el6/hop5.repo $ yum install hhvm // libwarf »

spl_autoload_registerを試してみる

requireをダラダラと書くのが嫌になってきたので、splautoloadregisterについて調べてみました。 __autoloadは? __autoloadを使えば同様にrequireを記述せずとも宣言されていないクラスが呼ばれた時に特定の処理を実行させることが出来るのですが、メソッドを一つしか登録出来ない、という制約が存在します。 コレにより、二回宣言してしまって上手く動かない、みたいな事になる危険性があります。 splautoloadregisterは? そこで登場したのが、「splautoloadregister」。__autoloadを呼び出すための関数をスタックしてくれます。 複数関数を追加しても全て実行してくれるので安心です。場合によっては何度も実行される可能性もあるので、なるべく少なくした方が良いのでしょうが。 実装例 例えば下記のようなクラスを読み込むクラスを用意しておくと、「Hogecontroller」を呼び出した時に自動的に「path/to/controller/Hoge.class.php」 »

PHPでMovableTypeのデータを扱ってみた その3

その1、その2でPHPで記事内容を取得する方法を掲載してきましたが、実はあれだけではカスタムフィールドのメディアファイルを取得出来ていませんでした。 今回はPHPライブラリを利用してメディアファイルの情報を取得する方法を探した所見つかったのでメモしておきます。 実装方法 MT5の場合 その2の書き方で、メディアファイルのIDを取得します。 // メディアファイルのカスタムフィールド [field_name] を宣言 Entry::install_meta( 'entry', 'field_name', 'vclob' ); // メディアファイルは [vclob] 形式 メディアファイルのIDを取得した後は、詳細情報を取りに行きます。 メディアファイルの詳細は「fetch_ »

PHPでFlash Liteを動的生成するライブラリMedia_SWFを色々といじって自分向けにしてみた

とある案件でFlash Lite 1.1を触っていまして、少しでもややこしい動きをさせようとすると「そんなこと出来ませんよ」って言われながら、色々と試行錯誤をしていました。 その中で、容量を減らすために通常のFlashでは非同期的に素材を読み込んだりすると思うんですが「そんなこと出来ませんよ」と言われたので、PHPでswf内の変数や画像を書き換える事が出来る、と以前聞いたことがあったを思い出しながら挑戦してみました。 swfをPHPで操作するライブラリ swfをPHPで操作するライブラリは「swfmill」「SWFEditor」「Ming」という様なライブラリがあるそうなのですが、今回実装したかったのは、「変数の挿入・置換」「特定の画像の差し替え」の2つだけだったので、参考サイトで紹介されていた「 »

FuelPHPのクエリビルダでMySQLのorder by fieldを利用するためにDB::expr()を使ってみた

FuelPHP等のフレームワークを使う時はついつい便利なのでクエリビルダを利用してるのですが、どうしても特殊な操作を行う時はクエリビルダを利用するほうが分かりづらくなってしまったり、自動的にエスケープされて利用できなかったりして、結局クエリ文を直書きしてしまっていました。 その一つとして、MySQLのorder by field機能がクエリビルダにメソッドが存在しないのですが、何とかクエリビルダを使いながら実現出来ないか調べてみました。 order by fieldって? そもそもorder by fieldとは、指定した順番に検索結果を並べかえる、というMySQL独特な記法です。 SELECT * FROM `table` ORDER BY FIELD( `column`, 3, 1, »

Pleskが入ってるサーバのPHPのバージョンがアップできなかった→できた

とあるPleskが入っているサーバがまだPHPのバージョンが5.1.xだったのですが、諸事情で5.2以上したかったのでバージョンアップしようかと思ったところ、エラーが発生してしまったのでちょっと調べてみました。 ちなみにOSはCentOS5でした。 エラー内容について とりあえず、何もせずにremiレポジトリからyum updateをしようとしてみると、下記のようなエラーが発生しました。 yum --enablerepo=remi update php (…省略…) Error: Missing Dependency: any-php-sqlite2 is needed by package »

Backbone.jsのpjaxを試してみた

なんだか名前を良く聞くような気がするBackbone.jsを一度触ってみたかったので、Twitterの仕様が変わってタイムラインが取得できなくなった自サイトに組み込んでみました。 中でもpjaxが出来るとかなんとか聞いたので、その辺りを中心に試しています。むしろそれ以外は別にBackbone.jsじゃなくても良いくらいの状態なので、少しずつ試していこうかと思います。 Backbone.jsを使う準備 Backbone.jsは単体で動くわけではないみたいなので、下記ライブラリを用意しました。 Backbone.js Underscore.js jQuery jQueryの代わりにZepto.jsでも良いのですが、IE非対応みたいなので、一応jQueryにしました。 Backbone.RouterとBackbone.history Backbone. »

サーバをAWS EC2+nginx+PHP+MySQLに乗り換えてみた

これまでは、さくらのVPSを利用させていただいていたのですが、最近の流行りに乗っかろうかと思いましてAWSのEC2でサーバを立ちあげて移管してみました。 単純にnginxに慣れていない事もあって色々と躓いてしまいましたが、なんとか表示できています。 不具合がまだチョコチョコ出ちゃってますが、メインコンテンツが見れてるのでとりあえず保留中です。 また何かの時に新しく作るかもしれないので、参考サイトとメモを残しておきます。 AWS EC2の設定 まずAWSのアカウントを作ってEC2のインスタンスを作ります。 使い慣れているので、CentOSを選びましたが全部同じのはなぁ…と思ってCentOS6 64bitを選択しました。 また、nginxやPHP、MySQL、WordPressまでプリインストールされているモノもあるのですが、設定方法を勉強するためにも今回はOSのみのイメージを選択しています。 WordPressを利用するだけなのであれば、こちらの記事が参考になるかと思います。 参考サイト civic site »

PHPでMovableTypeのデータを扱ってみた その2

前回の記事で、PHPでMovableTypeの記事を取得する方法を残していましたが、カスタムフィールドの情報の取得方法がちょっと回りくどい内容でした。 もうちょっとAPI内部を調べて見たところ、もう少しスマート?な方法が見つかったので残しておきます。 今回の方法では、データベースのアクセスはfetch_entriesだけになるので、動作的には良くなっているかもしれません。 実装方法 内部を見てみると、どうも事前にどんなカスタムフィールドの情報が欲しいのか渡しておかないと、fetch_entriesでは返してくれないらしく、予め何のカスタムフィールドなのかと、ベースネームと変数型を伝えておく必要があるようです。 また、渡し方もMT5とMT4とバラバラのようなので注意が必要です。 MT5の場合 静的メソッドが用意されているので、そこにカスタムフィールドの情報を渡します。 例えば、ブログ記事に、「hoge」というベースネームのテキスト形式のカスタムフィールドが用意されている場合は下記のように記述します。 »

PHPでMovableTypeのデータを扱ってみた

個人的にMovableTypeの様な静的生成が苦手なのですが、ダイナミックパブリッシングもイマイチ上手く扱えないのでどうにかしてPHPで直接取得できないか調べていました。 今まで知らなかったのですが、どうもPHPのライブラリが内包されているようで、それを利用することで割と簡単に実装することが出来たのでメモしておきます。 記事の一覧を取得 MovableTypeのアプリケーションディレクトリ内の「PHP」ディレクトリ内にライブラリが内包されています。 簡単な使い方の例として、“最新10件分の記事を取得”する記述は下記の通り。 Movable Type 5の場合 MT5はPHP5以上を想定されているため、チェーンメソッドが使えたり、インスタンスメソッドが用意されています。 // MTのシステムディレクトリを「path/to/mt」とする $mt_dir = 'path/ »

PHPのPDOでLIMIT句でエラーが発生した時の対処

PHPのPDOを使ってMySQLにアクセスしている時に、LIMIT句でエラーが発生してしまったので、その解決方法を残しておきます。 PDOとは PHPでデータベースを扱う際に、mysql_queryでクエリ文を受け渡していると、セキュリティの関係上行わないといけないエスケープ等が面倒です。 そこで、PHP5より実装されたPDOを使うことで、プリペアドステートメントによってデータベースに安全且つ簡単にアクセスすることが出来ます。 その他、PEARで提供されているPEAR MDB2でもプレペアドステートメントを用いることが出来ます。 PDOによるプリペアドステートメント PDOを用いたプレペアドステートメントについては下記の通り記述します。 // $dbh = new PDO(); // 疑問符を用いた例 $query = 'SELECT * FROM `table` WHERE `id` »

ブログの見た目を変更してみました

WordPressの使い方が分かってきたので、テーマ作りを一からやってみようと思い、見た目を変更してみました。 カテゴリーやタグ周りがまだ貧弱ですが・・・元のテーマを壊してしまった公開できるレベルになったで変更しました。 やってみたこと トップページだけ別デザイン front-page.phpでサクッと行けるかと思ったのですが、ページ送りしても違うデザインにしたかったので、 if( ! is_paged() ) を使って、トップページ且つ最初のページ、を判断してます。 最初の投稿だけ別デザイン 最初の投稿だけ別デザインで、アイキャッチが設定されていたらその画像も表示するようにしてみました。 最初の投稿をifで判別するのは何だかイヤだったので、 <?php if( have_posts() ): the_ »

jquery-pjax + WordPressでスニペット集を作ってみた

Ajaxを利用しつつ、戻る・進むリンクが効くような作りで、Twitterと同じようにHashchangeイベントを使ったことがあったのですが、HTML5ならpushstateを覚えなくては―と思っていた頃にこの記事を読んでjquery-pjaxの存在を知りました。 また、ちょっとしたコードをメモして置く場所が欲しかったので、WordPressと組み合わせてスニペット集を作ってみました。 こんな感じです » Snippets | SUSH-i LOG まだまだ分類分けが中途半端だったり、導線が不十分だったり、ブラウザの進む・戻るを使った時に少し不具合がありますが、何とか形になったかな?と思っています。 クライアントサイド ソースファイルは、defunkt/jquery-pjax – GitHubからダウンロードできます。 クライアントサイドの記述方法は参考リンク先でもご紹介されていますが、こんな感じ。 »

nginx+php-fpmでPATH_INFOを取得してみた

前回の設定ではPATH_INFOが取得できず、404になってしまっていたので、修正を行いました。 その他、DOCUMENT_ROOTの値も変だったりしたので色々と見直しをしています。 正規表現を使って、「hoge.php/fuga」の様なURLが呼び出されたとき、スラッシュの前と後とを切り分けて、SCRIPT_NAMEと、PATH_INFOそれぞれの値に割り当てています。 location ~ \.php($|/) { set $script $uri; set $path_info ""; if »