Foros del Web » Soporte técnico » Ayuda General »

Por si quieren subir archivos grandes a MySQL en Windows/Linux

Estas en el tema de Por si quieren subir archivos grandes a MySQL en Windows/Linux en el foro de Ayuda General en Foros del Web. Que tal un saludo, aqui les escribo estas consideraciones que se me presentaron cuando quise subir archivos mayores a 1MB a MySQL y la verdad ...
  #1 (permalink)  
Antiguo 13/05/2005, 18:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 82
Antigüedad: 20 años
Puntos: 1
Por si quieren subir archivos grandes a MySQL en Windows/Linux

Que tal un saludo, aqui les escribo estas consideraciones que se me presentaron cuando quise subir archivos mayores a 1MB a MySQL y la verdad es que si me costo un buen solucionarlo, es por eso que les dejo esto, a alguien le servira se los aseguro:


Windows Xp Profesional/Fedora Core
Apache: 2.0.48
Php: 4.3.4
Mysql: 5.0.0

chequen tambien este link:

http://www.forosdelweb.com/f18/subir-archivos-grandes-mysql-linux-294768/



PHP:

WINDOWS Y LINUX:

En el php.ini

file_uploads = On // en On

max_execution_time = 120 // los segundos que consideren

max_input_time = 120 // los segundos que consideren

memory_limit = 16M // por lo regular el mismo tamaño del archivo a subir o quizas mas

upload_tmp_dir = /xyz // su directorio temporal con permisos de R/W

post_max_size = 10M // el tamaño maximo de su archivo a subir

upload_max_filesize = 10M // el tamaño maximo de su archivo a subir


*** Hacer restricciones en su codigo a cerca del tamaño maximo de los archivo que quieren subir (para ver que en realidad sube a MySQL o NO)

SI LO VAN A HACER EN LINUX:

consideren lo siguiente:

PHP:

si no tienen este archivo (php.conf) en este directorio (conf.d) HAY QUE CREARLO:

Yo lo he creado aqui:

/usr/local/apache2/conf.d/php.conf


con el siguiente contenido en el php.conf:


# PHP Configuration for Apache
# Load the apache module
#LoadModule php4_module modules/libphp4.so

# Cause the PHP interpreter handle files with a .php extension.

### ESTO SERÀ LO IMPORTANTE
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 10240000 // PARA 10MB o +
</Files>
### LO ANTERIOR FUE LO IMPORTANTE

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

# Add index.php to the list of files that will be served as directory
# indexes.
DirectoryIndex index.php



APACHE:

DENTRO DEL httpd.conf del Apache incluir el archivo que creamos de la siguiente manera como lo indico:

...
Listen 80

# Dynamic Shared Object (DSO) Support
# To be able to use the functionality of a module which was built as a DSO you ...

LoadModule php4_module modules/libphp4.so

### ASI LO INCLUYEN
Include conf.d/*.conf
...

REINICIAN EL APACHE: /usr/local/apache2/bin/
./apachectl restart




MYSQL:

WINDOWS:

Busquen el archivo de configuracion de Mysql; se puede llamar asi: my.ini y lo configuran:

//my.ini en mi caso y esta en c:\windows\my.ini


y agregarle la siguiente linea:

set-variable = max_allowed_packet=10M // para 10MB

la siguiente linea solo la descomente(le quite el #):

set-variable=key_buffer=10M

pero con la de arriba es mas que suficiente ya que lo comprobe, aunque al final deje la de abajo tambien configurada.


LINUX:

Hacer lo mismo que en Windows solo que haora el archivo se llama: my.cnf

busquenlo desde la consola asi: locate my.cnf
si no lo encuentra el sistema busquenlo ustedes mismos, debe de estar ubicado en: /etc/my.cnf; una vez localizado lo configuramos:


en la seccion [mysqld] editamos o agregamos (segun su caso):

key_buffer = 16M
max_allowed_packet = 10M // los 10 MB
table_cache = 64
sort_buffer_size = 10M // Yo lo deje asi
read_buffer_size = 10M // Yo lo deje asi
myisam_sort_buffer_size = 8M

OJO: mysql tiene por default 4 archivos de configuracion para que los editemos y estos son y estan en:

/usr/local/mysql/support-files/

my-huge.cnf
my-large.cnf
my-medium.cnf
my-small.cnf

CHEQUENLOS Y PUEDEN EDITARLOS LES ACONSEJO QUE LO HAGAN UNICAMENTE EN LA SECCION de [mysqld]


*** EN DADO CASO DE QUE NO HAYAN ENCONTRADO EL ARCHIVO my.cnf (como fue mi caso) hay que crearlo o copiarlo asi:

cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

COMO LES DIJE ARRIBA ESA ES LA RUTA EN LA QUE DEBE DE ESTAR: /etc/my.cnf. Apartir de hay, modifican lo que les comento, pero principalmente estas 2 lineas:

key_buffer = 16M
max_allowed_packet = 10M // los 10 MB

REINICIAN EL MYSQL: /etc/init.d/
./mysql.server stop
./mysql.server start


ASI ES QUE SI USTEDES QUIEREN SUBIR ARCHIVOS A MYSQL MAYORES A 1 MB CON LO ANTERIOR LO PUEDEN RESOLVER YA QUE YO LO HE RESUELTO ASI, Y PRINCIPALMENTE PARA AQUELLOS QUE OCUPEN CODIGO SIMILAR AL SIGUIENTE:

<?
$archivo = $_FILES["archivito"]["tmp_name"];
$tamanio = $_FILES["archivito"]["size"];
$tipo = $_FILES["archivito"]["type"];
$nombre = $_FILES["archivito"]["name"];
$titulo = $_POST["titulo"];
if ( $archivo != "none" )
{
// ESTA ES LA PARTE DEL PROBLEMA
$fp = fopen($archivo, "rb");
$contenido = fread($fp, $tamanio);
$contenido = addslashes($contenido);
fclose($fp);

$qry = "INSERT INTO archivos ...

para los que NO quieran subir archivos a MySQL sino que los quieran subir a su disco duro solo configuren lo basico que encuentran en este mismo foro y con eso jala, les dejo el codigo, probado en WINDOWS/LINUX:


$upload = $_FILES[upload];
$upload_tmp = $_FILES['archivoCor']['tmp_name'];
$upload_name = $_FILES['archivoCor']['name'];
$destino ="{$_SERVER['DOCUMENT_ROOT']}/pentiumonce/".$areaArt."/{$_FILES['archivoCor']['name']}";
move_uploaded_file($upload_tmp,$destino) or DIE("Upload incorrecto");
echo "<BR><BR><BR>Archivo cargado correctamente";



Un saludo.

Última edición por pentiumonce; 13/05/2005 a las 18:07 Razón: especificar el archivo de php
  #2 (permalink)  
Antiguo 16/05/2005, 07:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te invito a dejar todos estos comentarios como "FAQ" para el foro de PHP, pues si bien hay consideraciones para "Mysql" que corresponderían a las FAQ's pero del foro de "Base de datos" .. la mayoría y todo en conjunto se muy habitual para PHP y su uso.

Un saludo,

PD: La FAQ la puedes publicar tu mismo .. tan sólo sigue las recomendaciones de como hacerlo de dicho mensaje. Cualquier duda, avisame.
  #3 (permalink)  
Antiguo 09/01/2006, 12:04
 
Fecha de Ingreso: enero-2006
Mensajes: 4
Antigüedad: 18 años, 10 meses
Puntos: 0
Ok.. para windows me funciona todo bien y te agradesco !! por tu ayuda , pero en linux no me funciona...

cuando inserto este codigo en el php.conf de apache

<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 10240000 // PARA 10MB o +
</Files>

y no quiere iniciarce el servicio

utiliso apache2 ,php5
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 13:00.