読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

PHPmotionを導入してみた

PHP PHPmotion

PHPmotionを導入してみて、結構癖があるので導入方法をまとめます。

PHPmotionって?

PHPmotionは、Youtubeのクローン?で動画投稿サイトを作ることが出来るものです。
無料でDLすることが出来るので環境さえそろえばYoutubeのようなサイトを構築することができます。
PHPと一部Perlで構成されていて、中身もシンプルなので手を加えるのも楽です。
しかし、要求が少しシビアなので自宅サーバとかじゃないと導入出来ないと思われます。
サイトはPHPmotion :: Free Video Script - Free Youtube Clone - Free Youtube Script - Free Video Sharing software - you tube clone - PHP Video Sharing Script - Media sharing script - social networking scrript


ここで書かれている特徴は

# PHPmotion is 100% free to download and to use
# Template based design of PHPmotion means you change the look and feel.
# A growing user base of over 100 000 webmastes have already downloaded PHPmotion
# PHPmotion also has a fully featured admin area to manage your site
# Full support for mp3 audio (can be disabled)
# Supports playlists
# Fully CSS based template for easy editing

つまり、タダでテンプレートを使用しているので簡単に見た目を変えられるということと、管理画面で管理出来るよということ。
確かに管理画面もしっかりできていて、サイト自体もテンプレートできちんと分けられているので、デザインの変更が楽な印象でした。
広告を挿入するのも管理画面から簡単にできます。
場所の指定も可能。

Power Toolsとか追加テンプレートは実は有料ですが、使わないのでおk。

導入するよ!

今回は、Ubuntu 8.04 LTS Server Editionに導入。
まずは、公式サイトに書かれている必要なものを確認。

  • Servers - Linux/Unix server
  • PHP 4.3 and above (including support of CLI)
  • MySQL database server
  • LAME MP3 Encoder
  • Libogg + Libvorbis
  • Mencoder and also Mplayer
  • FFMpeg-PHP
  • GD Library 2 or higher
  • CGI-BIN
  • Be able to run background processes

この他にもsendmailが必要だったりします。


また、PHPのセッティングとして

  • open_basedir = (no value)
  • upload_max_filesize = 100M
  • post_max_size = 100M
  • max_execution_time = 1500
  • session.gc_maxlifetime = 14000
  • safe_mode = off
  • Thread saftery = disabled
  • enable_dl = On

みてわかるとおり、レンサバとかじゃ無理ですね。
コーデックはこれだけだと実は足りないので、追加する必要があります。
PHPCLI版が必要です。
もし、PHPがインストールされていない場合は

sudo apt-get install php5-cli php5 php5-gd

で導入してください。
でも、これだと不十分なので後ほど、ソースからPHPを導入します。


では、順を追って説明します。

  • まずは、サーバ環境を整えます。

これらの導入は以前のUbuntu Serverにffmpegを入れるメモ - まめ畑で書いているので、こちらの通りにffmpegffmpeg-phpを導入してください。
この時、ffmpeg-phpがうまくビルド出来なかったら、sudo apt-get install php5-ffmpegで導入してもかまいません。

sudo apt-get install mencoder mplayer flvtool2
でおk

    • phpshield

PHPのextensionでphpshieldが必要。

まずは、phpSHIELD loaders - php loaders for Windows, Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD and OpenSolarisからダウンロード。
loaderは無料です。
All loaders for Linux. PHP 4.3.x to PHP 5.x をDL

  • 解凍してextensiondirへコピー

unzip phpshield.loaders.linux.zip
sudo cp phpshield.5.2.lin /usr/lib/php5/20060613+lfs/

  • Configファイルを作成

/etc/php5/apache2/conf.d
sudo vim phpshield.ini
extension=phpshield.5.2.lin を書きます。

sudo /etc/init.d/apache restart

    • PHPのGDライブラリのためにPHPをソースからビルド
    • aptで導入されるGDモジュールはPHP5のバンドルパッケージでないためいくつかの関数が使用出来ないのです。CAPCHAを作成するためのライブラリで使用している関数がちょうど使えないので、ソースからPHPを導入します。
    • MOVION.net » GDモジュールのインストールon Ubuntuを参考にしました。



しかし、すでにPearが既に導入されているとビルド中にエラーで止まるので以下のファイルをリネームしておいて下さい。
/etc/pear/pear.conf
pear.conf.bakとかにリネーム

cd /usr/src
sudo apt-get install build-essential debhelper fakeroot
sudo apt-get source php5
sudo apt-get install libsnmp-dev
sudo apt-get build-dep php5
cd php5-5.2.4


設定ファイルの編集
sudo vim debian/rules
–with-gd=shared,/usr –enable-gd-native-ttf
の行を
–with-gd=shared –enable-gd-native-ttf
と修正。,/usrを消すだけ。

sudo dpkg-buildpackage -rfakeroot
cd ..
sudo dpkg -i php5-gd_5.2.4-2ubuntu5.3_i386.deb
/etc/init.d/apache2 restart


sudoが面倒だったら、sudo -iを一番最初に投入する。
ビルドには時間がかかるので気長に待つ。

    • その他

sudo apt-get install php5-mysql mysql-server sendmail

    • PHP.iniの編集

sudo vim /etc/php5/apache2/php.ini

  • open_basedir =
  • upload_max_filesize = 100M
  • post_max_size = 100M
  • max_execution_time = 1500
  • session.gc_maxlifetime = 14000
  • safe_mode = off
  • enable_dl = On

と書き換えて保存してApache再起動

Mysqlにデータベースを作成します。
DBの名前は任意です。
今回は、DB名:hoge User:fuga PASS:piyo とします。


mysqlにログインして以下を実行
CREATE DATABASE 'hoge';
GRANT ALL PRIVILEGES ON hoge.* TO fuga@localhost IDENTIFIED BY 'piyo' WITH GRANT OPTION;

    • mimeタイプの設定

sudo vim /etc/apache2/mods-available/mime.conf

#AddHandler cgi-script .cgi

AddHandler cgi-script .cgi .pl
と変更。


sudo vim /etc/apache2/sites-enabled/000-default
に以下を追加。
今回は、/var/www/hoge/にUPしたとします。

<Directory "/var/www/hoge/cgi-bin/">
       AllowOverride All
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch -Indexes
       Order allow,deny
       Allow from all
</Directory>


Apache再起動。

セットアップ

セットアップは以下のサイトを見ながら行います。
PHPmotion Wiki: Installation

  • ファイルのUP

PHPmotionのDownloadサイトからV2をDLします。
この際、登録が必要ですがDL終了したらアカウント消しても問題ないです。

zipを解凍して、PHPMOTIONフォルダの中身をサーバにUPします

/setup
/pictures
/classes
/temp
/logs
/addons
/uploads
/uploads/avi
/uploads/thumbs
/uploads/audio
/uploads/audio/temp
/uploads/pictures

    • 以下のディレクトリとファイルをsudo chmod 755 -R dirName でパーミッションを変更。

以下のディレクトリの中身も変更されていることを確認
/cgi-bin/
/cgi-bin/audio/

    • サブディレクトリの設定(documentRoot直下に配置した場合はこの設定は必要ないです)

/cgi-bin/uu_default_config.pm と /cgi-bin/audio/uu_default_config.pm を編集

config_file_name => 'uu_default_config',
temp_dir => $ENV{'DOCUMENT_ROOT'} . '/temp/',
upload_dir => $ENV{'DOCUMENT_ROOT'} . '/uploads/avi/',
redirect_url => '/uploader_finished.php',
path_to_upload => '/uploads/avi/',

config_file_name => 'uu_default_config',
temp_dir => $ENV{'DOCUMENT_ROOT'} . '/hoge/temp/',
upload_dir => $ENV{'DOCUMENT_ROOT'} . '/hoge/uploads/avi/',
redirect_url => '/hoge/uploader_finished.php',
path_to_upload => '/hoge/uploads/avi/',


uploader_conlib.php と audio_uploader_conlib.php を編集

$path_to_upload_script = '/cgi-bin/uu_upload.pl';
$path_to_ini_status_script = '/cgi-bin/uu_ini_status.pl';

$path_to_upload_script = '/hoge/cgi-bin/uu_upload.pl';
$path_to_ini_status_script = '/hoge/cgi-bin/uu_ini_status.pl';

    • Uploadサイズの設定と受け入れファイルの拡張子の設定

php.iniでUploadMaxSizeを設定しましたが、こちらのファイルでaudioとvideoのUploadMaxSizeを設定しないと20MまでのファイルしかUP出来ません。


/cgi-bin/uu_default_config.pm と /cgi-bin/audio/uu_default_config.pm を編集

max_uploadの項目に受け入れる最大のファイルサイズを設定します。
単位はバイトです(100Mは104857600と書く)

allow_extensionsとdisallow_extensionsで許可するファイルを設定。
allow_extensionsはそのままでおkなんですが、disallow_extensionsは増やしておいた方がいいかも。

設定

ここまで設定できればあとは
http://yourAddress/hoge/setup/
にアクセスすると設定ウイザードが開始されるので指示に従ってください。
DBのテーブルなどが自動的に作成されます。

ここで注意なのはffmpegのパス。
事前に確認をしておいて下さい、今回の環境では/usr/local/bin/ffmpeg と書き直しました。
他のものは標準のパスでおkです。
もし、設定中にエラーが出たら適時修正してください。


設定が完了したらsetupディレクトリを削除してください。

これで使えるように

さて、http://yourAddress/hoge/ にアクセスしてみてください。
サイトが表示されていると思います。
赤いマークで×が表示されている箇所がありますが、Videoが一本も上がっていないと表示されます。


http://yourAddress/hoge/siteadmin/
が管理者用ページです。
標準ではID・PASS共に adminなので変更をして下さい。

少しだけ使い方

動画をUPするには登録が必要です。
登録フォームを入力すると、アドレス確認のメールが送信されるので、その中のアドレスにアクセスしてください。
動画をUPするとエンコードが始まるのでエンコード完了まで動画が表示されません


管理者ページの使い方は簡単。

  • 動画を消す
    • Media -> Active Videosで削除したい動画をチェックしてDeleteをクリック
    • 実は動画やAudioはサーバから削除されていないので、動画やサムネを完全に消すには Management -> System Maintenance でDelete Completelyをクリック
    • 元に戻すには同じページでUn-Deleteをクリック
    • ユーザを消した時も同じ操作が必要です
  • General中のAuto approve profile photoはYESにしておくと、ユーザがプロフィール写真を変更した際に承認しなくても即座に変更されて便利です

その他こまごまと

  • 動画をサーバから消しても、DBには実は残っているのでグループを削除できなかったりします。バグなのかどうかわかりませんが、videosテーブルのapproveをdeletedに変更するだけで、完全削除時にこのエントリを消していないのが原因です。$sql = "DELETE FROM videos WHERE indexer = $video_id"";をDBにログインして発行すればおkなのですが面倒なのとエントリを消しても問題ないので、ソースにこの処理を追加して完全に削除するときはこのSQLを実行するようにした方が便利。本当は不具合があるのかも・・・。でも、動画ないのにカテゴリが消せないのはおかしい。

もしくは、カテゴリの情報を表示しているソースのSQLを修正して、deletedになっているものを除外するようにした方がいいかもしれないですが、結局エントリにはゴミが残るので考え物。


siteadminディレクトリのmaintain.phpが削除をしている箇所を含んでいるので、server maintenaceの項目の中の

$sql = "UPDATE videos SET approved ='deleted' WHERE indexer = $video_id";

$sql = "DELETE FROM videos WHERE indexer = $video_id"";

としてみた。
このあたりは、もっと検討が必要。

  • 実は日本語もおk
    • ファイル名は英数字しかだめですが、動画などのコメントや説明やタイトルは日本語が使えます。もちろん日本語での検索もおk
    • しかし、siteadmin中のテンプレートの文字コードUTF-8ではないので管理者サイトでは文字化けします
    • なので、siteadminディレクトリ中の拡張子が「htm」となっているファイル中のmetaタグを以下のように修正。もちろん全てのファイルを。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    • これで管理者サイトでも日本語がおkに
    • プレイヤーの右下のロゴはimage_s/ディレクトリ中にあるのでこれを変更すればおk
    • サムネイルは動画開始1秒後を採用しています、しかしフォームを追加してソースを書き換えると任意の位置をサムネイルにできます。
    • UPしたオリジナルファイルをエンコード完了後削除するかどうかも設定可能

まとめ

いろいろと癖がりますが、なれると導入もらくなはず。今回は色々とはまってしまい時間がかかりましたが・・・。
ffmpegmencoderエンコードを行っているのでマシンスペックによては時間がかかります。
エンコードエラーを起こしても通知されないので注意が必要です。
管理者画面でいろいろと設定できるのでいろいろ試してみてはどうでしょうか?


何かありましたらコメントをいただけるとありがたいです。
また、わかる範囲でお答えします。


こういうものがフリーとはいい時代ですね。