PHP: ¿cómo puedo almacenar una imagen en una base de datos SQL sin usar archivos temporales?

Estoy tratando de almacenar una imagen en una base de datos SQL sin usar archivos temporales. No quiero usar archivos temporales ya que muchos de ellos podrían causar problemas. yo vi esto tutoriales: pero eso usa archivos temporales al igual que esto pregunta y este . Tengo la imagen como un recurso php y no como un archivo. Intentar poner una cadena base64 de la imagen también falla. Estoy escribiendo en un blob. Gracias por mirar, cualquier ayuda sería apreciada.

preguntado el 12 de junio de 12 a las 18:06

No estoy seguro de que la arquitectura de PHP haga que sea razonable recibir directamente el archivo sin usar un directorio temporal. -

@dystroy tiene razón: el archivo debe ir a alguna parte una vez que esté fuera de la computadora del usuario, ¿no? Podrías simplemente usar el $_FILES['uploadedfile']['tmp_name'] archivo, pero eso es lo más cercano a no volver a guardar que puede obtener. -

Esperaba que el archivo pudiera estar simplemente en la base de datos sql y no como un archivo temporal. -

Puede hacerlo en la mayoría de los idiomas, pero PHP no lo permite, ya que permite que Apache maneje la carga. -

Sin embargo, la buena noticia es que Apache elimina automáticamente el archivo temporal una vez que se completa la solicitud. Por lo tanto, no terminará con miles de archivos temporales "causando problemas", como dice. -

2 Respuestas

¡Búfer de salida!

ob_start();
imagejpeg($image_resource);
$image = ob_get_clean();

$image ahora contiene datos de imagen que puede escribir en un campo blob en su base de datos mysql.

Respondido el 15 de junio de 12 a las 17:06

Eso es para salida buffering : "Mientras el almacenamiento en búfer de salida está activo, no se envía ninguna salida desde el script (aparte de los encabezados), sino que la salida se almacena en un búfer interno". - Denys Séguret

pd intenta dejarlo 24-48 horas antes de seleccionar una respuesta :) - John David Ravenscroft

No seleccioné uno intencionalmente. Ahora arreglado. - jersam515

sí lo es. imagejpeg() dará salida a un archivo o al flujo de salida. el código que te di captura ese flujo. solo estás amortiguando entre ob_start() y ob_get_clean() luego puede continuar enviando a la transmisión como de costumbre. ob_get_clean() cierra la sesión de almacenamiento en búfer y devuelve todo lo que estaba almacenado en ella. - John David Ravenscroft

Lo intentaré cuando vuelva al servidor. Gracias. - jersam515

PHP no está realmente diseñado para manejar tareas largas o cargar archivos.

Eso significa que se basa en las funciones de Apache para cargar archivos.

Entonces, debe hacer lo que le muestran todos los ejemplos: deje que Apache maneje la carga en un directorio temporal y solo después de colocar el archivo en la base de datos.

Respondido el 12 de junio de 12 a las 18:06

De acuerdo, lo haré, gracias por ayudar a todos, incluso si lo que quería hacer es imposible/impracticable. - jersam515

Sin embargo, esa es una buena práctica para la mayoría de los idiomas. La buena noticia es que Apache es bueno para manejar la carga. - Denys Séguret

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.