目录
涉及函数:
isset()用于判断一个变量是否被设置且值不为 null。
bool isset ( mixed $var [, mixed $... ] )
其中,$var
是要检测的变量,可以是一个变量名、一个数组元素或一个对象属性,支持一次检测多个变量。如果检测的变量存在且值不为 null
,返回 true
;否则返回 false
。使用 isset()
函数可以进行变量是否设置的判断,确保程序在使用变量前已经对其进行了初始化。
需要注意的是,在变量值为 false
、0
和空字符串等情况下,isset()
函数也会返回 false
。因此,在进行严格的判断时,应该使用 ===
运算符来判断变量的类型和值。
basename()函数:用于返回指定路径字符串中的文件名部分。它类似于 dirname()
函数,但与 dirname()
函数返回指定路径的目录部分不同,basename()
函数返回指定路径字符串中的文件名部分。
该函数接受一个必需的字符串参数 $path
,它表示要获取文件名的路径。
$path = "/path/to/example.php";
$filename = basename($path);
echo $filename; // 输出 example.php
在这个例子中将路径字符串 "/path/to/example.php"
分配给 $path
变量。然后使用 basename()
函数获取了 $path
变量中的文件名,并将结果存储在 $filename
变量中。最后通过 echo
命令输出了 $filename
变量的值。
如果使用的是 Windows 操作系统则需要注意,在 Windows 中,路径分隔符是反斜杠(\),而不是像在 Unix 系统中一样使用正斜杠(/)。因此,在 Windows 中使用 basename()
函数时,需要使用正斜杠或双反斜杠(\)作为分隔符。例如:
$path = "C:\\path\\to\\example.php"; // 双反斜杠作为路径分隔符
$filename = basename($path);
echo $filename; // 输出 example.php
或者:
$path = "C:/path/to/example.php"; // 正斜杠作为路径分隔符
$filename = basename($path);
echo $filename; // 输出 example.php
move_uploaded_file() 函数: 用于将上传的文件从临时目录移动到指定目录的函数。使用该函数,可以将上传的文件存储到指定的目录中并更改其名称。
bool move_uploaded_file ( string $filename , string $destination )
其中,$filename
是上传的文件路径,是 $_FILES
数组中对应文件的 tmp_name
值;$destination
是要将文件移动到的目标路径,可以是绝对路径或是相对目录。如果移动成功,返回 true
;否则返回 false
。
需要注意的是,由于安全原因,文件上传时需要进行一些验证和过滤。在处理上传文件时,最好使用 is_uploaded_file()
函数对其进行验证,同时,还应该对文件类型、文件大小等进行限制,以防止服务器受到攻击或遭受恶意代码注入。
代码详解:
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// 上传文件的路径
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); //函数basename()返回路径中的文件名部分,$_FILES为一个二维数组存储文件初始名称。 $_FILES['file']['name']:表示上传文件的原始名称。$_FILES['file']['type']:表示上传文件的类型。$_FILES['file']['size']:表示上传文件的大小。$_FILES['file']['tmp_name']:服务器端缓存上传文件的临时文件名。$_FILES['file']['error']:表示上传文件时出现的错误码。
// 文件的名字,类型,大小
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
// 判断上传文件类型是否为图像,大小是否超过100000
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {
// 判断是否能将文件移动到上传文件夹中
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// 上述情况都不是即为无效文件
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>