LAMP開発者のためのWindows Azure講座

第8回 Azure上にPHP+MySQLでアプリを作ってみよう[その1]

この記事を読むのに必要な時間:およそ 3 分

PHPアプリケーションの作成

では,次にLAMP環境で動作するPHPアプリケーションを作成しましょう。

使い勝手を考えると,XLSファイルをアップロードすると自動的にデータが一覧表示されたほうがいいと思います。また,画面遷移もできるだけ少ないほうがいいでしょう。ここでは,1つのファイル(index.php)として作成してみます。

必要な処理としては,次の5つがあります。

  1. ファイルのアップロードと保存
  2. MySQLへの接続
  3. XLSデータから内容の読み込みとMySQLへのデータ書き込み
  4. CSVファイルの作成
  5. MySQLからデータの読み込みと一覧表示

このうち,⁠3. XLSデータから内容の読み込み」と,⁠4. CSVファイルの作成」について,以下にコードを挙げておきます。

XLSデータから内容の読み込み

まず,PHPExcelを利用するので,最初に以下の記述が必要です。PHPExcelのClassesフォルダをルートディレクトリ配下に設置しておきます。

<?php
require_once 'Classes/PHPExcel.php';
require_once 'Classes/PHPExcel/IOFactory.php';
?>

XLSデータを読み込むには,以下のようにします。なお,$xlsfileはアップロードしたファイル,$updirはアップロードしたファイルの保存先です。

<?php
  ##Excel5(Excel97-2003形式)の読み込み
  $xlsReader = PHPExcel_IOFactory::createReader('Excel5');
  $xlsObject = $xlsReader->load($updir.$xlsfile);

  ##アクティブなシートを選択
  $xlsObject->setActiveSheetIndex(0);
  $sheet = $xlsObject->getActiveSheet();

  ##経費精算書のセルからデータを取得
  $month = strftime("%Y/%m/%d",PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell('A4') ->getValue()));
  $kosai = $sheet->getCell('C23')->getCalculatedValue();
  $kaigi = $sheet->getCell('D23')->getCalculatedValue();
  $kotsu = $sheet->getCell('E23')->getCalculatedValue();
  $tusin = $sheet->getCell('F23')->getCalculatedValue();
  $shomo = $sheet->getCell('G23')->getCalculatedValue();
  $tosho = $sheet->getCell('H23')->getCalculatedValue();
  $other = $sheet->getCell('I23')->getCalculatedValue();
  $gokei = $sheet->getCell('C24')->getCalculatedValue();

  ##MySQLにデータ登録
  $result = mysql_db_query($database, "INSERT INTO sample_table (
    month, kosai, kaigi, kotsu, tusin, shomo, tosho, other, gokei, xlsfile, csvfile
    ) VALUES (
    '$month','$kosai','$kaigi','$kotsu','$tusin','$shomo','$tosho','$other','$gokei','$xlsfile','$csvfile'
    )" );
  if (!$result) { die(mysql_error()); }
?>

CSVファイルの作成

アップロードしたファイル名をcsvに変えたうえで,弥生会計でインポート可能な形式(振替伝票)に書き換えて,保存しています。

<?php
  $csvfile = basename($xlsfile,"xls")."csv";
  $fp = fopen($updir.$csvfile,"w");
  $str =
  '"2110",,"","'.$month.'","","","","対象外",0,0,"未払費用","立替経費","","対象外","'.$gokei.'",0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","交際費","","","課対仕入込","'.$kosai.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","会議費","","","課対仕入込","'.$kaigi.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","旅費交通費","","","課対仕入込","'.$kotsu.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","通信費","","","課対仕入込","'.$tusin.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","消耗品費","","","課対仕入込","'.$shomo.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2100",,"","'.$month.'","新聞図書費","","","課対仕入込","'.$tosho.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n".
  '"2101",,"","'.$month.'","雑費","","","課対仕入込","'.$other.'",0,"","","","対象外",0,0,"","","",3,"","","0","0","no"'."\n";
  $str = mb_convert_encoding($str,"SJIS","UTF-8");
  fwrite($fp,$str);
  fclose($fp);
?>

部分的に見るとわかりにくいかもしれませんが,今回のアプリケーションで固有なのはこの辺りだけです。PHPでのファイルのアップロードやMySQLへの接続などは,少し修正すれば普通のLAMP環境と同じように動作させることができます。LAMP環境と明らかに異なると言えるのは,IISでのアクセス制限などでしょう。

次回は,作成したプログラム全体と,実際にAzureにデプロイしたうえで,IISでアクセス制限をどう行うかなどを紹介しようと思います。

著者プロフィール

齋藤公二(さいとうこうじ)

インサイト合同会社

『月刊Computerwold』『CIO Magazine』(IDGジャパン)の記者,編集者などを経て,2011年11月インサイト合同会社設立。エンタープライズITを中心とした記事の執筆,編集のほか,OSSを利用した企業Webサイト,サービスサイトの制作を担当する。

コメント

コメントの記入