上传文件时出现奇怪的错误 - 我认为它与最大文件大小有关

时间:2013-02-20 18:05:00

标签: file-upload php

我在PHP中有一个文件上传脚本。该脚本适用于较小的(小于2MB),但需要使用此脚本上传的较大文件(大约20MB)不会上传。

脚本如下,然后是更多解释:

<?php

if($_SERVER["REQUEST_METHOD"] == "POST")
 {
  $file = $_FILES["uploaddistance"]["name"];
  $fileTmpLoc = $_FILES["uploaddistance"]["tmp_name"];

  $pathlevel3 = 'distance/level3/';
  $pathlevel4 = 'distance/level4/';
  $pathlevel5 = 'distance/level5/';
  $pathlevel6 = 'distance/level6/';


  $level = $_POST['distancecourse'];
  $module = $_POST['distancemodule'];
  $kaboom = explode(".", $file);
   $extension = end($kaboom);

  if ($level == "level3"){
   $pathandname = $pathlevel3 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

  else if ($level == "level4"){
   $pathandname = $pathlevel4 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

   else if ($level == "level5"){
   $pathandname = $pathlevel5 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

   else if ($level == "level6"){
   $pathandname = $pathlevel6 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
     }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }   

   else {
    echo "Error 1";
    echo $level;
    echo $module;
    }

  }

 else {
  echo "error 2";
 }

?>

当我上传较大的文件时,会出现“错误1”消息,表明没有任何POST值传递给脚本。就像我说的那样,在上传较小的文件时并非如此。

我尝试过创建自定义的php.ini文件并更改最大文件大小。我做了以下更改:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 96M

php.ini文件位于我的主目录(public_html)中。据我了解,这应该由目录中的任何脚本自动使用。当我在网站上运行phpinfo()测试时,它说加载的配置文件是public_html / php.ini(有关详细信息,请参阅http://www.xenonacademy.org.uk/phptest.php),这表明配置文件是正确的,但对于某些人来说问题仍然存在的原因。

此外,在运行此测试时,它显示memory_limit仅为64M,而不是我在php.ini中指定的96,但upload_max_filesizepost_max_size是正确的。如果这些设置正确,为什么这不起作用?我需要在相关脚本中include()我的php.ini,还是在这里有更复杂的东西?

有谁可以解释我哪里出错?

谢谢!

2 个答案:

答案 0 :(得分:1)

您无法使用“自定义”php.ini更改这些值,因为Web服务器通常不会读取这些值。虚空使用ini_set,因为these directives属于PHP_INI_PERDIR类型。

但是,有时您可以使用.htaccess文件更改它们,并按照有关MAX_FILE_SIZE输入的文档中的说明操作:

  

MAX_FILE_SIZE隐藏字段(以字节为单位)必须位于文件输入字段之前,其值是PHP接受的最大文件大小。应始终使用此表单元素,因为它可以节省用户等待传输大文件的麻烦,只是发现它太大而传输失败。

答案 1 :(得分:-1)

您可以使用之前使用文件上传功能来覆盖php.ini文件

 ini_set('upload_max_filesize', '10M');
 ini_set('post_max_size', '10M');
 ini_set('max_input_time', 300);
 ini_set('max_execution_time', 300);