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");
}
注意:如果目標文件已經存在,將會被覆蓋。