当前位置:  开发笔记 > 编程语言 > 正文

使用PHP创建单文件上载表单的最佳方法是什么?

如何解决《使用PHP创建单文件上载表单的最佳方法是什么?》经验,为你挑选了2个好方法。

我在网上找到了一些样本,但我想从每天使用PHP的人那里获得反馈,以了解潜在的安全性或性能考虑因素及其解决方案.

请注意,我只对一次上传单个文件感兴趣.

理想情况下,不需要浏览器插件(Flash/Java),尽管知道使用插件的好处会很有趣.

我想知道最好的HTML表单代码和PHP处理代码.



1> Drew Noakes..:
文件上传教程

HTML

action.php 是将处理上传的PHP文件的名称(如下所示)

MAX_FILE_SIZE必须在输入类型之前出现file.这个值很容易在客户端上操作,所以不应该依赖它.它的主要好处是在用户上传之前向用户提供文件过大的早期警告.

您可以使用类型更改输入的名称file,但请确保它不包含任何空格.您还必须更新PHP文件中的相应值(如下所示).

PHP

';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Success.\n";
} else {
    echo "Failure.\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);
print "
"; ?>

upload-to文件夹不应该位于可通过HTTP访问的位置,否则可以上传PHP脚本并在服务器上执行它.

打印价值$_FILES可以暗示正在发生的事情.例如:

    Array
    (
        [userfile] => Array
        (
            [name] => Filename.ext
            [type] => 
            [tmp_name] => 
            [error] => 2
            [size] => 0
        )
    )

此结构提供有关文件名称,MIME类型,大小和错误代码的一些信息.

错误代码

0表示没有错误且文件已成功上载
1表示文件超过了php.ini中定义的最大文件大小.如果要更改最大文件大小,则需要打开php.ini文件,标识读取的行:upload_max_filesize = 2M并将值从2M(2MB)更改为您需要的值
2表示最大文件大小手动定义,在页面内已超出脚本
3表示文件仅部分上载
4表示尚未指定文件(空文件字段)
5尚未定义
6表示没有临时文件夹
7表示该文件无法写入磁盘

php.ini 组态

使用较大的文件运行此设置时,您可能会收到错误.检查php.ini文件中的这些键:

max_execution_time = 30
upload_max_filesize = 2M

适当增加这些值可能会有所帮助.使用Apache时,对此文件的更改需要重新启动.

最大内存允许值(设置为via memory_limit)在此处不起作用,因为文件在上载时写入tmp目录.可以选择通过控制tmp目录的位置upload_tmp_dir.

检查文件mimetypes

您应该检查用户上传内容的文件类型 - 最佳做法是根据允许的文件类型列表进行验证.允许任何文件的潜在风险是用户可能将PHP代码上载到服务器然后运行它.

您可以使用非常有用的fileinfo扩展(取代旧mime_content_type功能)来验证mime类型.

// FILEINFO_MIME set to return MIME types, will return string of info otherwise
$fileinfo = new finfo(FILEINFO_MIME);
$file = $fileinfo->file($_FILE['filename']);

$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
    die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue

更多信息

您可以在PHP.net手册上阅读有关处理文件上传的更多信息.

适用于PHP 5.3+

//For those who are using PHP 5.3, the code varies.
$fileinfo = new finfo(FILEINFO_MIME_TYPE);
$file = $fileinfo->file($_FILE['filename']['tmp_name']);
$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
    die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue

更多信息

您可以在PHP.net文档中阅读有关FILEINFO_MIME_TYPE的更多信息.



2> Ross..:

阅读本介绍,告诉您需要知道的一切.用户评论也非常有用.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有