作業ノート

様々なまとめ、雑感など

PHP

PHPのfor文で、配列の数を評価するときの違いによるベンチマークを取ってみた

PHP

きっかけは仕事でコードレビューをしていたときに、以下のようなfor文をみたこと。 for ($i = 0, $count = count($data); $i < $count; $i++) { // 何らかの処理 } $countはfor文の条件判定でしか使用されていなかったので、そのときは変数を使わずに直接書…

Silexを試してみた(7) - その他と雑感

最後に今回試したSilexに関するその他のまとめと雑感について。 今回試さなかったこと Controller Providers index.phpに、簡単にRouteが定義できるとはいえ、その数が多くなるとそれらをまとめて管理したくなると思う。そういうときに使えそうなのがControl…

Silexを試してみた(6) - Doctrine DBAL

Doctrine DBALを使ったDBへのアクセスについて。 Doctrine DBALのインストール slim版にMonologは含まれていないので、composerを使ってインストールする。 composer.jsonを { "require": { "silex/silex": "~1.1", "twig/twig": ">=1.8,<2.0-dev", "symfony…

Silexを試してみた(5) - Logging

SilexのMonologServiceProviderを使ってログを出力する。 Monologのインストール slim版にMonologは含まれていないので、composerを使ってインストールする。 composer.jsonを { "require": { "silex/silex": "~1.1", "twig/twig": ">=1.8,<2.0-dev", "symfo…

Silexを試してみた(4) - Twig

SilexのTwigServiceProviderを使ってTwigを利用する。 Twigのインストール slim版にはTwig自体が含まれていないので、composerを使ってTwigをインストールする。 composer.jsonを { "require": { "silex/silex": "~1.1", "twig/twig": ">=1.8,<2.0-dev" } } …

Silexを試してみた(3) - URLを生成する

UrlGeneratorServiceProvider Silexが提供するUrlGeneratorServiceProviderを使うとURLが生成できる。 Service ProviderとはSilex Applicationで再利用することを目的とした機能のこと。 Service Providerの登録 Silex\Applicationのregisterメソッドで登録…

Silexを試してみた(2) - 基本的なこと

基本 require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); ... $app->run(); Silex\Applicationクラスのインスタンスを作成し、そのインスタンスで 挙動を設定し、runメソッドでリクエストの処理を行う。 インスタンスはPimpl…

Silexを試してみた(1) - きっかけとインストール

きっかけ 仕事で、既存のシステムの拡張でOAuth2を使った認証とAPIの提供をするかもしれない、という話が出たので、個人的にOAuth2の調査を始めた。 そのシステムはphpで作られていたので、ひとまずphpで利用できるOAuth2のライブラリを調べる。 そこで、bsh…

pecl-uuidを使ってUUIDを生成しようとしたがSegmentation faultで失敗した

PHP

CentOS 6.5で、phpを使ってUUIDを生成するためにLes RPM de Remiのpecl-uuidをインストール。 $ sudo yum install php-pecl-uuid そして、確認のために $ cat uuid.php

PHPのバージョン情報をレスポンスヘッダに含めないようにする

PHPを使ったページのレスポンスヘッダで X-Powered-By:PHP/5.4.32 のように、X-Powered-ByにPHPのバージョンが含まれてしまう。それを止める方法。 php.iniに expose_php = Off を設定し、apacheを再起動する。 参考 PHPのX-Powered-Byヘッダを送らないよう…

apache + php + curlで外部Webサーバにアクセスできなくてはまった

新しくサーバを構築したときにはまったのでメモ。 環境はphp5 + curl。Webページとしてアクセスしたときに、プログラムでcurlのモジュールを用いて外部のWebサーバにアクセスし、その結果に基づいて処理を行う。 起きた現象は、Webページとしてアクセスした…

smartyテンプレートの変数で文字列を連結する

少しはまったのでメモ。 phpのプログラムでは連結演算子(.)で連結できる。しかしsmartyテンプレートでは、ドット(.)は配列の要素を表すので、文字列の連結ができない。 smartyテンプレートで文字列を連結する方法は2通り。 1.cat修飾子 {assign var='path' v…

phpの__FILE__のパス

PHP

シンボリックリンクのphpを実行したときにうまく動かずはまったので。 シンボリックリンクのphpファイルで__FILE__は、シンボリック元のファイルパス。 php $ php -v PHP 5.3.13 with Suhosin-Patch (cli) (built: Jun 20 2012 17:05:20) Copyright (c) 1997…

symfony-1.4を試す(2) - プロジェクト

今回は、セットアップやプログラミングをしない。 2日目: プロジェクト (1_4) - Symfonyを読むのみ。 サンプルで構築するサイトのユースケースが記されている。 求人サイトの構築 アクターは、管理者、ユーザ、投稿者、アフィリエイトの4種 ユーザ用のfronte…

symfony-1.4を試す(1) - プロジェクトを始める

仕事でsymfonyを触ることになったので、まずはsymfony本家のドキュメントを参考にしながらsymfonyを触ってみる。 環境 環境はvmwareにある、Ubuntu Server 11.10(64bit)。 環境のチェック チェック用のスクリプトをダウンロードし、実行する。 $ wget http:/…

php5-sqliteをインストールした後に起きた現象の対応

symfonyを試す過程で、php5-sqliteをaptitudeでインストールしたところ、以下のような現象が起きた。 $ sudo aptitude install php5-sqlite $ php PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/sqlite.so' - /usr/lib…

YiiのbeforeSave()の実行タイミング

PHP

beforeSave()は、validateがtrueとなったあとに実行される。例えば、登録日や更新日をCTimestampBehaviorを使って自動的に登録したい、 Fooクラスを定義したとする。 class Foo extends CActiveRecord { … public function rules() { return array( … array(…

Twigを試す

きっかけ はてブでテンプレートエンジンを素のPHPからTwigに乗り換えた理由 - id:anatooのブログを見たのがきっかけ。 PHPで使ったことのあるテンプレートエンジンは、FastTemplate, SmartyとZend_View*1。 準備 Twigのダウンロード Error - Twig - The flex…

ZipArchiveクラスを用いたzipファイルの作成と展開

PHP

PHP 5.2.11 (cli)で確認。 作成 open('test.zip', ZIPARCHIVE::CREATE); if (TRUE !== $ret) { error_log("Can't create zip: " . $ret); exit(1); } // ディレクトリの作成 $zip->addEmptyDir('bar'); // テキストファイルを追加 $zip->addFile('test.txt',…

phpMyAdminで、警告メッセージを出さないようにする

phpMyAdmin-3.2.3での話。ログイン後のトップページで以下の警告が表示されることがある。 リンクテーブルを処理するための追加機能が無効になっています。理由についてはこちらをご覧くださいmcrypt拡張をロードできません。PHP の設定を確認してください上…

system関数でバックグラウンド実行

PHP

ハマったのでメモ。 $ vi sleep.sh #!/bin/sh sleep 10 $ vi sleep.php /dev/null &"); echo "ok\n"; $ php sleep.php ok $ system関数の最後に'&'をつける。 標準出力をどこかにリダイレクトする。 '&'をつけても標準出力をリダイレクトしないと、終了する…

php.iniディレクティブの変更の可否

PHP

php.iniディレクティブの項目にある「変更の可否」の内容。 名 値 内容 PHP_INI_USER 1 ユーザスクリプトまたはWindowsレジストリ で設定可能なエントリ PHP_INI_PERDIR 2 php.ini, .htaccess または httpd.confで設定可能なエントリ PHP_INI_SYSTEM 4 php.i…

変数名と関数名の扱い

PHP

他の人が作ったPHPのプログラムで、ある関数を探そうとgrepしたが見つからない。本当にこれ動くのか?と思いつつも、調べてみた。 PHP の変数はドル記号の後に変数名が続く形式で表されます。 変数名は大文字小文字を区別します。 関数名は大文字小文字を区…

ミリ秒まで取得する

PHP

function mtime() { list($msec, $sec) = explode(" ", microtime()); return (float)$sec + (float)$msec; } via phpでミリ秒を求めるには、microtime()を利用する - くらげのChangeLog