• 技术文章 >php教程 >php手册

    PHP上传类upload.php的具体使用方法

    2016-06-13 11:06:08原创621
    我们今天为大家带来的是关于具体代码如下:

    1. php
    2. /**
    3. * 我的文件上传类
    4. *
    5. * 未完成的功能:
    6. * 1.对目标目录是否存在的判断
    7. * 2.如果上传时出现重名,自动重命名
    8. *
    9. * @author M.Q. <[url]www.mengqi.net[/url]>
    10. */
    11. class upload
    12. {
    13. /**
    14. * PHP上传类upload.php上传文件的信息,此值由构造函数取得,如果上传文件失败或出错或未上传,则此值为false
    15. *
    16. * @var array
    17. */
    18. private $file = false;
    19. /**
    20. * 构造函数:取得上传文件的信息
    21. *
    22. * 如果在上传文件的工程中发生错误,那么出错的文件不会放在结果中返回,结果中的文件都是可用的
    23. *
    24. * @param string $tag form表单中<input>标签中name属性的值,例<input name="p" type="file">
    25. *
    26. * 例1,上传单个文件:
    27. * <input name="upfile" type="file">
    28. *
    29. * 例2,上传多个文件:
    30. * <input name="upfile[]" type="file">
    31. * <input name="upfile[]" type="file">
    32. *
    33. * 结果(保存在$file变量中)如下:
    34. *
    35. * array(
    36. * [0] => array(
    37. * 'name' => 'abc.txt'
    38. * 'type' => 'text/plain’
    39. * 'tmp_name' => '/tmp/phpgxecCb'
    40. * 'error' => 0
    41. * 'size' => 62
    42. * )
    43. * [1] => array(
    44. * 'name' => 'abc.txt'
    45. * 'type' => 'text/plain’
    46. * 'tmp_name' => '/tmp/phpgxecCb'
    47. * 'error' => 0
    48. * 'size' => 62
    49. * )
    50. * )
    51. */
    52. public function __construct($tag)
    53. {
    54. $file = $_FILES[$tag];
    55. if (!isset($file) || empty($file))
    56. {
    57. return; //没有上传文件
    58. }
    59. $num = count($file['name']); //PHP上传类upload.php上传文件的个数
    60. $data = array(); //用来保存上传文件的信息的数组
    61. //上传了多个文件
    62. if ($num > 1)
    63. {
    64. for($i = 0; $i < $num; $i++)
    65. {
    66. $d = array();
    67. $d['name'] = $file['name'][$i];
    68. $d['type'] = $file['type'][$i];
    69. $d['tmp_name'] = $file['tmp_name'][$i];
    70. $d['error'] = $file['error'][$i];
    71. $d['size'] = $file['size'][$i];
    72. if ($d['error'] == 0)
    73. {
    74. $data[] = $d;
    75. }
    76. else
    77. {
    78. @unlink($d['tmp_name']);
    79. }
    80. }
    81. }
    82. //只上传了一个文件
    83. else
    84. {
    85. $d = array();
    86. $d['name'] = $file['name'];
    87. $d['type'] = $file['type'];
    88. $d['tmp_name'] = $file['tmp_name'];
    89. $d['error'] = $file['error'];
    90. $d['size'] = $file['size'];
    91. if ($d['error'] == 0)
    92. {
    93. $data[] = $d;
    94. }
    95. else
    96. {
    97. @unlink($d['tmp_name']);
    98. }
    99. }
    100. if (empty($data)) return;
    101. $this -> file = $data; //保存上传文件的信息
    102. }
    103. /**
    104. * 将上传的文件从临时文件夹移动到目标路径
    105. *
    106. * @param array $src 文件信息数组,是$file数组的其中一个元素(仍然是数组)
    107. * @param string $destpath 上传的目标路径
    108. * @param string $filename 上传后的文件名,如果为空,则使用上传时的文件名
    109. * @return bool
    110. */
    111. public function save($src, $destpath, $filename = null)
    112. {
    113. $srcTName = $src['tmp_name']; //原始上传文件的临时文件名
    114. $srcFName = $src['name']; //原始文件名
    115. //如果$filename参数为空,则使用上传时的文件名
    116. if (empty($filename))
    117. {
    118. $filename = $srcFName;
    119. }
    120. //$dest是文件最终要复制到的路径和文件名
    121. if (empty($destpath))
    122. {
    123. $dest = $filename;
    124. }
    125. else
    126. {
    127. //修正路径中的斜杠,将末尾的修改为/,如果末尾不是也不是/,则给末尾添加一个/
    128. $pathend = $destpath[strlen($destpath) - 1]; //上传的目标路径的最后一个字符
    129. if ($pathend == '\')
    130. {
    131. $dest = substr_replace($destpath, '//m.sbmmt.com/m/', strlen($destpath)-1).$filename;
    132. }
    133. else if ($pathend != '//m.sbmmt.com/m/')
    134. {
    135. $dest = $destpath.'//m.sbmmt.com/m/'.$filename;
    136. }
    137. else
    138. {
    139. $dest = $destpath.$filename;
    140. }
    141. }
    142. //上传文件成功
    143. if (@move_uploaded_file($srcTName, $dest))
    144. {
    145. return true;
    146. }
    147. else
    148. {
    149. return false;
    150. }
    151. }
    152. /**
    153. * 取得上传文件的信息
    154. *
    155. * @return array
    156. */
    157. public function getFileInfo()
    158. {
    159. return $this->file;
    160. }
    161. }
    162. $a = new upload('upfile');
    163. $fileinfo = $a -> getFileInfo();
    164. if ($fileinfo == false)
    165. {
    166. echo '没有上传文件!';
    167. exit;
    168. }
    169. for($i = 0; $i < count($fileinfo); $i++)
    170. {
    171. echo '正在上传 '.$fileinfo[$i]['name'].' ';
    172. if ($a -> save($fileinfo[$i], 'upload')) echo '完毕';
    173. else echo '失败';
    174. echo '<br>';
    175. }
    176. ?>

    以上代码就是关于PHP上传类upload.php的具体使用方法。


    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:PHP开发工具为程序员带来高质量代码 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• PHP中SESSION使用中的一点经验总结• 一个模仿oso的论坛程序(之二)• php mysql 数据库类• 如何获知PHP程序占用多少内存(memory_get_usage)• 我的论坛源代码(五)
    1/1

    PHP中文网