0

我在创建应用程序时遇到问题,用户提交一个文件然后它被分析。

我遇到的问题是我无法正确上传文件,当它达到 100% 上传时(在 chrome 状态栏中通知)它再次启动,然后当页面加载时,告诉我没有收到文件!

这是我的代码:

 #upload form //just a basic form

 <form id="form1" name="form1" method="post" action="test_lib_valida.php"  

enctype="multipart/form-data">
  <tr>
    <td align="center" class="info">OPERACIÓN</td>
  </tr>
  <tr>
    <td align="center"><label for="oper2"></label>
      <select name="oper2" id="oper2">
        <option value="1" selected="selected">Altas</option>
        <option value="2">Bajas</option>
        <option value="3">Cambios</option>
      </select></td>
  </tr>
  <tr>
    <td align="center"><label for="archivo2">Seleccione archivo</label>
      <input type="file"  name="archivo2" id="archivo2" multiple /></td>
  </tr>
</table>
</form>

而在 php 方面 // 只是获取文件并显示它现在的存储位置

$tam_allow=7454720000;//max filezise
$tipos=array("application/octet-stream","application/x-zip-compressed","text/plain");//allowed types
$ext=array("zip","txt");//allowed exts
$what=getArchivo("archivo","elarchivonuevo","recibidos/",$tam_allow,$ext,$tipos);
echo "El archivo queda en:".$what[1];
showinfo("archivo");

getArchivo函数//获取文件并将其发送到适当的文件夹,返回最终的URL以找到文件,如果它是压缩的,它会解压它并将txt保存在里面,然后消除压缩

    function getArchivo($nombre,$nuevo_nom,$ruta,$maxsizeb=204800000000000,$allowedExts = array("txt"),$tipos)//verifica un archivo subido y lo mueve a la carpeta especificada, la ruta va con diagonal recibidos/, si tiene exito regresa [0]1 y [1]ruta archivo
{
//verifica el nombre del folder, 1 para cada dependencia, la cve de la dependencia esta en la variable de sesion "id_dep"
$extension = end(explode(".", $_FILES["$nombre"]["name"]));
//variable de sesion para obtener la extension fuera de aqui
      if(!$nuevo_nom)
      $nuevo_nom=$nombre;
      if($tipos)
      $tip= in_array($_FILES["$nombre"]["type"],$tipos);
      else
      $tip=1;
if (
    $tip
    && 
    ($_FILES["$nombre"]["size"] < $maxsizeb)
    && 
    in_array($extension, $allowedExts)
   )
  {
  if ($_FILES["$nombre"]["error"] > 0)//error de subida
    {
      if($_FILES["$nombre"]["error"]==UPLOAD_ERR_PARTIAL)//no subio completo
        {
            mensaje("Archivo Recibido Parcialmente, intentelo de nuevo");
            //redirige("index_2.php");
        }
        else
    mensaje("Error de subida: " . $_FILES["$nombre"]["error"]);
    //redirige("index_2.php");
    $result[0]=0;
    }
  else
    {
  //showinfo("archivo");
  //ya paso, va pa su carpeta
      try
      {
              //echo ("$ruta" . $nuevo_nom.'.'.$extension);
          if($extension=='zip')//viene comprimido
          {
          //mensaje("archivo Comprimido detectado");
          move_uploaded_file($_FILES["$nombre"]["tmp_name"],$ruta.$_FILES["$nombre"]["name"]);
          //mensaje("moviendo:".$_FILES["$nombre"]["tmp_name"]." como ".$ruta.$_FILES["$nombre"]["name"]);
          descomprime($ruta.$_FILES["$nombre"]["name"],$ruta);
          //mensaje("descomprimiendo:".$ruta.$_FILES["$nombre"]["name"]." en ".$ruta);
          //cambiamos nombre al archivo
          rename(str_replace('zip','txt',$ruta.$_FILES["$nombre"]["name"]),$ruta.$nuevo_nom.'.txt');
          //como se llamo
          $_SESSION["recibido"]=$_FILES[$nombre]["name"];
          $_SESSION["formato"]=$extension;
          $_SESSION["tamano"]=$_FILES[$nombre]["size"];
          //quitamos el zip
          unlink($ruta.$_FILES["$nombre"]["name"]);
          $result[0]=1;
          $result[1]=$ruta . $nuevo_nom.'.txt';
          }
          else//es txt
          {
            move_uploaded_file($_FILES["$nombre"]["tmp_name"],$ruta.$nuevo_nom.'.txt');  
          $_SESSION["recibido"]=$_FILES[$nombre]["name"];
          $_SESSION["formato"]=$extension;
          $_SESSION["tamano"]=$_FILES[$nombre]["size"];
          $result[0]=1;
          $result[1]=$ruta . $nuevo_nom.'.txt';
          }
      }
          catch (Exception $e)
          {    
         mensaje($e->getMessage());
         }
    }
  }
else
  {
  mensaje("ARCHIVO NO PERMITIDO, POR EL MOMENTO SOLO SE ACEPTAN ARCHIVOS EXTENSION (ZIP,TXT)");
  //redirige("index_2.php");
  $result[0]=0;
  $result[1]="";
  //info del archivo
  //showinfo("archivo");
  }
  return $result;
}

如果文件包含与 zip 同名的 txt 文件,则 decomprime 代码//只是解压缩

function descomprime($nomarch,$ruta)//takes the file and decompresses it if its a zip file
 {
try
{
     $zip = new ZipArchive;
     $res = $zip->open($nomarch);
     $nombrebusca=str_replace("zip","txt",$nomarch);
     $nombrebusca= basename($nombrebusca);
    $esta= $zip->locateName($nombrebusca);
    if($esta===0)//verifica que lo de adentro se llame como lo de afuera
    {
     if ($res === TRUE) {
         $zip->extractTo($ruta);
         $zip->close();
              mensaje("Archivo descomprimido correctamente:".$esta);
         //echo 'ok';
     } else {
         mensaje ('Problema al descomprimir el Archivo, Por favor verifique que se pueda descomprimir');
         //redirige("index_2.php");
     }
        }
    else
    {
     mensaje ('El archivo comprimido no contiene el archivo de texto requerido');
     //redirige("index_2.php");
    }
}
catch (Exception $e)
{
    echo $e->getMessage();
    }
 }

mensaje 函数只是通过 javascript 发送警报

奇怪的是,在我的笔记本电脑安装上,它就像一个魅力,但在服务器安装上它显示错误,问题是,所有 php 和 apache conf 在两种安装上都是相同的,现在我想知道发生了什么!

我什至从小到 3 mb 的文件中得到错误,所有较低的文件都通过了。

有时我收到Error 324 (net::ERR_EMPTY_RESPONSE):或来自我的应用程序的响应说该文件无效。

在 php 我有

memory limit=512
upload_max_filesize 100M
post_max_size 100M
max_input_time 300
max_execution_time 300
//And all the folders have 777 permission

有什么我想念的吗?

4

0 回答 0