计算机, 文件类型
PHP:文件上传到服务器
通过PHP下载文件 - 一个非常有趣的案例,对此必须非常小心地靠近。 在互联网上,你可以找到文件上传的实施例子不胜枚举,但不是所有的人都很好,符合安全规定。
这样的事情需要带一个结论,即使这需要很长的时间。 如果你在代码中留下一个缺口,那么你的整个服务器可能会受到影响。
安全
随着PHP 文件上传到服务器很容易进行。 该代码是非常简短。 短短几行。 然而,这种方法是很危险的。 更多的时间和代码远离安全线。
危险的是,如果你不去做检查,任何攻击者可以上传他们的脚本您的服务器上。 在这种情况下,将有充分的机会。 他可以做任何他想做的:
- 删除数据库;
- 删除文件的网站;
- 修改文件的网站;
- 您的广告添加到您的网站;
- 下载的病毒;
- 重定向所有用户在其网站上;
- 和许多前来其他的事情要介意攻击。
您应经常检查,试图下载文件的用户。 例如,如果你只上传图片,有必要验证该文件是一个图像精确。 否则,你将下载任何东西。
究竟如何实现验证,它会显示,与直接检查脚本上传文件。
创建一个PHP形式
文件上传表单是非常简单的。 缺少浏览按钮,上传按钮。
介绍如何创建表单不会,因为这很容易。 进一步说明假定您已经有HTML的基本概念(否则你不会寻找有关下载的PHP)。
但请注意,你需要在表格中的数据添加enctype属性。
否则,文件处理的数据将不会被传输。
它应该如何运作?
之后,它会被要求接受该文件所在的路径。
如果路径没有出现,再次执行该操作。
点击下载文件处理程序后,可以给任何信息。
例如,你可以写,指出该文件是“某某”的名字已经成功上传到了“某某”的文件夹就行了。 当然,文件名会给出总是不同的。
通常,该信息被用来调试代码。 因此,可以验证该数据被发送和发生在所需的目录写入。 也就是说,即使文件名不显示。 由于这些额外的信息是,用户并不需要。
这是有道理的输出只有当用户下载多个文件名。 这种情况下,考虑远一点。 让我们不要超越自己。
调整
在PHP文件上传到服务器需要一定的设置,应在php.ini文件来完成。 该文件包含了大量的设置。 他们都我们不需要。 我们感兴趣的是三行:file_uploads,upload_tmp_dir和的upload_max_filesize。
请注意,这些设置会影响您的所有网站的服务器上,而不是任何一个。 因此,要设置基于您必须加载用户的事实的最大尺寸。 不建议设置过大。
一旦你改变这些参数的值,则需要重新启动服务器。 否则,设置才会生效,因为它们在服务器负载时读取。
您可以通过SSH连接到服务器控制台做到这一点。 只需输入命令service httpd的重启,然后设置生效。
另一种方法 - 通过ISP面板或者通过付费面板供应商重新启动。
数组文件
在PHP文件上传由数组$ _FILES完成。 它包含了所有关于我们下载文件的信息。
要了解什么信息都包含在阵列,足以在文件处理程序编写下列英寸
选择任一文件,然后点击“上传”。 在处理程序页面将显示存储在$ _FILES信息。 该变量以大写字母编写的。 PHP - 语言敏感。
正如你所看到的,此数组中有很多领域。 所有这些都对我们非常重要。 第一个字段包含在它是您的计算机上使用的形式的文件名。
该类型列指定的文件类型。 tmp_name的值字段对应的临时文件的名称。 脚本结束后都将被删除。
错误字段包含一个错误代码。 这是一个远一点。 大小 - 以字节为单位的大小。
错误
通过PHP文件上传进行总是伴随着一个错误代码。 在“错误”输入了错误信息。 截图误差为零。
考虑所有错误的值:
下面是一个示例形式来下载文件,其指示上载的文件的数量的限制。
PHP:文件上传脚本
由于所有在实践中进行? 在PHP文件上传时拷贝命令。 如果你有兴趣在如何下载文件的问题,答案很简单禁止复制,它采用两个参数 - 源文件和目标文件。
但是,如上所述,它不能限制出于安全原因。 例如,检查出什么样的文件,我们的船,你可以数组$ _FILES中使用的字段类型。 首先,让我们来对付检查,然后转移到完整的脚本
比方说,你想允许用户上传仅GIF,JPEG或PNG的分辨率的照片。 表明它可以是这样的。
如果($ _ FILES [ 'file_upload'] [ '类型']!= “图像/ GIF”){
回声“对不起,我们只支持下载的Gif档案”;
退出;
}
如果你想出货的所有3种类型,只需添加一个附加条件,以其他类型的图像。
复制(图像1,图像2):复印像这样做。
在我们的例子中,当工作从PC到服务器的下载,你可以这样做
副本($ _ FILES [ 'file_upload'] [ “tmp_name的值”], “1.JPG”)
也就是说,该文件将与名称1.JPG被复制。 这是不完全正确的。 在这种情况下,它仅是一个例子。 文件名总是需要指定不同的,并且指定扩展,根据文件。
确定扩展可能会有不同的方式。 这一切都取决于博学的开发商。 一个最快的方式(十分之一秒的差)确定扩展 - 这是下一个代码。
$ PATH_INFO = PATHINFO($ _ FILES [ '照片1'] [ “名称”]);
$ EXT = $ PATH_INFO [ '延伸'];
变量$的分机,我们将存储所需的扩展。 文件名可以随意使用MD5进行设置。 如果你要下载大量文件,最好是将它们运送到不同的文件夹。 因此,这将更加方便。 特别是,如果要清除。
下载代码如下。
///随着照片
如果($ _FILES [ '照片1'] [ 'tmp_name的值'] == NULL)
{
回波(“
<强>未知文件。强> p>
回到... P> “);
退出;
}
///。 假设你在服务器上的任何项目被允许装载大文件(视频),但只有图片,用户需要限制
如果(($ _FILES [ “照片1”] [ “大小”]> 1024 * 1024 * 2)
{
?>
允许的最大尺寸的 2 MB 强>
回到... P>
<?
退出;
}
//创建文件夹
//创建当月的文件夹
如果(!file_exists( “IMG /” 日期( “M”)))
{
MKDIR( “IMG /” 日期( “M”));
}
//创建当天的文件夹
如果(!file_exists( “IMG /” 日期( “M”)。 “/”。日期( “D”)))
{
MKDIR( “IMG /” 日期( “M”) “/” 日期( “D”)...);
}
///文件扩展名
$ PATH_INFO = PATHINFO($ _ FILES [ '照片1'] [ “名称”]);
$ EXT = $ PATH_INFO [ '延伸'];
///生成的文件名
$ J = MD5(日期( “年月日”));
如果(复制($ _ FILES [ '照片1'] [ “tmp_name的值”], “IMG /”。日期( “M”)。 “/”。日期( “D”)。 “/”。$ ID。$ EXT) )
{
回波(“文件上传成功”);
}
///任何进一步的行动(条目的数据库,等等。N.)
}
多个文件
上传多个文件(PHP)由形式的附加字段的装置中出现。
这种方法不是很好,因为它限制文件下载数。 此外,它被认为是在编程不好的形式。 尝试做的一切动态。
理想的选择 - 这是一个大量的一次文件的按一个按钮选择。
要做到这一点,创建一个这样的代码的形状。
<形方法=“POST”行动=“链接到文件处理程序”名称=“upload_form” ENCTYPE =“多部分/格式数据”>
<输入类= “form_upload” 类型= “文件” 名称= “file1的[]” 多值= “概览”>
<输入类= “form_upload” 类型= “提交” 名称= “upldFile” 值= “添加”/>
P>
FORM>
请注意,多重加入字,该名称被给定为一个数组[]。 在这种情况下,$ _FILES数组会略有不同。 您将获得该数组的数组。
为了测试可以再次使用的var_dump($ _ FILES);
您的所有文件都会被放在这样的数组中:
- $ _FILES [ “文件1”] [ “名称”] [0]
- $ _FILES [ “文件1”] [ “名称”] [1]
- 等等。
在括号中被写入阵列中的文件编号。 从零开始计数。 我们对待他们以同样的方式,只问了周期和上述代码在索引中添加[$ i]的一端接触。
$ I = 0;
而($ _FILES [ “文件1”] [ “名称”] [$ i]于<> '')
{
///粘贴上述代码
}
因此,你将不得不通过PHP文件上传到一个周期的服务器,而无需代码的不必要的重复发生,因为通常情况下,如果您使用的版本与文件的静态数(最后一张照片)。
Similar articles
Trending Now