PHP | move_uploaded_file 函数
怎样移动上传的文件
最近更新时间 2021-01-19 12:48:06
move_uploaded_file 函数将上传的文件移动到新位置。
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。这种检查非常重要,否则可能造成系统文件泄露。
如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false。此外还会发出一条警告。
函数定义
move_uploaded_file ( string $filename , string $destination ) : bool
// 源文件位于:ext/standard/basic_functions.c
# 函数定义
PHP_FUNCTION(move_uploaded_file)
{
...
if (!SG(rfc1867_uploaded_files)) {
RETURN_FALSE;
}
if (!zend_hash_str_exists(SG(rfc1867_uploaded_files), path, path_len)) {
RETURN_FALSE;
}
if (php_check_open_basedir(new_path)) {
RETURN_FALSE;
}
if (VCWD_RENAME(path, new_path) == 0) {
successful = 1;
#ifndef PHP_WIN32
oldmask = umask(077);
umask(oldmask);
ret = VCWD_CHMOD(new_path, 0666 & ~oldmask);
if (ret == -1) {
php_error_docref(NULL, E_WARNING, "%s", strerror(errno));
}
#endif
} else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR) == SUCCESS) {
VCWD_UNLINK(path);
successful = 1;
}
if (successful) {
zend_hash_str_del(SG(rfc1867_uploaded_files), path, path_len);
} else {
php_error_docref(NULL, E_WARNING, "Unable to move \"%s\" to \"%s\"", path, new_path);
}
RETURN_BOOL(successful);
}
参数
- checkfilename - 上传的文件的文件名。
- checkdestination - 移动文件到这个位置。
返回值
- checkbool - 成功时返回 true,失败时返回 false。
示例1: - 使用 move_uploaded_file() 函数移动上传的文件。
<?php
/**
* PHP move_uploaded_file() 函数移动上传的文件。
*
* @since Version 1.0.0
* @filesource
*/
// 移动上传文件
if($_FILES['file']['error'] == UPLOAD_ERR_OK) {
move_uploaded_file($_FILES['file']['tmp_name'], "/uploads/pic.jpg");
}
注意:如果目标文件已经存在,将会被覆盖。