使用 PHP 5,我想通过 Web 表单上传 XML 文件并使用SimpleXML解析它。
我尝试了几个 SimpleXML 示例,它们在我的 CentOS 6 Linux 服务器上运行良好。
但是,我还没有任何使用 PHP 处理上传文件的经验。
我应该使用$_FILES
并且总是必须使用临时文件还是可以完全在内存中完成?
从 PHP Cookbook 我复制了这个例子:
<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
......