计算机文件类型

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文件上传进行总是伴随着一个错误代码。 在“错误”输入了错误信息。 截图误差为零。

考虑所有错误的值:

据上述有关可在通常的HTML被指定的参数说。

下面是一个示例形式来下载文件,其指示上载的文件的数量的限制。

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)

{

回波(“

<强>未知文件。

回到... “);

退出;

}

///。 假设你在服务器上的任何项目被允许装载大文件(视频),但只有图片,用户需要限制

如果(($ _FILES [ “照片1”] [ “大小”]> 1024 * 1024 * 2)

{

?>

允许的最大尺寸的 2 MB

回到...

<?

退出;

}

//创建文件夹

//创建当月的文件夹

如果(!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” 值= “添加”/>

请注意,多重加入字,该名称被给定为一个数组[]。 在这种情况下,$ _FILES数组会略有不同。 您将获得该数组的数组。

为了测试可以再次使用的var_dump($ _ FILES);

您的所有文件都会被放在这样的数组中:

  1. $ _FILES [ “文件1”] [ “名称”] [0]
  2. $ _FILES [ “文件1”] [ “名称”] [1]
  3. 等等。

在括号中被写入阵列中的文件编号。 从零开始计数。 我们对待他们以同样的方式,只问了周期和上述代码在索引中添加[$ i]的一端接触。

$ I = 0;

而($ _FILES [ “文件1”] [ “名称”] [$ i]于<> '')

{

///粘贴上述代码

}

因此,你将不得不通过PHP文件上传到一个周期的服务器,而无需代码的不必要的重复发生,因为通常情况下,如果您使用的版本与文件的静态数(最后一张照片)。

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhcn.birmiss.com. Theme powered by WordPress.