2010-01-28 15 views
5

Básicamente, cuando tengo más de 25 cargas de archivos en un formulario, el array PHP $ _FILES se recorta a las primeras 25 entradas (0-24), lo cual es incorrecto. Debería tener todos 31. Esto solo ocurre en un servidor en particular. Apache con PHP. Lo he probado en otros dos servidores y parecen permitir todos 31.

¿Podría ser causado por alguna opción de configuración en Apache? ¿O es más probable que sea un problema de configuración en PHP?

Lo único que se me ocurre es posiblemente la directiva de apache LimitRequestFields, pero esto debería arrojar un error en lugar de simplemente recortarlo a los primeros 25. ¿Correcto?

Sé que tener tantos campos de archivos en un formulario es una mala práctica, sin embargo, esto es una necesidad debido a la funcionalidad requerida para esta página en particular. No puedo evitar esto.

Cualquier ayuda con este problema sería muy apreciada.

El siguiente HTML demuestra el problema que estoy teniendo.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 

<form enctype="multipart/form-data" action="test.php" method="post"> 
<input type="file" name="field_id_11[0][1]"/> 
<input type="file" name="field_id_11[1][1]"/> 
<input type="file" name="field_id_11[2][1]"/> 
<input type="file" name="field_id_11[3][1]"/> 
<input type="file" name="field_id_11[4][1]"/> 
<input type="file" name="field_id_11[5][1]"/> 

<input type="file" name="field_id_11[6][1]"/> 
<input type="file" name="field_id_11[7][1]"/> 
<input type="file" name="field_id_11[8][1]"/> 
<input type="file" name="field_id_11[9][1]"/> 
<input type="file" name="field_id_11[10][1]"/> 
<input type="file" name="field_id_11[11][1]"/> 
<input type="file" name="field_id_11[12][1]"/> 
<input type="file" name="field_id_11[13][1]"/> 
<input type="file" name="field_id_11[14][1]"/> 
<input type="file" name="field_id_11[15][1]"/> 
<input type="file" name="field_id_11[16][1]"/> 
<input type="file" name="field_id_11[17][1]"/> 
<input type="file" name="field_id_11[18][1]"/> 
<input type="file" name="field_id_11[19][1]"/> 
<input type="file" name="field_id_11[20][1]"/> 
<input type="file" name="field_id_11[21][1]"/> 
<input type="file" name="field_id_11[22][1]"/> 

<input type="file" name="field_id_11[23][1]"/> 
<input type="file" name="field_id_11[24][1]"/> 
<input type="file" name="field_id_11[25][1]"/> 
<input type="file" name="field_id_11[26][1]"/> 
<input type="file" name="field_id_11[27][1]"/> 
<input type="file" name="field_id_11[28][1]"/> 
<input type="file" name="field_id_11[29][1]"/> 
<input type="file" name="field_id_11[30][1]"/> 
<input type="text" name="blah" value="something"/> 
<input type="submit" /> 
</form> 

</body> 
</html> 

Respuesta

3

que "25 archivos max" y "sólo ocurre en un servidor específico" parece indicar algunas medidas de configuración/seguridad en ese servidor.

Y "25 subidas max" es la configuración por defecto de la suhosin PHP extension - ver la directiva de configuración suhosin.upload.max_uploads.


Esa extensión se instala por defecto (por razones de seguridad) en algunas distribuciones de Linux - Ubuntu proporciona de forma predeterminada, por ejemplo, si no recuerdo mal; puede verificar si está instalado/habilitado en la salida phpinfo().

+0

muchas gracias por eso. No tenía idea de que incluso existía. Agregué: suhosin.upload.max_uploads = al archivo php.ini del servidor y ahora el servidor funciona perfectamente. Gracias de nuevo :) También gracias a todos los demás que respondieron también. Esta fue la primera vez que uso este sitio. – Chris

+0

De nada :-) ;; tiene que haber una primera vez para todo * (y su pregunta estaba bien escrita, había un ejemplo de código, las etiquetas están bien, y todo, lo cual es bastante bueno para una primera pregunta) * ;-) –

0

PHP coloca los archivos cargados en un directorio temporal. Para que pueda confirmar si el problema es con PHP o con Apache, verifique si los 6 archivos adicionales están en ese directorio temporal.

Lo que haría sería obtener la ubicación del primer archivo, y luego ejecutar un ciclo para repetir todos los archivos en ese directorio. Si es 31, es PHP, si es 25, es Apache.

1

Consulte la sección Subidas de archivos del ini file directives.

Hay una configuración de límite de max_file_uploads disponible desde PHP 5.2.12 que puede consultar si está utilizando esa versión o superior.

A su vez, el upload_max_filesize es un total máxima para todos los archivos subidos combinados, por lo que es posible que usted podría estar golpeando un límite allí, aunque a partir de la descripción que parece más probable que un limitador de max_file_uploads es el problema.

0

Si mira la configuración de Suhosin, la configuración no funciona. Intente comprobar las opciones upload_max_filesize y post_max_size en php.ini.

0

por qué no usar move_uploaded_file es un trabajo simplemente tratar de agregar la ruta en la matriz y en ejecutar esta función si no funciona? move_uploaded_file copia (número de archivos), esto no es bueno, pero su labor sólo tratar

$file1 = $_POST['file1']; 
$file2 = $_POST['file2']; 
$file3 = $_POST['file3']; 
$file4 = $_POST['file4']; 
$file5 = $_POST['file5']; 
$file6 = $_POST['file6']; 
$array = array($file1,$file2,$file3,$file4,$file5,$file6); 

if(isset($_POST['submit'])) 
{ 
    for($i=0;$i<count($array);$i++) 
    { 
    $dir = $array[$i]; 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file1']['name']; 
    move_uploaded_file($_FILES['file21']['tmp_name'],$uploadfile); 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file2']['name']; 
    move_uploaded_file($_FILES['file2']['tmp_name'],$uploadfile); 

      ????????????????????????????????????????????????????? 
      ????????????????????????????????????????????????????? 
Cuestiones relacionadas