まず、アップロードする側の HTML は以下のようになる。特に、
<form enctype="multipart/form-data"...>
<input type="file" name="file" />
の指定が必要となる。ここで input type="file" name="file" となっている name 属性のところに書いてある値 (この場合は file) が、サーバ側で利用される。
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
<!--
    <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>
  </body>
</html>
サーバ側の 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)) {
    // 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);
}
?>
    トラックバック URL:
    https://perltips.twinkle.cc/trackback/21