PHP 5 では、Web フォーム経由で XML ファイルをアップロードし、SimpleXMLを使用して解析したいと考えています。
SimpleXML の例をいくつか試しましたが、CentOS 6 Linux サーバーで問題なく動作します。
ただし、アップロードされたファイルを PHP で処理した経験はまだありません。
を使用する必要が$_FILES
あり、常に一時ファイルを使用する必要がありますか?それとも完全にメモリ内で実行できますか?
PHPクックブックから、この例をコピーしました:
<html>
<body>
<?php if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"
enctype="multipart/form-data">
<input type="file" name="doc"/>
<input type="submit" value="Send File"/>
</form>
<?php } else {
if (isset($_FILES['doc']) &&
($_FILES['doc']['error'] == UPLOAD_ERR_OK)) {
$oldPath = $_FILES['doc']['tmp_name'];
$newPath = '/tmp/' . basename($_FILES['doc']['name']);
if (move_uploaded_file($oldPath, $newPath)) {
print "File moved from $oldPath to $newPath";
} else {
print "Couldn't move $oldPath to $newPath";
}
} else {
print "No valid file uploaded.";
}
}
?>
</body>
</html>
それは正常に機能しprint_r
、私が追加したステートメントに対して、次の出力が出力されます。
Array
(
[document] => Array
(
[name] => my_file.xml
[type] => text/xml
[tmp_name] => /tmp/phpRD9cYI
[error] => 0
[size] => 1610252
)
)
そして、私はファイルを見ることができ/tmp/my_file.xml
ます。
私の質問は、一時ファイルの作成をスキップできるかどうかです。
私はそれらが好きではありません:
- それらは時々セキュリティの問題です
- それらはクリーンアップする必要があります(cronjobによって?)
- それらの名前が衝突する可能性があります (1 でない限り、おそらくめったに起こりません)
更新:また、わかりません。ファイルを読み取れないのはなぜ$oldPath
ですか? そこには見つからないので、に電話してからmove_uploaded_file()
読む必要があり$newPath
ます...