まず、アップロードする側の 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