Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORACLE + PHP
Forum PHP.pl > Forum > Bazy danych > Oracle
-kobe-
Witam

Mam oto taki kodzik:

  1. <?php
  2.  
  3. $conn = oci_connect('user', 'pass', '
  4. (DESCRIPTION =
  5. (ADDRESS_LIST =
  6.  (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
  7. )
  8. (CONNECT_DATA =
  9.  (SERVICE_NAME = serv_name)
  10. )
  11.  )
  12. ');
  13.  
  14. $stmt=oci_parse($conn, "SELECT * FROM baza2.pliki WHERE id=123");
  15. oci_execute($stmt, OCI_DEFAULT);
  16.  
  17. while(oci_fetch($stmt))
  18.  {
  19. $npliku=oci_result($stmt, 2);
  20. $katalog="./temp/";
  21. $sciezka=$katalog.$npliku;
  22. oci_result($stmt, 3)->writetofile($sciezka);
  23.  }
  24.  
  25. header("Content-type: application/pdf");
  26. header("Content-Disposition: attachment; filename=".$npliku."");
  27. readfile("./temp/".$npliku);
  28.  
  29. ?>


Wszystko w nim działa jednak nie tak jakbym chciał. Dla wyjaśnienia powyższy kod pobiera nazwę pliku (oci_result($stmt, 2)) oraz sam plik z pola BLOB (oci_result($stmt, 3)) bazy danych oracle, zapisuje go w katalogu TEMP oraz generuje nagłówki, które z kolei ukazują standardowe okno pobierania przeglądarki. Mój problem polega na tym, że taki plik z bazy muszę zapisywać na dysk serwera i dopiero później za pomocą HEADER mogę zapisać na dysk lokalnego kompa. Jak to zrobić żeby w "locie" zapisać plik z pola BLOB na dysk lokalny bez konieczności pośredniego zapisu do TEMPa.

Pozdrawiam
SongoQ
Ale nie musisz zapisywac wystarczy ze odczytasz plik wyslesz naglowki a potem wystarczy zrobic echo.
-kobe-
Fajnie, że jest sposób... tylko nie wiem jak to zrobić.
Co zamiast writetofile i co w readfile? Jak wstawiam oci_result($stmt, 3) do readfile to pobiera mi na lokalny dysk pusty plik a raczej tworzy.
SongoQ
echo oci_result($stmt, 3) questionmark.gif
-kobe-
Niestety nie kumam sadsmiley02.gif wcześniej już też próbowałem wyrzucić to na ekran za pomcą echo ale że w bazie w polu BLOB znajduje się plik PDF to wywaliło mi kilometr krzaków.
SongoQ
No i tak powinno byc. Ustawiasz odpowiednie naglowki do PDF a nastepnie wyswietlasz tak jak napisalem wczesniej.


header("Content-type: application/pdf");
echo oci_result($stmt, 3)
-kobe-
Nie idzie. Dalej pusty plik. Chyba się zakręciłem bo nie mam pomysłu jak to rozgryźć.

  1. <?php
  2. $stmt=oci_parse($conn, "SELECT * FROM baza2.pliki WHERE id=123");
  3. oci_execute($stmt, OCI_DEFAULT);
  4.  
  5. while(oci_fetch($stmt))
  6. {
  7.  $npliku=oci_result($stmt, 2);
  8.  header("Content-type: application/pdf");
  9.  header("Content-Disposition: attachment; filename=".$npliku."");
  10.  echo oci_result($stmt, 3);
  11. }
  12. ?>


Tak nie działa i nie będzie działać. Spróbowałem z plikiem umieszczonym na dysku serwera a nie w bazie i rzeczywiście - poszło. Jednak gdy plik trzeba wyciągnąć z BLOB to w żaden sposób nie chce mi ruszyć.

Pomoże ktoś?
tomeksobczak
a próbowałeś tak?

  1. <?php echo oci_result($stmt, 3)->load(); ?>
-kobe-
... i wszystko ładnie chodzi
  1. <?php
  2. $stmt=oci_parse($conn, "SELECT * FROM baza2.pliki WHERE id=123");
  3. oci_execute($stmt, OCI_DEFAULT);
  4.  
  5. while(oci_fetch($stmt))
  6. {
  7.  $npliku=oci_result($stmt, 2);
  8.  header("Content-type: application/pdf");
  9.  header("Content-Disposition: attachment; filename=".$npliku."");
  10.  echo oci_result($stmt, 3)->load();
  11. }
  12. ?>

...ale... jak schody to schody. Pisałem skrypt na php5 a jak to (oci_result($stmt, 3)->load()winksmiley.jpg odpalić na php4?
tomeksobczak
ociresult()
-kobe-
Rozgryzłem :-) w tym samym czasie co tomeksobczak.
Nie wiem tylko dlaczego nie chodzi
ociresult($stmt, 3)->load(); ale to już mniejsza z tym.
  1. <?php
  2. $stmt=oci_parse($conn, "SELECT * FROM baza2.pliki WHERE id=123");
  3. oci_execute($stmt, OCI_DEFAULT);
  4.  
  5. while(oci_fetch($stmt))
  6. {
  7.  $npliku=oci_result($stmt, 2);
  8.  header("Content-type: application/pdf");
  9.  header("Content-Disposition: attachment; filename=".$npliku."");
  10.  $obj=oci_result($stmt, 3);
  11.  echo $obj->load();
  12. }
  13. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.