Foros del Web » Programando para Internet » PHP »

subir archivo sql

Estas en el tema de subir archivo sql en el foro de PHP en Foros del Web. Hola estoy intentando subir un archivo .sql con este codigo: Código PHP: /////////////////////datos del arhivo  $nombre_archivo  =  $_FILES [ 'archivo' ][ 'name' ];  $tipo_archivo  =  $_FILES [ ...
  #1 (permalink)  
Antiguo 13/11/2006, 16:50
 
Fecha de Ingreso: mayo-2003
Mensajes: 37
Antigüedad: 20 años, 11 meses
Puntos: 0
subir archivo sql

Hola
estoy intentando subir un archivo .sql con este codigo:

Código PHP:
/////////////////////datos del arhivo 
$nombre_archivo $_FILES['archivo']['name']; 
$tipo_archivo $_FILES['archivo']['type']; 
$tamano_archivo $_FILES['archivo']['size']; 
//compruebo si las características del archivo son las que deseo 
 
if (!(strpos($tipo_archivo"sql") )) {
    echo 
"La extensión o el tamaño del archivo no es correcta. <br><br><table><tr><td><li>sólo se permiten archivos .sql</td></tr></table>"
} else { 
    if (
move_uploaded_file($_FILES['archivo']['tmp_name'], $nombre_archivo)){ 
       echo 
"El archivo ha sido cargado correctamente."
    }else{ 
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 

pero siempre muestra:
"La extensión o el tamaño de los archivos no es correcta...

en cambio si saco esa validacion strpos(......), sí me sube el archivo.

El tipo del archivo q detecta al imprimir un echo $tipo_archivo; es application/octet-stream

Lo que quiero es subir ese archivo y luego tomarlo para ejecutarlo, y actualizar la base de datos.
gracias

Última edición por cecilia_sobarzo; 13/11/2006 a las 17:20 Razón: algo demas
  #2 (permalink)  
Antiguo 13/11/2006, 16:53
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
if (!(strpos reemplazalo por if(!strpos
__________________
Hospedaje Web al mejor costo!
  #3 (permalink)  
Antiguo 13/11/2006, 17:19
 
Fecha de Ingreso: mayo-2003
Mensajes: 37
Antigüedad: 20 años, 11 meses
Puntos: 0
Cita:
Iniciado por urgido Ver Mensaje
if (!(strpos reemplazalo por if(!strpos
nada.... sigue igual
  #4 (permalink)  
Antiguo 13/11/2006, 17:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Fijate bien que indica o que valor te devuelve:

echo $_FILES['archivo']['type'];

de un archivo .sql .. en general se trata como "texto plano" pues lo que te devuelve esa propiedad de un archivo que subes es su formato "MIME" no la extensión del archivo (por el nombre de este).

Si quieres validar la "extensión" tienes que basarte en el nombre:
$_FILES['archivo']['name']

Y ahí operar para tomar sólo lo que quede del últimio . (punto) hacia el final .. Con un explode() y end() lo podrías hacer rápidamente.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 13/11/2006, 17:37
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Lo que tu quieres es validar q la extension del archivo sea "sql"?si eso eso:
Código PHP:

$nombre_archivo 
$_FILES['archivo']['name']; 

$tipo explode("."$nombre_archivo);

if(
$tipo[1] == "sql")
{
.
.
//Extension permitida, aqui metes tu codigo
.
}
else
{
   echo 
"Extension no permitida":

__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #6 (permalink)  
Antiguo 13/11/2006, 17:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por B** Ver Mensaje
Lo que tu quieres es validar q la extension del archivo sea "sql"?si eso eso:
Código PHP:

$nombre_archivo 
$_FILES['archivo']['name']; 

$tipo explode("."$nombre_archivo);

if(
$tipo[1] == "sql")
{
.
.
//Extension permitida, aqui metes tu codigo
.
}
else
{
   echo 
"Extension no permitida":

Ojo con nombres de archivos tipo nose.blabla.sql .. No puedes guiarte o esperar que en el elemento "1" (los arrays empiezan en 0 .. recordar) esté tu última parte de lo que venga despues del . (punto).

Por eso indiqué antes que al ejemplo que expones habría que usar end() que nos toma el último elemento de un array dado (y el explode() ya nos "partió") el array en tantos elementos como "puntos" se encuentren en esa cadena dada.

Quedaría:

Código PHP:
if(end($tipo) == "sql"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 13/11/2006, 20:34
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas, agregaría que conviene pasar la extensión obtenida a mayúsculas (o a minúsculas) y comparar contra el valor válido en mayúsculas (o mínusculas, según se haya elegido). Dicho así tal vez no sea tan claro, pero con un ejemplo se ve mejor:

script1.sql
script2.SQL
script3.Sql

Los 3 nombres son posibles y (a menos que medie alguna extraña razón), válidos. Pero si se compara el nombre de la extensión contra el string 'sql', sólo el primero pasa la validación. La solución es hacer algo así:

Código PHP:
if (strtolower($extension) == 'sql'
en vez de

Código PHP:
if($extension == 'sql'

Por si a alguno le sirve, les dejo una función simple pero útil para validar cualquier extensión (en la llamada se determina cuál o cuáles son las extensiones válidas para un archivo)

Código PHP:
function validarExtensiones($nombreArchivo,$arrExtValidas) {
    
$extension strtolower(strrchr($nombreArchivo,'.'));
    
    
$valido false;
    
    foreach(
$arrExtValidas as $ext) {
        if (
$extension == $ext) {
            
$valido true;
        }
    }
    
    return 
$valido;
}

// Ejemplo
$arrExtValidas = array('.jpg','.bmp','.gif','.pdf','.jpeg');
$esValido validarExtensiones('alguna_foto.JPg',$arrExtValidas);
var_dump($esValido); 
Suerte
Califa
  #8 (permalink)  
Antiguo 14/11/2006, 03:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por califa010 Ver Mensaje
Buenas, agregaría que conviene pasar la extensión obtenida a mayúsculas (o a minúsculas) y comparar contra el valor válido en mayúsculas (o mínusculas, según se haya elegido). Dicho así tal vez no sea tan claro, pero con un ejemplo se ve mejor:

script1.sql
script2.SQL
script3.Sql

Los 3 nombres son posibles y (a menos que medie alguna extraña razón), válidos. Pero si se compara el nombre de la extensión contra el string 'sql', sólo el primero pasa la validación. La solución es hacer algo así:

Código PHP:
if (strtolower($extension) == 'sql'
en vez de

Código PHP:
if($extension == 'sql'

Por si a alguno le sirve, les dejo una función simple pero útil para validar cualquier extensión (en la llamada se determina cuál o cuáles son las extensiones válidas para un archivo)

Código PHP:
function validarExtensiones($nombreArchivo,$arrExtValidas) {
    
$extension strtolower(strrchr($nombreArchivo,'.'));
    
    
$valido false;
    
    foreach(
$arrExtValidas as $ext) {
        if (
$extension == $ext) {
            
$valido true;
        }
    }
    
    return 
$valido;
}

// Ejemplo
$arrExtValidas = array('.jpg','.bmp','.gif','.pdf','.jpeg');
$esValido validarExtensiones('alguna_foto.JPg',$arrExtValidas);
var_dump($esValido); 
Suerte
Califa
Te faltaría considerar en tu función los casos que comenté antes sobre nombre de archivos tipo:

nose.algo.algo.algo.extension

La validación que haces de las extensiones admitidas en el array podrías usar la función "in_array()" (en lugar del foreach() que empleas) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 14/11/2006, 14:20
 
Fecha de Ingreso: mayo-2003
Mensajes: 37
Antigüedad: 20 años, 11 meses
Puntos: 0
De acuerdo

Gracias por todas las "ayudas", esa parte esta resultando bien.
Ahora solo me queda el problema de la ejecucion de ese archivo en el servidor, haciendo el "update" de la base de datos. Estoy en las pruebas asi que cuando tenga una duda posteo.

graxsss
  #10 (permalink)  
Antiguo 14/11/2006, 15:34
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Cita:
Te faltaría considerar en tu función los casos que comenté antes sobre nombre de archivos tipo:

nose.algo.algo.algo.extension

La validación que haces de las extensiones admitidas en el array podrías usar la función "in_array()" (en lugar del foreach() que empleas) ..
Buenas, si te fijás, usé strrchr (no strchr), por lo que el substring se hace a partir del último punto encontrado hacia el final.

En general, nunca usé muy a fondo las (muchas) funciones específicas que tiene php para arrays, más que nada por desconocerlas y por la costumbre de hacerlo a mano en otros lenguaje con menos funciones predefinidas. Pero siempre son bienvenidas si simplifican las cosas, a sí que tomo en cuenta el dato sobre el in_array().

Salidas
Califa
  #11 (permalink)  
Antiguo 15/11/2006, 05:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por califa010 Ver Mensaje
Buenas, si te fijás, usé strrchr (no strchr), por lo que el substring se hace a partir del último punto encontrado hacia el final.

En general, nunca usé muy a fondo las (muchas) funciones específicas que tiene php para arrays, más que nada por desconocerlas y por la costumbre de hacerlo a mano en otros lenguaje con menos funciones predefinidas. Pero siempre son bienvenidas si simplifican las cosas, a sí que tomo en cuenta el dato sobre el in_array().

Salidas
Califa
Ok, no ví bien el "r" en strrchr() ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 15/11/2006, 10:26
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Jaja, hablando de no ver bien, acabo de notar que escribí Salidas en vez de Saludos.

Suerte
Califa
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 07:19.