_onichannn

【CentOS】CentOS6にffmpeg、ffmpeg-phpをインストールする。

かなりスパッとインストールできたので手順をめも。

1, まずはyumのアップデートを行う。

yum update

2, デベロップメントツールをインストール。

yum groupinstall "Development tools"

3, ProtectBaseをインストールする。

yum install yum-protectbase

4, 下記ディレクトリに移動。

cd /etc/yum.repos.d/

5, リポジトリに変更を加える前にバックアップを取る。

cp -prv ../yum.repos.d{,.orig}

6, CentOS-Base.repo, CentOS-Media.repo, virtualmin.repoの各リポジトリセクションに「protect=1」の記述を追加する。

sed -i '/gpgkey=/a\protect=1' CentOS-{Base,Media}.repo
sed -i '/gpgkey=/a\protect=1' virtualmin.repo

7, dag’sリポジトリを追加する。「/etc/yum.repos.d/dag.repo」を作成し下記を記述。

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=1
protect=0

8, dag’s rpm gpg key をローカルへ保存し、インポートを行う。

# 下記URLより取得
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt -P /tmp
# インポート
rpm --import /tmp/RPM-GPG-KEY.dag.txt

9, ffmpegをいくつかの開発パッケージと併せてインストール。

yum install ffmpeg-devel php-devel re2c php-xml ffmpeg

10, インストール後、下記コマンドでffmpegのバージョンを確認。

ffmpeg

↓

FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
...
...
...

11, ffmpeg-phpのエクステンションをコンパイル、インストールする。

# 新規にディレクトリを作成
mkdir /srv/build

# 作成したディレクトリに移動
cd /srv/build

# ffmpeg-phpのソースを取得
wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

# 解凍する
tar -xjf ffmpeg-php-0.6.0.tbz2

# 解凍したディレクトリに移動
cd ffmpeg-php-0.6.0/

# PHPの拡張モジュールをビルドする
phpize

# いつも通りのおまじないを実行
./configure

12, ここで、コンパイルエラーを防ぐために下記コマンドを実行。

sed -i 's#PIX_FMT_RGBA32#PIX_FMT_RGB32#' ./ffmpeg_frame.c

13, makeしてインストール。

make
make install

14, ffmpeg-phpエクステンションををロード。

echo -e "extension=ffmpeg.so\n" > /etc/php.d/ffmpeg.ini

15, アパッチを再起動。

service httpd restart

16, インストールはここで完了。下記コマンドでffmpegのインストール状況を確認可能。

php -i | grep ffmpeg
php -m | grep ffmpeg

 

【PHP】Composerのインストール方法めも。

覚えられないけどよくつかうのでとりあえずペタリ。

composer.jsonと同階層のディレクトリで下記を実行。

curl -sS https://getcomposer.org/installer | php

あとは下記コマンドでインストールを実行するだけ。

php composer.phar install

 

【PHP】Symfony2.3のインストール時、ICUのバージョンで怒られたら。

composer installでのインストール時、ICUのバージョンが足りないと下記のようなことを言われる。

Your requirements could not be resolved to an installable set of packages.
...
...

ICUのバージョンがたりねぇよとのことなので、アンインストール後サイドインストールを行う。

以下手順。

# ICUをアンインストール
yum remove libicu*

# ソースコードを取得
wget http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.tgz

# 解凍
tar zxf icu4c-51_2-src.tgz 

# 解凍したディレクトリに移動
cd icu/source/

# コンパイルしてからの
./configure
make

# インストール実行
make install

# intlモジュールを再インストール
pear install pecl/intl

# php_ini に追記
echo "extension=intl.so" > /etc/php.d/intl.ini

以上で完了。
この後、再び「php composer.phar install」を実行すればよい。

 

【CentOS】「ffmpeg」に「qt-faststart」プラグインを追加する。

めも。

すでに「ffmpeg」をインストールしていて、「qt-faststart」のみを追加したいといったシチュエーション。

以下手順。

下記ディレクトリに移動。

cd /usr/local/src

SVNからソースコードをチェックアウト。

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

チェックアウトしたディレクトリに移動。

cd ffmpeg

コンパイル後、qt-faststartのみを「/usr/bin/」へ移動

./configure
make
make test
make tools/qt-faststart
cp -a tools/qt-faststart /usr/bin/

これでインストールは完了。

下記コマンドでインストールの完了を確認可能。

which qt-faststart
↓
/usr/bin/qt-faststart

 

【CakePHP2.X】namespaceが使われた外部クラスの読み込み。

めも。

1, ロードしたいクラスファイルを「/app/Vendor」以下に配置。

2, 「bootstrap.php」に下記を記述

spl_autoload_register(function($class) {
	foreach(App::path('Vendor') as $base) {
		$path = $base . str_replace('\\', DS, $class) . '.php';
		if(file_exists($path)) {
			return include $path;
		}
	}
});

 

【PHP】配列の値を部分一致検索する。

めも。

今回必要だったのは下記のようなシチュエーション。

配列1の各要素を配列2の要素すべてと部分一致するかを評価し、
真の場合その要素を配列中から取り除くといった処理を行いたい。

ようは親配列(配列1)から無視リスト(配列2)の要素を取り除きたかったのである。

class hoge extends fuga{

	protected $return = array();

	public function execute(){
		// 何らかの配列
		$array = array(
			'foo_1',
			'foo_2',
			'foo_3',
			'bar_1',
			'bar_2',
			'bar_3',
		);
		// 配列にフィルターをかける
		array_walk_recursive($array, array('self', 'arrayLikeFilter'));
		$array = $this->return;

		var_dump($array);
		die();
	}

	// 配列から取り除きたい値リストを返却する関数
	protected function _getIgnore() {
		return array(
			'foo_'
		);
	}

	protected function arrayLikeFilter(&$value, $key) {
		$add = true;
		foreach($this->_getIgnore() as $file) {
			$p = "/$file/i";
			if(preg_match($p, $value)) {
				$add = false;
			}
		}
		if($add) {
			$this->return[] = $value;
		}
	}
}

上記クラスexecute()メソッドの実行結果は下記となる。

array(3) {
  [0]=>
  string(5) "bar_1"
  [1]=>
  string(5) "bar_2"
  [2]=>
  string(5) "bar_3"
}

みごとにライク検索で「foo_」から始まる値のキーを取り除く事ができた。
ただし処理的にかなり重い部類に入ると思われるので、巨大な配列を処理する際は注意されたし。

 

【CentOS】configure時、C++とg++のコンパイラが無いよと怒られたら。

こういわれたら。

configure: error: C++ compiler g++ does not work or no compiler found

こうする。

$  yum install gcc gcc-c++

 

【Javascript】小数点第2位で切り捨てる。

めも。

var val = 12.3456789;
Math.floor(val*10)/10;

10倍して小数点をずらし、小数点を切り捨て。その後小数点の位置を戻す。というアプローチ。