saber 酱的抱枕

Fly me to the moon

10/30
2016
其他

通过PHP上传文件的简单示例

最近在看php的教程,算是知道用php上传文件是怎么回事了。

首先是html代码:

<form action="t.php" method="post" enctype="multipart/form-data">
	<input type="file" name="file">
	<input type="submit">
</form>

form表单的enctype="multipart/form-data"属性是上传文件时必须的,它表示以二进制的数据格式来传输文件。

后台php代码如下:

<?php
header("Content-type:text/html;charset=utf-8");
if ($_FILES["file"]["error"] > 0)	//如果有出错信息
	{
		echo "错误:" . $_FILES["file"]["error"] . "<br>";
	}else{	//没有错误的话
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
		//移动文件到指定位置
		move_uploaded_file($_FILES["file"]["tmp_name"], __DIR__ . "/".$_FILES["file"]["name"]);
	}
?>

$_FILES存储各种与上传文件有关的信息。它的第一个的键名如"file"是文件上传框的name。第二个键名是上传文件的各项信息,如下:

$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码

因为数据是以二进制形式上传的,所以当文件上传完毕之后,文件是存储在临时目录中的一个tmp文件,路径如"D:\wamp\tmp\phpFFB5.tmp"。所以在最后我们需要使用php内置的函数move_uploaded_file()将文件移动到指定位置,完成存储。

当然了,在生产环境中,上传文件不可能不进行验证。

在前台,我们可以使用JavaScript来获取要上传的文件的属性,如name、size、type、lastModified等。这些属性可以让我们在前台做出验证。这个可以参考《修改表单中file控件的外观》一文或者再去搜索。

在后台,php中$_FILES中也可以获取上传文件的各项属性,上面也已经讲过了。这里我偷懒直接贴个现成的代码:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);        // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
&& in_array($extension, $allowedExts))
{
	if ($_FILES["file"]["error"] > 0)
	{
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
	}
}
else
{
	echo "非法的文件格式";
}
?>

通过PHP上传文件的简单示例

      1. WHUXGA
        Google Chrome 52Google Chrome 52Windows 7 x64 EditionWindows 7 x64 Edition

        用过滤可以防xss 用安全狗可以防大部分木马 有些木马很麻烦 不过大概管理好php和js就没什么问题

        其实最简单的办法就是拒绝一切从外部输入数据到数据库里 但是这样好多交互性功能就失去了

        并且gif比jpg和png更容易携带木马 所以最好不要启用gif acfun和bilibili就是这样

        最近安全越来越厉害了 没有网络也可以物理上近身强行黑进你电脑 cotton mouth计划

        还有绝对无法被杀毒软件查杀的 atom bombing加壳(虽然我加壳都用themida 但似乎atombombing加壳更高级 直接从内存硬件里加壳 再强的杀毒软件都杀不掉)

        WordPress是最容易被黑的后台 特别是老版本的 和带插件的

        关闭不需要的端口 定时查看文件 特别是cpu异常飙升的时候 严格把控用户交互性数据 可以从很大本质上防御大部分黑客

        当然有些黑客更屌炸 直接黑元服务器 那怎么样也没用 或者用欺诈软件搞出个系统界面让你错误登陆从而查看文件也是有 更有加马-入服务器-取权限-加勒索木马等屌炸招数 或者可以使用bump key直接物理上寻找你家在哪 破门而入(用promarkx自制RFID卡破RFID 用直升机摄像头飞近公寓楼上pineapple或者wifiphisher盗取wifi密码从而进内网搞破坏 或者用anduino做的小车控制从换气孔进楼房 这就是平民用的入侵蜘蛛了 只要你家有一切跟信号搭得上关系或者门锁不够高级的都能被破解 当然你值不值得被黑就得看了)

        回复