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

まず、アップロードする側の HTML は以下のようになる。特に、
<form enctype="multipart/form-data"...>
<input type="file" name="file" /&gt
の指定が必要となる。ここで 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
Posted on 2005-11-25 by yas |