码迷,mamicode.com
首页 > 其他好文 > 详细

tp剩余未验证内容-2

时间:2018-05-30 19:12:40      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:需要   自动   []   默认   mit   否则   字符   进程   组元   

关于在tp框架中上传文件的大小限制, 实际上, 是多重限制了.

除了tp的上传类 Upload类中的设置: $this->maxSize(这个是以字节为单位进行计算), 还 需要 设置php 语言本身 对上传文件大小的限制(默认只有 2M) . 这个是在php的配置文件

php.ini中设置 upload_max_filesize:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 0  (设为0就是不限制大小)

关于upload上传的问题?

  • 上传文件在服务器上的名字显示中文乱码?

  • 上传文件时 $file或$_FILES中生成的md5 码和 sha1 有什么作用?
    md5, sha1, crc32这三种校验码的特点是: 对于一个文件, 如果文件的内容没有做修改,那么即使他的文件名改变, 则他的校验码不变; 反之, 如果文件的内容作了修改, 即使文件的名

称不变, 则他的校验码也不同. 所以有几种用途
一是, 网站贴出(上传)文件的md5 sha1码, 你可以跟你在本地的文件的md5校验码相对比, 如果相同, 则表明文件是完整的,没有做修改, 反之,如果不同, 则说明被作了手脚的. 同样的,

你从网上下载的应用程序, 原程序的校验码md5的作用也跟这个相同;

  • 二是 "网盘"的 极速上传. 实际上是先计算出你上传文件的md5, 然后跟网盘的 md5库进行比对, 看md5库里有没有 你要上传文件的md5. 如果有,就不必再上传了, 只是在你的 网盘

空间 生成一个 文件链接就好了, 链接 到库文件. 这样既节省带宽, 又节省 服务器的 空间.

怎样获取数组的长度?

  • 不能用点号或-> 来获取, 前者会把数组和后面的内容当作一个 字符串来 连接输出; -> 会把前面当作一个对象来输出, 会报错: array不是一个0bj , 所以 也就是说, php中的 对象

只能用 -> 来输出, 不能 用点号了 因为点号被用作字符串连接运算了

  • 也不能使用 中括号 [], 那是求数组元素的值

  • 应该用 php提供的全局函数 : count 或 sizeof. (sizeof是count的别名alias, 一样的) 但是 count 在计算 二维数组的时候, 有第二个参数 [COUNT_RECURSIVE]这个常数. 如果为0

(默认)的不递归计算, 为1 则递归计算. 基本上 为1 的是用不上的.

  • count还可以计算对象的 属性的 个数.

为什么设置了 upload_max_filesize后, 仍然不能上传大文件? 对上传的临时目录也不能少, 而且要有 php进程所有者有写入的权限 . php脚本运行到底有哪些限制? 参考:

`https://blog.csdn.net/dreamboycx/article/details/9171781, https://blog.csdn.net/steven_liwen/article/details/51965954 http://www.phpernote.com/php-

function/789.html `

  • 原因, 在上传大文件的时候, 不只是对上传文件本身的大小 要设置, 还有就是 php语言为了安全, 对脚本运行的本身 多项配置做了限制. 比如 一个脚本执行的最大时间, 你不能过

长了, max_execution_time, 默认的是30秒, 通常你可以设置为 600(秒)

  • 本身限制了一个脚本占用内存的大小, memory_limit 默认是128M, 通常你可以设置为200M
  • 本身在 表单上传时 也做了限定, 包括 post_max_size表单上传时一次可以post的最多内容; max_input_time 即input接收文件输入的最大时间, 默认是60s, 通常你可以设置为 600

秒.

  • 除了这四个设置外, 基本上就没有问题了, 另外的 file_uploads要设置为0n, 还有就是上面的upload_tmp_dir目录 必须要设置, 且要有写入权限.

fedora安装 chrome浏览器

共有5个版本, 依次是: chromium 金丝雀 Dev Beta Stable 稳定版. chromium是每隔几个小时就有新的版本出现...


被上传的文件 最后, 在盘上的实际存储目录是: savepath = 设置的savePath + subName/ (不包括rootPath). 有这样的代码:

$file[‘savepath‘] = $this->savePath . $subpath;

上传文件的类型‘type‘ => string ‘application/octet-stream‘ 表示是 8进制数据流(也就是二进制流)
‘application/x-msdownload‘ 表示是windows的dll, exe等文件的mime类型

判断一个函数是php的全局函数, 还是类的成员函数, 其实很容易, 如果 前面有$this-> 来引用函数, 说明是类的成员函数, 否则就是全局函数,比如Upload中的 md5_file

($file[‘tmp_name‘]) sha1_file两个函数

Tp的Upload类, 主要也是对php原生的 上传相关函数 作了一些调用和封装,
**关于文件名, 有几次变换: name(原来本身的名称) -> tmp_name(上传后保存在 upload_tmp_dir/ 目录中的临时名称, 由系统自动生成) -> saveName(最终保存在服务器上的名称)

**比如:

function upload($files){
// 通常都不会设置upload函数的参数: 上传文件数组, 因此 $files===‘‘, 所以, 这里的$files 就是 $_FILES;

// 后面是对每个文件进行遍历: 
foreach($files as $key => $file) 


// 获取上传文件的md5: md5_file, sha1_file($file[‘tmp_name‘]...



}

在一个类中, 成员方法 可以是 ,也可以包括: $config=array(...)性质的数组, $private_name private $error; private $uploader; 等等.

而且对一个类来说, 魔术方法 __get, __set , __isset几乎是必须的. __construct 和 函数getError(return $this->error;) 根据需要而定.

上传文件保存错误? 是因为 上传文件的类型不对? 在Local类的代码中???

Warning: POST Content-Length of 10926845 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

tp剩余未验证内容-2

标签:需要   自动   []   默认   mit   否则   字符   进程   组元   

原文地址:https://www.cnblogs.com/bkylee/p/9112424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!