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


Strange error when uploading file - I think it is related to max file size

我有一个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吗?或者这里有更复杂的东西吗?

有人能解释一下我哪里错了吗?

谢谢!

您不能用"自定义"php.ini更改这些值,因为它通常不会被Web服务器读取。Nether使用ini_set,因为这些指令属于PHP_INI_PERDIR类型。

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

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

您可以使用文件上传前的函数来覆盖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);