PHP で、アップロードしたファイルを処理する

まず、アップロードする側の HTML は以下のようになる。特に、

<input type="file" name="file" /&gt </code>

の指定が必要となる。ここで input type="file" name="file" となっている name 属性のところに書いてある値 (この場合は file) が、サーバ側で利用される。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- <pre><form enctype="multipart/form-data" action="gmap_excel.php" method="post"> -->
<form enctype="multipart/form-data" action="gmap_excel.cgi" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  <table width="600">
    <tr><td>Names file:</td><td><input type="file" name="file" /><input type="submit" value="Upload" /></td></tr>
  </table>
</form>

サーバ側の PHP は以下の通り (例として、アップロードするファイルは XML としている)。肝心なのは、以下の3行である。

<?php // ファイルのオープン $fp = fopen($_FILES['file']['tmp_name'], 'r') or die('Cannot open an XML file: ' . $_FILES['file']['tmp_name']); // ファイルを読み込む while ($data = fread($fp, 4096)) { ... } ?> <?php init(); function init() { // XMLパーサー作成 ('UTF-8') $xml_parser = xml_parser_create('UTF-8'); // 大文字変換を行わない xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); // start および end 要素のハンドラを設定する xml_set_element_handler($xml_parser, 'startElement', 'endElement'); xml_set_character_data_handler($xml_parser, 'characterData'); // ファイルのオープン $fp = fopen($_FILES['file']['tmp_name'], 'r') or die('Cannot open an XML file: ' . $_FILES['file']['tmp_name']); // ファイルを読み込む while ($data = fread($fp, 4096)) { <pre>// XMLパース処理 if (!xml_parse($xml_parser, $data, feof($fp))) { // パースエラー処理 die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } // XMLパーサの開放 xml_parser_free($xml_parser); } ?>