move_uploaded_file 是 PHP 中用于将上传的文件移动到新位置的函数。它通常用于处理通过 HTTP POST 上传的文件。
函数原型
php
复制
bool move_uploaded_file ( string $filename , string $destination )
参数说明
$filename (string)
上传文件的临时文件名。这个文件名可以通过 $_FILES['userfile']['tmp_name'] 获取,其中 'userfile' 是文件上传表单中的字段名。
$destination (string)
文件移动的目标路径。这个路径应该包括文件名。例如:/path/to/destination/filename.ext。
返回值
如果文件是合法的上传文件并且成功移动,返回 true。
如果文件不是合法的上传文件,或者移动失败,返回 false。
使用说明
安全性:move_uploaded_file 会检查文件是否是通过 HTTP POST 上传的,确保文件是合法的上传文件。这可以防止潜在的安全风险,比如用户尝试移动服务器上的其他文件。
文件权限:确保目标目录有适当的写权限,否则文件移动会失败。
文件覆盖:如果目标路径已经存在一个文件,move_uploaded_file 会覆盖它。
示例代码
php
复制
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] === UPLOAD_ERR_OK) {
$uploadDir = '/path/to/upload/directory/';
$uploadFile = $uploadDir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile)) {
echo "文件上传成功。";
} else {
echo "文件移动失败。";
}
} else {
echo "文件上传失败。";
}
}
?>
注意事项
确保 $_FILES['userfile']['error'] 的值为 UPLOAD_ERR_OK,表示文件上传成功。
使用 basename() 函数来防止路径遍历攻击,确保只使用文件名部分。
在生产环境中,建议对上传的文件进行额外的安全检查,比如检查文件类型、大小等。
错误处理
如果 move_uploaded_file 返回 false,可以通过 error_get_last() 函数获取详细的错误信息。
php
复制
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile)) {
$error = error_get_last();
echo "文件移动失败: " . $error['message'];
}
通过以上说明和示例,你应该能够正确使用 move_uploaded_file 函数来处理文件上传。
评论