タグ: php

epgdump と epgrec の導入

今回は録画を簡単に行うというところまで。
途中、LAMPの構築が入っちゃってやたら長い記事に…
設定から録画テストまではこちらの記事を参照。

  1. epgdumpのインストール
    1. epgdumpをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53385/epgdumpr2_20111001.tar.gz
    2. 解凍。
      # tar -zxvf epgdumpr2_20111001.tar.gz
    3. epgdumpr2ディレクトリに移動してmakeしたいのだけど、
      # cd epgdumpr2
      # make
      make: `all' に対して行うべき事はありません.

      と言われてしまう。
      ので、

      # touch *
      # make clean
      rm -f core epgdump *.o
      # make

      のように、touch と make clean を挟んでからmakeする。

    4. 出来上がったepgdumpを/usr/local/bin/にコピーする。
      # cp epgdump /usr/local/bin/
    5. コピーしたepgdumpが正常に動作するか確認。
      # epgdump test /tmp/test_video.ts -
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE tv SYSTEM "xmltv.dtd">
      <tv generator-info-name="tsEPG2xml" generator-info-url="http://localhost/">
      ……………………
      ……………………
      </tv>

      と、番組情報がダーっと出てくれば動作している事になる。

  2. epgrecで必要になるものを事前にインストール
    epgrecはPHPで書かれているので、事前にPHPが動作するWebサーバ(Apacheでもnginxでも)が必要。
    ついでにMySQLも利用するので、これも必要。
    要するにLAMP環境が必要。

    1. Apache をインストール
      # yum install httpd

      以上。

    2. Apache の設定
      1. httpd.conf を編集
        # vi /etc/httpd/conf/httpd.conf

        で、
        292行目辺りの

        DocumentRoot "/var/www/html"

        317行目辺りの

        <Directory "/var/www/html">

        を好きなディレクトリに変更する。

    3. PHP のインストール
      # yum install php?php-cli php-mysql?php-mbstring php-xml

      ぐらい?
      あとで、あれこれ足りないと言われるのが面倒なら、少々乱暴だが

      # yum install php*

      で、PHPと名のつくものが全部入る。
      まともにサーバ作るならこんな事してちゃダメ。
      ちゃんと必要な物を考えて入れましょう。

    4. PHPの設定
      1. php.ini を編集
        # vi /etc/php.ini

        で、
        946行目辺りの

        ;date.timezone =

        のコメントアウトを外して、

        date.timezone = Asia/Tokyo

        としておく。

      2. php.conf の存在確認
        /etc/httpd/conf.d/ 配下に php.conf が存在することを確認しておく。
    5. MySQLをインストール
      # yum install mysql-server mysql

      で、バージョン5.1 辺りを入れてくれると思う。
      もうちょっと新しいものを入れたいなら、MySQLのリポジトリを導入して、

      # yum --enablerepo=mysql-community install mysql-server mysql

      でもいい。

    6. MySQLの設定
      1. MySQLにログイン
        # mysql -u root -p
         Enter password:

        一番初めはパスワードは無いので、そのままReturnで入れる。

      2. まずはrootのパスワードを設定。
        > grant all privileges on *.* to root@localhost identified by 'rootのPW' with grant option;

        設定したら一度ログアウトして、

        • パスワードが正しく設定されていること
        • パスワード無しではログイン出来ないこと

        を確認しておく。

      3. epgrec 用のデータベースの作成
        > create database データベース名;
        で、データベースを作成しておく。データベース名は epgrec_database でもなんでもいいので、わかりやすく好きなものを。
      4. epgrec 用のMySQLユーザの作成
        別に root でもいいけど、epgrec で使用するMySQLユーザを作成しておく。

        > grant all privileges on epgrec_database.* to epgrec用のID@localhost identified by 'epgrec用のPW' with grant option;
      5. ここまで出来たら、MySQL ログアウト。
    7. chkconfig の変更
      # chkconfig httpd on
      # chkconfig mysqld on

      で、Apache と MySQL が自動的に起動するようにしておく。

  3. epgrecのインストール
    1. epgrecをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53387/epgrec_20111001.tar.gz
    2. 解凍。
      # tar -zxvf?epgrec_20111001.tar.gz
    3. 出来上がった epgrec ディレクトリを Apache の公開ディレクトリ配下にコピーする。
      # cp -r /tmp/epgrec /var/www/html/epgrec
    4. コピー先のディレクトリに移動して、config ファイルを作成・編集する。
      # cd /var/www/html/epgrec
      # cp config.php.sample config.php
      # vi config.php
      
      $GR_CHANNEL_MAP = array(
              "GR27" => "27",         // NHK
              "GR26" => "26",         // Eテレ
              "GR25" => "25",         // NTV
              "GR22" => "22",         // TBS
              "GR21" => "21",         // フジ
              "GR24" => "24",         // TV朝日
              "GR23" => "23",         // TV東京
              "GR28" => "28",         // 放送大学
              "GR18" => "18",         // TVK
              "GR20" => "20",         // 東京MX
              "GR30" => "30",         // 千葉テレ
              "GR32" => "32",         // テレ玉
              "GR19" => "19",         // YOUプレミアム
              "GR53" => "53",         // YOUテレビ
      );

      うちで見ることができるリストはこんなカンジに。
      各地域のチャンネルリストはマスプロ電工のページにある。

    5. 録画用のshファイルもサンプルから作成しておく。
      cp do-record.sh.pt1 do-record.sh
    6. いくつかのディレクトリのパーミッションを777に変更しなくてはならない。
      # chmod 777 templates_c/
      # chmod 777 video/
      # chmod 777 thumbs/
      # chmod 777 settings/
      # chmod 777 cache/
    7. この段階までやってからブラウザで
      http://[SERVER_ADDR]/epgrec/index.php

      にアクセス。
      インストール状態をチェックしてくれる。

      1. ディレクトリとファイルのパーミッションチェック
        地上デジタルのチャンネル設定チェック
      2. MySQL設定
        インストール関連設定
      3. デジタルチューナー設定
        録画関連設定
        録画ファイル名の形式は[ %CH%_%ST%_%TITLE% ]に変更。

      すべて記入したら「EPGの初回受信」リンクを押す。
      50分ぐらいかかるかもという記述があったが、自分の環境では10分ちょっとで終わった。

    8. インストール最終ステップのページに
      「/etc/cron.d/以下にcronによるEPG受信の自動実行を設定する必要があります」
      との記述があるので、これを設定する。
      CentOSなので、ubuntu用の設定は使えない。
      けど「要はgetepg.phpを走らせれば良い」ということなので、

      # crontab -e
      30 10 * * * php -f /var/www/html/epgrec/getepg.php

      で走らせることにする。
      該当チャンネルが放送時間帯でなければいけないので、放送大学の放送がない深夜帯には設定できなかった。

  4. epgrec で録画テスト
    1. epgrec の画面が出たら予約してみる。
      「custom job番号の取得に失敗」というエラーが出たらatコマンドがインストールされていない。

      # yum install at

      でインストールする。

    2. 録画先がepgrecディレクトリ内のvideoディレクトリなので、これを変更しておく。

Spreadsheet_Excel_Writer-0.9.3のインストール

phpでエクセルファイルの出力したりするのに必要なSpreadsheet Excel Writer。
インストールする時は

pear install Spreadsheet_Excel_Writer-0.9.3

で。

WARNING: channel "pear.php.net" has updated its protocols, 
use "pear channel-update pear.php.net" to update
Failed to download pear/OLE within preferred state "stable", 
latest release is version 1.0.0RC2, stability "beta", 
use "channel://pear.php.net/OLE-1.0.0RC2" to install
pear/Spreadsheet_Excel_Writer requires package "pear/OLE" (version >= 0.5)
No valid packages found
install failed

こんなエラーで止まってしまった場合は、書いてあるとおりに

pear install OLE-1.0.0RC2

で[OLE-1.0.0RC2]を入れてから改めて実行してみる。
最終的に

install ok: channel://pear.php.net/Spreadsheet_Excel_Writer-0.9.3

と出ればインストールOK。

pearのupgrade

pearのアップデート確認は

pear upgrade

で出来る。
Proxyが必要な場合は予め設定しおく。

ちなみにバージョン確認は

pear version

pearの設定状況確認は

pear config-show

なにかしらインストールする時は

pear install mogemoge

のようなカンジで。

pearのproxy越え

[ pear ] もupgradeとかする時に、ネットに接続するにはプロキシの設定が必要。

pear config-show

と打つと現在の設定が一覧表示されるので、この中の上から3行目くらい。
「HTTP Proxy Server Address」の項目を確認する。
デフォルトでは

HTTP Proxy Server Address      http_proxy       <not set>

とかなっていると思うので、ココを修正。

pear config-set http_proxy http://192.168.1.10:8080

のようなカンジでOK。

PHP Warning: DOMDocument::loadHTML() がジャマ

PHP上で loadHTML() を使って取り込んでる時に、
HTMLがきちんとマークアップされていないと、Apacheのエラーログにこんなものが出力される。

[Mon Apr 22 01:35:15 2013] [error] [client 192.168.11.110] PHP Warning: DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: htmlParseEntityRef: expecting ‘;’ in Entity, line: 1053 in /var/www/html/hogeee/ugyaaa.php on line 20, referer: http://katzplus.net/hogeee/hidebu.php

HTMLが正しく書かれていないことが問題なのだが、HTMLを正しく書けと言っても無駄なのでこのWarningを無視することにする。

で、無視する方法。

loadHTML()

を呼び出す前に

libxml_use_internal_errors(true);

って書いとく。以上。

詳細は DOMDocument::loadHTML – php.net あたりで。

PHP

PHPのちょっとしたメモ書きはここに。

date.timezone を設定しておく

デフォルトのままで始めると phpinfo() を置いて見ただけでWARNINGを出してくれる。

You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

とりあえずTimezoneをセットしろという事なので、php.iniでコメントアウトされている

;date.timezone =

のコメントアウトを外して

date.timezone = Asia/Tokyo

とする。
もしくは、PHP書き始めたら頭に

<?php
date_default_timezone_set('Asia/Tokyo');
・・・

を書いておく。

phpMyAdminのconfig

Adminerのほうが好きだけど、設置する必要に迫られたので設置。
www.phpmyadmin.net からダウンロードして設置するだけなんだけど、一応設定ファイルが必要。

設定ファイルは同階層内に [ config.sample.inc.php ] というファイルがあるので
これをコピーして [ config.inc.php ] にリネーム。

中身はただのPHPで、配列を作成しているだけなので適宜変更する。

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

は何かしら入れて ↓ のように。

$cfg['blowfish_secret'] = 'HOGEHOGE'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

次はこの辺にDBサーバの情報を入れていく。
[ host ] 以外のところはデフォルトのままで大丈夫だと思う。

$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';

$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = '192.168.1.20';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';

こんなカンジで。

どうあってもshift-jisで表示したい

はるか昔からshift-jisで作成されているページをUTF-8環境下で表示させる時の.htaccessファイル。

AddDefaultCharset shift-jis
AddType "text/html; charset=shift-jis" .html .php

php_value default_charset               Shift_JIS
php_value mbstring.language             Japanese
php_value mbstring.http_input           auto
php_value mbstring.http_output          SJIS
php_value mbstring.internal_encoding    Shift_JIS

これだけ書いておけば十分だろうと思って書いたけど、ほんとに十分だった。

PHP5.3 インストール

Cent5入れるときにボーっとしているとPHP5.1.6が入ってしまう。
これだといろいろと都合が悪いので5.3系に入れなおす。

yum remove php*

で既存のPHPをアンインストール。
その後、

yum install php53*

で5.3系をインストールする。
インストール後、httpdを再起動するとページが「Internal Server Error」になることがある。
そのときは
ln -s /lib/php/hoehoe.so /etc/lib/php/hoehoe.so
見たいな感じでリンクをはる。

PHP Exec

記事中に書かれたPHPスクリプトを実行できるようにします。
wordpress.comには無いので Priyadi’s Place からダウンロードします。

あとはHTML表示で

<phpcode>
<?php
echo "Now : ".date("Y/m/d H:i:s");
?>
</phpcode>

という具合に<phpcode></phpcode>で囲んでコードを書き込めばOK。

Now : 2024/03/19 02:39:41
↑こんなカンジ。

注意点としてはプラグインのせいじゃないけど、
編集画面のビジュアル表示とHTML表示を行き来すると、PHPコードがコメントアウト変換されたりするのでコード付きの記事を編集する時はHTML表示一択で。