質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

PEAR_Error::addTranslationFile()を解決するにはどうしたら良いでしょうか?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 335

mvc_php

score 7

前提・実現したいこと

サンプルコードを参考にPHPで六曜を含むカレンダーを作成したいと思っていますが以下のエラーメッセージが発生しました。
PHPのバージョンを5.4や7.2へ変更しましたが7.2へ変更すると異なるエラーになりました。
解決策が見つからずご教授いただけないでしょうか。
何卒宜しくお願い致します。

発生している問題・エラーメッセージ・49行目

Fatal error: Call to undefined method PEAR_Error::addTranslationFile() in
$dh->addTranslationFile($ja, "ja_JP");

該当のソースコード

<?php
//パッケージ等の読み込み
require_once("Calendar/Month/Weekdays.php");
require_once("Date/Holidays.php");
require_once("./lib/qreki.php");
define ('CALENDAR_FIRST_DAY_OF_WEEK',0);

//六曜を配列にいれる
$rokuyo = array('大安','赤口','先勝','友引','先負','仏滅');

//カレンダーを表示する時の年を取得
if(!$_GET[year2]){
  $year = date("Y");
  }else {

    if(is_numeric($_GET[year2])){
  $year = $_GET[year2];
    }else{
    $year = date("Y");
echo <<<EOM

<script type="text/javascript">alert("半角英数で入力して下さい");</script>
EOM;
    }
  }

//カレンダーを表示する時の月を取得
if(!$_GET[month2]){
  $month = date("m") + 0;
  }else{
  $month = $_GET[month2];
  }

$calMonth = new Calendar_Month_Weekdays($year, $month,0);
$calMonth->build(); 

$prev = $calMonth->prevMonth('object');
$p_year = $prev->thisYear();
$p_month = $prev->thisMonth();

$next = $calMonth->nextMonth('object');
$n_year = $next->thisYear();
$n_month = $next->thisMonth(); 

//祝日判定
// 「Date_Holidays_Japan」インストール先のパスを指定
$ja = "data/Date_Holidays_Japan/lang/Japan/ja_JP.xml"; //ja_JP.xmlのインストール先
$dh = &Date_Holidays::factory("Japan", $year, "ja_JP");
$dh->addTranslationFile($ja, "ja_JP");
$holidays = array();

//祝日の月日をキーに祝日名を配列に格納
foreach ($dh->getHolidays() as $value) {
  $holidays[$value->getDate()->format("%m%d")] = $value->getTitle();
}

//フォーム部分
echo '<h1 style="font-size:25px;">'.$year.'年'.$month.'月<span style="font-size:16px;">のカレンダー</span><span style="font-size:14px;">[六曜、祝日あり!]</span></h1>
<div id="cal_hyouji">
<div id="pre_next">
<a href="?year2='.$p_year.'&month2='.$p_month.'"><<前月</a>  
<a href="http://サイトurl.com">今月</a>  
<a href="?year2='.$n_year.'&month2='.$n_month.'">次月>></a><br />
</div>

 <form action="" method="get">
 <input type="text" name="year2" value='.$year.' size="5"> 
       <select id="month_search" name="month2">
           <option value="1">1月</option><option value="2">2月</option><option value="3">3月</option><option value="4">4月</option><option value="5">5月</option><option value="6">6月</option><option value="7">7月</option><option value="8">8月</option><option value="9">9月</option><option value="10">10月</option><option value="11">11月</option><option value="12">12月</option>          </select>

<input type="submit" value="の「かれんだー」を見る" class="btn btn btn-large"/>  
</form>

<table id="top_ca">
<thead id="day_line">
<tr>
<th class="sun">日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th class="sat">土</th>
</tr>
</thead>
<tbody>';

while ($day = $calMonth->fetch()) {
  if ($day->isFirst()) {
  echo '<tr>';
  }
  if ($day->isEmpty()) {
  echo "<td class=\"empty_d\"> </td>";
  }else {
  $date = sprintf("%02d",$day->thisMonth()).sprintf("%02d",$day->thisDay());
  if (array_key_exists($date, $holidays)) {
    echo "<td class=\"holiday\">";//祝日のとき(cssで色を付けるため)
  }else if(date("m") == $day->thisMonth() && date("d") == $day->thisDay()) { // 今日の色分けとリンク
    echo "<td class=\"today\">";
  } else if ($day->isFirst()) {
    echo "<td class=\"sun\">";//週の最初(日曜)のとき(cssで色を付けるため)
  } else if ($day->isLast()) {
    echo "<td class=\"sat\">";//週の最後(土曜)のとき(cssで色を付けるため)
  } else {
    echo "<td>";
  }
  echo $day->thisDay()

  //祝日に該当する月日の場合、祝日名を出力
  if (array_key_exists($date, $holidays)) {
    echo "<div class=\"holiday_td\">".$holidays[$date]."</div>";
  }

//六曜を表示
  echo "<div class=\"rokuyou_font\">[".$rokuyo[get_rokuyou($year,$month,$day->thisDay())]."]</div>";  
  echo "</td>";
  }
  if ($day->isLast()) {
    echo "</tr>\n";
  }
}

echo '</tbody></table>
</div>';
?>

用意したライブラリ

https://github.com/pear/Date
https://github.com/pear/Calendar
https://github.com/pear/Date_Holidays
https://github.com/pear/Date_Holidays/blob/trunk/lang/Japan/ja_JP.xml

 その他[./lib/qreki.php]

http://jun.2chan.net/script/qreki.php.txt

開発環境

・Windows10 Pro 64bit
・XAMPP 3.2.2
・PHP Version 5.6.40
・PEAR
・Google Chrome 71.0.3578.98

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

PEARとかもはや誰も使ってないのでこういうの使ったほうがいいのでは。
https://qiita.com/suzunone/items/949e71ea7ea86630524f

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/29 15:33

    ご回答有難う御座います。
    Composerという素晴らしいライブラリ管理ツールがあったのですね。
    それも結構前からあったとは・・・お恥ずかしいです。
    頑張って挑戦したいと思います!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる