Foros del Web » Programando para Internet » PHP »

El archivo temporal en upload de archivos se borra

Estas en el tema de El archivo temporal en upload de archivos se borra en el foro de PHP en Foros del Web. Hola, tengo un problema al subir archivos pesados a mi servidor 700mb- 1,5GB. Como están mucho rato por alguna razón el archivo temporal se borra, ...
  #1 (permalink)  
Antiguo 22/03/2012, 11:02
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
El archivo temporal en upload de archivos se borra

Hola, tengo un problema al subir archivos pesados a mi servidor 700mb- 1,5GB.

Como están mucho rato por alguna razón el archivo temporal se borra, o cambia de nombre y cuando finaliza da error de que no se encontró el archivo temporal.

¿Que puede ser y que solución puede haber?

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. /**
  5.  * Only needed if you have a logged in user, see option appendCookieData,
  6.  * which adds session id and other available cookies to the sent data.
  7.  *
  8.  * session_id($_POST['SID']); // whatever your session name is, adapt that!
  9.  * session_start();
  10.  */
  11.  
  12. // Request log
  13.  
  14. /**
  15.  * You don't need to log, this is just for the showcase. Better remove
  16.  * those lines for production since the log contains detailed file
  17.  * information.
  18.  */
  19.  
  20. $result = array();
  21.  
  22. $result['time'] = date('r');
  23. $result['addr'] = substr_replace(gethostbyaddr($_SERVER['REMOTE_ADDR']), '******', 0, 6);
  24. $result['agent'] = $_SERVER['HTTP_USER_AGENT'];
  25.  
  26. if (count($_GET)) {
  27.     $result['get'] = $_GET;
  28. }
  29. if (count($_POST)) {
  30.     $result['post'] = $_POST;
  31. }
  32. if (count($_FILES)) {
  33.     $result['files'] = $_FILES;
  34. }
  35.  
  36. // we kill an old file to keep the size small
  37. if (file_exists('script.log') && filesize('script.log') > 102400) {
  38.     unlink('script.log');
  39. }
  40.  
  41. $log = @fopen('script.log', 'a');
  42. if ($log) {
  43.     fputs($log, print_r($result, true) . "\n---\n");
  44.     fclose($log);
  45. }
  46.  
  47.  
  48. // Validation
  49.  
  50. $error = false;
  51.  
  52. if (!isset($_FILES['Filedata']) || !is_uploaded_file($_FILES['Filedata']['tmp_name'])) {
  53.     $error = 'Invalid Upload';
  54. }
  55.  
  56. /**
  57.  * You would add more validation, checking image type or user rights.
  58.  *
  59.  
  60. if (!$error && $_FILES['Filedata']['size'] > 2 * 1024 * 1024)
  61. {
  62.     $error = 'Please upload only files smaller than 2Mb!';
  63. }
  64.  
  65. if (!$error && !($size = @getimagesize($_FILES['Filedata']['tmp_name']) ) )
  66. {
  67.     $error = 'Please upload only images, no other files are supported.';
  68. }
  69.  
  70. if (!$error && !in_array($size[2], array(1, 2, 3, 7, 8) ) )
  71. {
  72.     $error = 'Please upload only images of type JPEG, GIF or PNG.';
  73. }
  74.  
  75. if (!$error && ($size[0] < 25) || ($size[1] < 25))
  76. {
  77.     $error = 'Please upload an image bigger than 25px.';
  78. }
  79. */
  80.  
  81.  
  82. // Processing
  83. move_uploaded_file($_FILES['Filedata']['tmp_name'], 'uploads/' . $_FILES['Filedata']['name']);
  84. $return['src'] = '/uploads/' . $_FILES['Filedata']['name'];
  85.  
  86.  
  87. if ($error) {
  88.  
  89.     $return = array(
  90.         'status' => '0',
  91.         'error' => $error
  92.     );
  93.  
  94. } else {
  95.  
  96.     $return = array(
  97.         'status' => '1',
  98.         'name' => $_FILES['Filedata']['name']
  99.     );
  100.  
  101.     // Our processing, we get a hash value from the file
  102.     $return['hash'] = md5_file($_FILES['Filedata']['tmp_name']);
  103.  
  104.     // ... and if available, we get image data
  105.     $info = @getimagesize($_FILES['Filedata']['tmp_name']);
  106.  
  107.     if ($info) {
  108.         $return['width'] = $info[0];
  109.         $return['height'] = $info[1];
  110.         $return['mime'] = $info['mime'];
  111.     }
  112.  
  113. }
  114.  
  115.  
  116. // Output
  117.  
  118. /**
  119.  * Again, a demo case. We can switch here, for different showcases
  120.  * between different formats. You can also return plain data, like an URL
  121.  * or whatever you want.
  122.  *
  123.  * The Content-type headers are uncommented, since Flash doesn't care for them
  124.  * anyway. This way also the IFrame-based uploader sees the content.
  125.  */
  126.  
  127. if (isset($_REQUEST['response']) && $_REQUEST['response'] == 'xml') {
  128.     // header('Content-type: text/xml');
  129.  
  130.     // Really dirty, use DOM and CDATA section!
  131.     echo '<response>';
  132.     foreach ($return as $key => $value) {
  133.         echo "<$key><![CDATA[$value]]></$key>";
  134.     }
  135.     echo '</response>';
  136. } else {
  137.     // header('Content-type: application/json');
  138.  
  139.     echo json_encode($return);
  140. }
  141.  
  142. ?>

Última edición por SeaPirates; 22/03/2012 a las 11:08
  #2 (permalink)  
Antiguo 22/03/2012, 12:25
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: El archivo temporal en upload de archivos se borra

bueno, ése es el propósito de un archivo temporal, por ello debes de moverlo a un directorio propio, ¿cual es tu problema exactamente?, porque aunque sean temporales no se renombran solos
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 22/03/2012, 13:56
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: El archivo temporal en upload de archivos se borra

El problema es que se elimina antes de haber terminado de subirse. Cuando va por el 80% el archivo temporal desaparece, por tanto cuando termina y tiene que mover el archivo me da error de que el archivo temporal no existe.
  #4 (permalink)  
Antiguo 22/03/2012, 14:07
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: El archivo temporal en upload de archivos se borra

eso es raro, ¿el DD tiene suficiente espacio?, ¿revisaste que las directivas de PHP upload_max_filesize y post_max_size sean del tamaño adecuado, aumentaste el limite de tiempo de ejecución de PHP?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 22/03/2012, 14:26
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: El archivo temporal en upload de archivos se borra

Cita:
Iniciado por maycolalvarez Ver Mensaje
eso es raro, ¿el DD tiene suficiente espacio?, ¿revisaste que las directivas de PHP upload_max_filesize y post_max_size sean del tamaño adecuado, aumentaste el limite de tiempo de ejecución de PHP?
Aumenté todo

upload_tmp_dir=C:\Windows\temp
session.save_path=C:\Windows\temp
upload_max_filesize = 1000000M
post_max_size = 1000000000M
max_execution_time = 1000000000000

Y nada.


El log me lanza esto:

Array
(
[time] => Thu, 22 Mar 2012 22:11:53 +0100
[addr] => ******8.15.37.dynamic.jazztel.es
[agent] => Shockwave Flash
[post] => Array
(
[Filename] => test.zip
[Upload] => Submit Query
)

[files] => Array
(
[Filedata] => Array
(
[name] => test.zip
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)

)

)

---

Última edición por SeaPirates; 22/03/2012 a las 15:35
  #6 (permalink)  
Antiguo 22/03/2012, 16:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: El archivo temporal en upload de archivos se borra

Sí buscas un poco en el manual puedes ver que el error 1 es este:
Cita:
UPLOAD_ERR_INI_SIZE
Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.
http://www.php.net/manual/en/feature...oad.errors.php

Es decir el php.ini que cambiaste, o 1) no es el que esta usando ese script, o 2) los cambios no tienen efecto ya que estas en un ambiente compartido y no puedes cambiar esos settings.

Realiza un phpinfo() en la misma carpeta donde esta tu script y revisa sí los valores están cambiados, ya que por la información que arroja tu script parecería que no esta tomando los cambios.

Saludos.
  #7 (permalink)  
Antiguo 22/03/2012, 16:28
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: El archivo temporal en upload de archivos se borra

He revisado el phpinfo y está correcto:

upload_max_filesize 1000000M
  #8 (permalink)  
Antiguo 22/03/2012, 16:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: El archivo temporal en upload de archivos se borra

Haz la segunda prueba que te comenté un phpinfo() sobre la carpeta donde esta tu PHP te puede indicar sí el cambio fue hecho o no.

El error no miente, te esta diciendo que el archivo que quieres subir excede la directiva del php.ini y es por algo.

Saludos.
  #9 (permalink)  
Antiguo 22/03/2012, 16:55
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: El archivo temporal en upload de archivos se borra

Si, está correcto también.

Le he añadido dos ceros más al upload_max_filesize, haver si puede ser eso aunque no creo..
  #10 (permalink)  
Antiguo 22/03/2012, 16:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: El archivo temporal en upload de archivos se borra

También revisa que no tengas espacios en blanco frente al valor ya que eso hace que PHP lo interprete mal, prueba poner
Código:
upload_max_filesize = 1G
post_max_size = 1G
Saludos.
  #11 (permalink)  
Antiguo 22/03/2012, 18:36
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: El archivo temporal en upload de archivos se borra

Nada, ya le dí más al upload_max_filesize y me sigue tirando:

Cita:
Array
(
[time] => Fri, 23 Mar 2012 01:31:27 +0100
[addr] => ******8.15.37.dynamic.jazztel.es
[agent] => Shockwave Flash
[post] => Array
(
[Filename] => test.zip
[Upload] => Submit Query
)

[files] => Array
(
[Filedata] => Array
(
[name] => test.zip
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)

)

)

---
Ya no sé con que más trastear. Es un fenómeno paranormal.

Última edición por SeaPirates; 22/03/2012 a las 18:46
  #12 (permalink)  
Antiguo 22/03/2012, 20:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: El archivo temporal en upload de archivos se borra

Te sigue marcando el mismo error, como te comento, prueba con 1G y asegurate que no exista más de 1 espacio o puede causar un error.

Igual en tu script de upload haz un ini_get('upload_max_filesize'); para que veas que valor tiene al entrar tu script.

Saludos.
  #13 (permalink)  
Antiguo 22/03/2012, 21:58
(Desactivado)
 
Fecha de Ingreso: septiembre-2010
Mensajes: 498
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: El archivo temporal en upload de archivos se borra

si no refresca el apache no ejecutaras los cambios de aumento
  #14 (permalink)  
Antiguo 23/03/2012, 16:10
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: El archivo temporal en upload de archivos se borra

tienes que reiniciar tu server para que los cambios se hagan notables

Etiquetas: borra, temporal, upload
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:56.