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

epgrec UNAで予約できないのが解決した!

一か月ぐらい前にLinux Mint18にepgrec UNAを入れて番組表を表示させるとこまでできたのですが番組表から予約することができずにそのまま放置していました。
具体的には簡易予約をクリックしても何も起きずに予約されない。また予約カスタマイズから予約をクリックすることもできませんでした。
epgrec UNAインストール手順(Ubuntu・Debian編) | 自分に負けないラボラトリー
このサイトを参考にしながら入れたのですがうまくいきません
F12のコンソールで見てみたらこんな感じでした。 f:id:beback:20161103221859p:plain GET http://192.168.0.20/simpleReservation.php?program_id=23834 500 (Internal Server Error)
ということでsimpleReservation.phpを見てみたのですが怪しいところは見つからず
Internal Server Errorだけじゃ原因が見当もつかないのでターミナルからphpを引数つきで実行できないかなと調べているとphp-cgiというものでできるらしく

$ sudo apt install php7.0-cgi
$ sudo php-cgi simpleReservation.php program_id=40289
PHP Fatal error:  Uncaught Error: Call to undefined function mb_strlen() in /var/www/epgrec/reclib.php:61
Stack trace:
#0 /var/www/epgrec/Reservation.class.php(1016): mb_str_replace('%TITLE%', '\xE3\x82\xB0\xE3\x83\x83\xE3\x83\x89\xEF\xBC\x81\xE3\x83\xA2...', Array)
#1 /var/www/epgrec/Reservation.class.php(835): Reservation::at_set(1478205992, 1478214000, '87', '\xE3\x82\xB0\xE3\x83\x83\xE3\x83\x89\xEF\xBC\x81\xE3\x83\xA2...', '\xE5\xBC\xB7\xE9\xA2\xA8\xE3\x81\xA7\xE5\x80\x92\xE3\x82\x8C...', '1', '40289', 0, 1, 0, 0, 10, false, 0, false)
#2 /var/www/epgrec/Reservation.class.php(96): Reservation::custom('2016-11-04 04:5...', '2016-11-04 08:0...', '87', '\xE3\x82\xB0\xE3\x83\x83\xE3\x83\x89\xEF\xBC\x81\xE3\x83\xA2...', '\xE5\xBC\xB7\xE9\xA2\xA8\xE3\x81\xA7\xE5\x80\x92\xE3\x82\x8C...', '1', '40289', 0, 1, 0)
#3 /var/www/epgrec/simpleReservation.php(15): Reservation::simple('40289', 0, 1, 0)
#4 {main}
  thrown in /var/www/epgrec/reclib.php on line 61
Status: 500 Internal Server Error
Content-type: text/html; charset=UTF-8

今度はエラーコードの読みがいがあります。
phpに詳しくないので Call to undefined functionでググってみると サーバーの設定(php.ini)でマルチバイト関数(mb_で始まる関数)が無効になっていることもあるようです。
Fatal error: Call to undefined functionというエラーが発生する原因について | ぷろめし|プログラミングよりも飯が好き
そこでphp.iniの;extension=php_mbstring.dllの部分のコメントアウトを外したのですがだめでした。

$ sudo apt install php7.0-mbstring

このモジュールが入ってなかったようです。
これで解決しました。php.iniは弄らなくても大丈夫みたいです。

感想

ググって最初に出てきたサイトにはphp7.0-mbstringのことは書いてなかったけど次のサイトには書いてあった...。
録画コマンドはちゃんと動作するのにepgrecが上手く動作しないという人はphpのモジュールを見直してみるといいかもしれません。
今回エラーの原因を調べるときブラウザのコンソールとphp-cgiを使ったのですが、普通の人はどうやっているのでしょうか?慣れない作業で疲れました。