• Lunes 23 de Diciembre de 2024, 04:31

Autor Tema:  Subir Imagenes a Oracle con PHP  (Leído 4566 veces)

jualeop

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Subir Imagenes a Oracle con PHP
« en: Viernes 7 de Enero de 2011, 16:52 »
0
Buenos Dias,

acudo a ustedes para tratar de resolver un problema. resulta que estoy tratando de subir imagenes a una BD en ORACLE por PHP pero no he podido, cuando ejecuto el SQL me muestra un error "ociparse(): OCIParse: ORA-00972: identificador demasiado largo", les adjunto el código, es de anotar que en la BD tengo el campo ARCHIVO_BINARIO declarado como BLOB:

Código: PHP
  1.  
  2. // archivo temporal (ruta y nombre).
  3. $binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;
  4.  
  5. // leer del archvio temporal .. el binario subido.
  6. $binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
  7.  
  8. // Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
  9. $binario_nombre=$_FILES['archivo']['name'];
  10. $binario_peso=$_FILES['archivo']['size'];
  11. $binario_tipo=$_FILES['archivo']['type'];
  12.  
  13. //insertamos los datos en la BD.
  14.             $db_conn = ocilogon( "SCRIPT", "SCRIPT", "ORAPR1");
  15.  
  16.             $cmdstr = "insert into SCRIPT.ARCHIVOS (ARCHIVO_BINARIO, ARCHIVO_NOMBRE, ARCHIVO_PESO, ARCHIVO_TIPO) VALUES ('$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
  17.             $parsed = ociparse($db_conn, $cmdstr);
  18.             ociexecute($parsed);
  19. header("location: listar_imagenes.php");  // si ha ido todo bien
  20.  
  21.  


Agradezco su ayuda al respecto.

jualeop

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Subir Imagenes a Oracle con PHP
« Respuesta #1 en: Martes 11 de Enero de 2011, 16:25 »
0
Les cuento que ya pude hacer la tarea, les adjunto los archivos completos para hacer la conexión y consultar las imágenes:

***************************************lobosolitario.php**********************************
Código: PHP
  1.  
  2. <html>
  3. <head>
  4. <title>Formulario de subida de fotos</title>
  5. </head>
  6. <body>
  7. Formulario de subida de fotos a Oracle<br><br>
  8. Limite de tamaño de subida de fotos 1.024 KB<br>
  9.  
  10. <form action="lobosolitario1.php" method="post" enctype="multipart/form-data">
  11. Descripción de la imagen: <input type="text" name="lob_description"><br>
  12. Abrir Archivo: <input type="file" name="lob_upload"><br><br>
  13. <input type="submit" value="Subir Imagen"> - <input type="reset">
  14. </form>
  15. <br><a href=show.php>ver imagenes</a>
  16. </body>
  17. </html>
  18.  
  19.  

*************************************lobosolitario1.php*************************************

Código: PHP
  1.  
  2. <?php
  3. $lim_tam = "1024000";
  4. $lob_description = $_POST['lob_description'];
  5. $lob_upload_name = $_FILES['lob_upload']['name'];
  6. $lob_upload_size = $_FILES['lob_upload']['size'];
  7. $lob_upload_type = $_FILES['lob_upload']['type'];
  8. $lob_upload = $_FILES['lob_upload']['tmp_name'];
  9.  
  10. if($_FILES['lob_upload']['error']==1){
  11. print "
  12.    <script>
  13.    alert('El Archivo supera el límite de tamaño, por favor seleccione un archivo diferente.')
  14.    document.location.href='lobosolitario.php'
  15.    </script>
  16.    ";
  17. }else if($lob_upload_size>$lim_tam){
  18. print "
  19.    <script>
  20.    alert('El Archivo supera el límite de tamaño, por favor seleccione un archivo diferente.')
  21.    document.location.href='lobosolitario.php'
  22.    </script>
  23.    ";
  24. } else if($_FILES['lob_upload']['error']!=0){
  25. print "
  26.    <script>
  27.    alert('Error de Archivo, el archivo no se puede subir.')
  28.    document.location.href='lobosolitario.php'
  29.    </script>
  30.    ";
  31. }
  32. else {
  33. $user = "SCRIPT";
  34. $pass = "SCRIPT";
  35. $tsnames = "ORAPR1";
  36. //Aqui se establece la conexion con una base de datos oracle.
  37. $conn = OCILogon($user,$pass,$tsnames);
  38.  
  39. /*Inicializa un nuevo descriptor vacío LOB/FILE (LOB por defecto)
  40. Reserva espai per mantenir descriptors o localitzadors LOB. Els valors valids pel tipus type son
  41. OCI_D_FILE, OCI_D_LOB, OCI_D_ROWID. Per descriptors LOB, els metodes LOAD, SAVE, i SAVEFILE estan associats
  42. amb el descriptor, per BFILE només existeix el mètode LOAD*/
  43. $lob = OCINewDescriptor($conn, OCI_D_LOB);
  44.  
  45. //Preparem la consulta SQL(INSERT) capaç d'introduir els valors a la base de dades.
  46. $stmt = OCIParse($conn,"INSERT INTO BINARY_DATA (id,description,bin_data,filename,filesize,filetype) VALUES (LOBO.NEXTVAL,'$lob_description',EMPTY_BLOB(),'$lob_upload_name','$lob_upload_size','$lob_upload_type') returning BIN_DATA into :the_blob");
  47.  
  48. /* Enlaza una variable PHP a un Placeholder de Oracle
  49. Enllaça la variable PHP variable a un placeholder d'ORACLE ph_name. Si aquesta serà usada per entrada o
  50. o sortida es determinarà en temps d'execució, i serà reservat l'espai necessari d'emmagatzemament. El
  51. parametre lenght estableix el tamany màxim de l'enllaç. Si s'estableix length a -1 OCIBindByName utilitzarà
  52. el tamany de la variable per establir el tamany màxim.
  53. EN LA ULTIMA PRUEBA QUE SE REALIZÓ EL 07/01/2011 ESTE VALOR $LOB VENÍA PASADO POR REFERENCIA &$LOB NO OBSTANTE ESTO ES UN ERROR EN ESTE CASO
  54. */
  55. OCIBindByName($stmt, ':the_blob',$lob, -1, OCI_B_BLOB);
  56.  
  57. //Ejecucion de la sentencia.
  58. OCIExecute($stmt, OCI_DEFAULT);
  59. if($lob->savefile($lob_upload))
  60. {
  61. OCICommit($conn);
  62. echo "Blob successfully uploadedn<br>";
  63. echo "<a href=show.php>SHOW FILES</a>";
  64. }
  65. else
  66. {
  67. echo "Couldn't upload Blobn";
  68. }
  69. OCIFreeStatement($stmt);
  70. OCILogoff($conn);
  71. }
  72. ?>
  73.  
  74.  

****************************************show.php*******************************************

Código: PHP
  1.  
  2. <?
  3. $user = "SCRIPT";
  4. $pass = "SCRIPT";
  5. $tsnames = "ORAPR1";
  6. //Fem el Login amb la base de dades
  7. $Conn = OciLogon($user,$pass,$tsnames);
  8.  
  9. $sql_1 = "select id, filename, description, filetype from binary_data order by id desc";
  10. $sql_1 = OCIParse($Conn, $sql_1);
  11. OCIExecute($sql_1, OCI_DEFAULT);
  12. While (OCIFetchInto($sql_1, $row, OCI_ASSOC))
  13. {
  14. echo "<a href=file.php?id=$row[ID] target=_blank>$row[FILENAME]</a>  $row[FILETYPE]  $row[DESCRIPTION]<br>";
  15. }
  16. echo "<br><a href=lobosolitario.php>Insertar una nueva imagen";
  17. OCIFreeStatement($sql_1);
  18. OCILogoff($Conn);
  19. ?>
  20.  
  21.  

**************************************file.php************************************************

Código: PHP
  1.  
  2. <?
  3. /*
  4. file.php
  5. Archivo que nos muestra el archivo pedido a la base de datos
  6. */
  7. $id=$_GET['id'];
  8. $user = "SCRIPT";
  9. $pass = "SCRIPT";
  10. $tsnames = "ORAPR1";
  11.  
  12. $Conn = OciLogon($user, $pass, $tsnames);
  13.  
  14. $query = "select BIN_DATA, FILENAME, FILESIZE, FILETYPE from binary_data where ID=$id";
  15. $stmt = OCIParse($Conn, $query);
  16.  
  17. $NewData = array();
  18. OCIDefineByName($stmt,"BIN_DATA",$NewData["BIN_DATA"]);
  19. OCIDefineByName($stmt,"FILETYPE",$NewData["FILETYPE"]);
  20.  
  21. OCIExecute($stmt);
  22. OCIFetch($stmt);
  23.  
  24. If (is_object($NewData["BIN_DATA"]))
  25. {
  26. $NewData["BIN_DATA"] = $NewData["BIN_DATA"]->load();
  27. }
  28. Header ("Content-type: $NewData[FILETYPE]");
  29. echo $NewData["BIN_DATA"];
  30. OCIFreeStatement($stmt);
  31. ?>
  32.  
  33.  

*********************************************************************************************

Obviamente se puede mejorar más pero esto es una base para saber cómo se suben y después se utilizan de acuerdo a como los necesites.