Foros del Web » Programando para Internet » PHP »

BLOB en Oracle de Window a Linux via PHP

Estas en el tema de BLOB en Oracle de Window a Linux via PHP en el foro de PHP en Foros del Web. Que tal estimados, necesito ayuda sobre este tema que me está quebrando la cabeza hace rato.: Resulta que debo insertar una imagen o un documento ...
  #1 (permalink)  
Antiguo 01/07/2008, 11:59
Avatar de JaimeVasquez  
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
BLOB en Oracle de Window a Linux via PHP

Que tal estimados, necesito ayuda sobre este tema que me está quebrando la cabeza hace rato.:

Resulta que debo insertar una imagen o un documento (world, pdf, etc) en una base de datos en Oracle, el problema es que como la imagen le rescato el path de donde se encuentra y se lo envio al Php para que a su vez lo guarde en una base de datos en Oracle.

La parte de guardar el campo blob en si ya no es problema ya que encontre un ejemplo practico de como guardar el archivo (ver link de mas abajo)...

http://www.52cam.cn/linux-database/LinuxDB6/5796.htm

...Peeero el real problema es que php como está en Linux "no entiende" cuando le doy un path de por ejemplo "C:\archivos\documento.doc" y como estoy trabajando en una intranet la persona va a subir archivos en una plataforma ntfs (windows).

Ojala alguien pueda ayudarme, gracias de antemano.
  #2 (permalink)  
Antiguo 01/07/2008, 12:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: BLOB en Oracle de Window a Linux via PHP

vamos tio! es que es obvio que no lo va a entender....

debes usar su ruta por ejemplo: /media/disk-1 (si es el caso)

pero bueno, amigo... te sugiero investigues mucho acerca de SAMBA y como accesar a las unidades montadas Windows, o mas bien... a las carpetas de red, pero bueno...

con simple PHP no creo que averigües todo esto... debes manosearle un rato a tu *nix suerte! (y a los COMO de linux)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/07/2008, 12:10
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: BLOB en Oracle de Window a Linux via PHP

Hola JaimeVasquez,

No hay problema con los paths ya que una vez que tu envías el archivo al servidor usando el arreglo $_FILES ya el archivo esta en el servidor, no en la maquina cliente por lo que puedes usar copy, move_uploaded_file, fopen, etc.

Saludos.
  #4 (permalink)  
Antiguo 01/07/2008, 13:42
Avatar de JaimeVasquez  
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: BLOB en Oracle de Window a Linux via PHP

...mmm ..gracias por las respuestas pero aun me queda la duda de como acceder al arreglo, tengo esto escrito por si me pueden indicar que estoy haciendo mal

A modo de disculpas por estas consultas debo indicar que estoy viendo php y javascript hace 1 semana asi que mis conocimientos no son muy extensos (siendo muuuy amable) al respecto

subir.php:
<?php
$ruta_a_subir = addslashes('uploads/');
if(move_uploaded_file($_FILES['lob_upload']['tmp_name'], $ruta_a_subir))
{
echo 'El archivo se subio con exito';
}
else
{
echo 'Ocurrio un error subiendo el archivo';
}
?>

BscImagen.php

<html>
<head>
<title>Ejemplo de uso simple en envío y recepción de parámetros con PHP</title>
</head>
<body>
<?php

if(!isset($_POST['lob_upload']) || $_POST['lob_upload'] == 'none')
{
?>
<form enctype="multipart/form-data" action="subir.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="10000">
Seleccionar Archivo: <input name="lob_upload" type="file">
<input type="submit" value="Subir">
</form>

<?php

}
else
{
/************************************************** *****************/
/* Se realiza la carga de variables de ambiente e inicio de sesion */
/************************************************** *****************/
//phpinfo();

$Conn = ocilogon('system', 'tornado', 'XE');
include ('extrae.php');

$sql = "select count(*)indice from jaime_imagen";
$stmt = OCIParse($Conn, $sql);
$rs = OCIExecute($stmt, OCI_DEFAULT);
if (!$rs)
{
$e = OCIError($stmt);
$_SESSION['SQL_Error'] = $e['message'];
return false;
}
if ($rs > 0 )
$indice = $rs+1;
else
$indice = 1;

print "Prueba:".$_POST;

/************************************************** **/
/* Extraigo los datos que restan para ser asignados */
/************************************************** **/
$lob_description = $_POST['lob_description'];
$path_upload = $_POST['lob_upload'];
$lob_upload_name = extrae_nomarch($path_upload);
$lob_upload = addslashes( file_get_contents( $lob_upload_name ) );
$lob_upload_type = filetype($lob_upload_name);
$lob_upload_size = filesize($lob_upload_name);

print '<table border="1">';
print '<tr><td>Indice : '.$indice.'</td></tr>';
print '<tr><td>Descripción: '.$lob_description.'</td></tr>';
print '<tr><td>Path+Nombre: '.$path_upload.'</td></tr>';
print '<tr><td>Nombre : '.$lob_upload_name.'</td></tr>';
print '<tr><td>Tamaño : '.$lob_upload_size.'</td></tr>';
print '<tr><td>Tipo : '.$lob_upload_type.'</td></tr>';
print '<tr><td>Mime : '.mime_content_type($lob_upload_name).'</td></tr>';
print '</table>';

$lob = OCINewDescriptor($Conn, OCI_D_LOB);
$stmt = OCIParse($Conn,"INSERT INTO jaime_imagen (id,description,bin_data,filename,filesize,filetyp e) VALUES (BINARY_DATAID.NEXTVAL,'$lob_description',EMPTY_BL OB(),'$lob_upload_name','$lob_upload_size','$lob_u pload_type') returning BIN_DATA into :the_blob");
OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);

print '<table border="1">';
print '<tr><td>Indice : '.$stmt.'</td></tr>';
print '</table>';

OCIExecute($stmt,OCI_DEFAULT);
if($lob->savefile($lob_upload))
{
OCICommit($Conn);
echo "Archivo fue cargado correctamente\n<br>";
echo "<a href=show.php>SHOW FILES</a>";
}
else
{
echo "No se pudo cargar el archivo Blob\n";
}
OCIFreeStatement($stmt);
OCILogoff($Conn);



}

?>
</body>
</html>

extrae.php
<?php
function extrae_nomarch($nombre)
{
$maxlen = strlen($nombre);
for ($i=$maxlen; $i>=1; $i--)
{
if(substr($nombre, $i, 1) == chr(92))
return substr($nombre, $i+1, strlen($nombre));
}
}

?>
  #5 (permalink)  
Antiguo 01/07/2008, 14:35
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: BLOB en Oracle de Window a Linux via PHP

Hola JaimeVasquez,

Te recomiendo leas en las FAQs del foro hay un script documentado que explica como subir archivos al servidor, puedes estudiar ese script y juntarlo con el que tienes para insertarlo en Oracle.

Saludos.
  #6 (permalink)  
Antiguo 01/07/2008, 18:35
Avatar de JaimeVasquez  
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: BLOB en Oracle de Window a Linux via PHP

Ok gracias.. en todo caso ya pille mi problema la solución es la siguiente (opte por /tmp pero se puede configurar otro directorio) la adjunto por si a alguine le sucede:

Esto es para desplegar un formulario para ingresar la ruta del archivo a ser subido..
<head>
<title>subida de archivos</title>
</head>
<body>
<form method="POST" action="prueba6.php" enctype="multipart/form-data">
<input type="file" name="TxtArchivo"><br>
<input type="submit" value="Subir">
</form>
</body>
</html>

Luego gatillo mi php (prueba6.php) que movera el archivo temporal a un directorio de descarga
<?
$archivo_nombre = $_FILES["TxtArchivo"]["name"];
$archivo_peso = $_FILES["TxtArchivo"]["size"];
$archivo_temporal = $_FILES["TxtArchivo"]["tmp_name"];

$ruta_a_subir = addslashes('/tmp/'.$archivo_nombre);

if(move_uploaded_file($archivo_temporal, $ruta_a_subir))
{
echo "Archivo subido $archivo_temporal = $archivo_nombre<br>";
}
else
{
echo "Error al subir el archivo $archivo_temporal";
}

?>

finalmente realizo el resto de subir a la base..esto es PHP por siaca, y se debe adaptar a lo que se requiera ..

$lob_description = "Archivo Plano";
$lob_upload = file_get_contents(addslashes("/tmp/".extrae_nomarch($Archivo)));
$lob_upload_name = addslashes('/tmp/'.extrae_nomarch($Archivo));
$lob_upload_type = mime_content_type(extrae_nomarch($Archivo));
$lob_upload_size = filesize($lob_upload_name);

$Sql = "INSERT INTO prueba_imagen (id,description,bin_data,filename,filesize,filetyp e) VALUES ('$IdMat','$lob_description',EMPTY_BLOB(),'$lob_up load_name','$lob_upload_size','$lob_upload_type') returning BIN_DATA into :the_blob";

/**********************************************/
/* Se insertan las variables a la tabla */
/**********************************************/
$lob = OCINewDescriptor($Conn, OCI_D_LOB);
$stmt = OCIParse($Conn,$Sql);
OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);

OCIExecute($stmt,OCI_DEFAULT);
if($lob->savefile($lob_upload_name))
{
OCICommit($Conn);
$retorno= array('status'=>1,'reg'=>'Registro Ingresado Exitosamente');
unlink($lob_upload_name);
return $retorno;
}
else
{
$e = OCIError($stmt);
$retorno= array('status'=>0,'reg'=>$e['message']);
unlink($lob_upload_name);
return;
}

Espero que le sirva a alguien...a y extrae_nomarch() solo rescata el nombre del archivo a subir, un misero for..etc..
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 22:28.