php上传大文件

php进行文件上传的格式:

1,上传界面
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label> 
<input type="file" name="file"/>
<br/>
<input type="submit" name="submit" value="确定"/>
</form>

或者

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE"/>

文件名:<input type="file" name="file"/>
<br/>
<input type="submit" name="submit" value="确定"/>
</form>

这个只是上传的界面,真正的上传有靠action里面提到的upload.php.

2,文件传送

点击确定按钮后,文件放到临时文件夹中,但还没有传送到自己的电脑上,通过定义的upload.php进行文件的传送。用到的函数move_uploaded_file()。

在这之前要了解下FILES数组的内容。

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name(例子是file),第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称

  • $_FILES["file"]["type"] - 被上传文件的类型

  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计

  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

  • $_FILES["file"]["error"] - 由文件上传导致的错误代码

现在在upload.php文件中进行文件的传送。代码如下:

<?php
 if($_FILES["file"]["error"]>0)      //传送不成功
 {
  echo "error:".$_FILES["file"]["error"];//显示错误的代码。如1代表文件太大等。
 }
 else                               //传送成功显示文件的名字,类型,大小等信息。
 {
  echo "upload:".$_FILES["file"]["name"]."<br/>";
  echo "type:".$_FILES["file"]["type"]."<br/>";
  echo "size:".($_FILES["file"]["size"]/1024)."KB<br/>";
  echo "stored in:".$_FILES["file"]["tmp_name"];
  if (file_exists("upload/" . $_FILES["file"]["name"]))   //判断文件夹里有没有同名的文件
      {
    echo "<br/>";
      echo $_FILES["file"]["name"] . " 已经存在了 ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
   echo "</br>";
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }

 }
?>

注意:我们设置文件夹名是upload,所以你要在upload.php所在的文件夹里先建立一个名字为upload的文件夹。否则系统会提示找不到文件夹。

3,大文件的上传

默认情况下,可以上传2M以下的文件对于更大的文件的上传要进行以下设置:

打开php.ini,首先找到

file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开

upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M

post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

 

设置完以上数值后,win+R打开运行界面输入services.msc打开服务重启apache服务(或者其他的服务器服务名),设置才能生效。
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。

但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。


进一步配置以下的参数

max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒

max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M

把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了

max_execution_time = 600
max_input_time = 600
memory_limit = 32m
file_uploads = on
upload_tmp_dir = /tmp
upload_max_filesize = 32m
post_max_size = 32m

注意:请确认修改的php.ini是不是需要修改的那个。检验设置是否生效可以在浏览器输入127.0.0.1/phpinfo.php查看php的配置信息。拿appserv来说修改X:\AppServ\php5下的两个php.ini-dist和php.ini-recommanded文件是无效的。真正的php.ini文件是在c:\windows下的。

你可能感兴趣的:(php上传大文件)