Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ORACLE + PHP, Pobieranie pliku z pola blob na dysk lokalny
-kobe-
post 14.05.2008, 08:50:30
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


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
Powód edycji: Poprawiłem bbcode. /webdicepl
Go to the top of the page
+Quote Post
SongoQ
post 14.05.2008, 09:58:13
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Ale nie musisz zapisywac wystarczy ze odczytasz plik wyslesz naglowki a potem wystarczy zrobic echo.


--------------------
Go to the top of the page
+Quote Post
-kobe-
post 14.05.2008, 10:50:03
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SongoQ
post 14.05.2008, 10:58:28
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


echo oci_result($stmt, 3) questionmark.gif


--------------------
Go to the top of the page
+Quote Post
-kobe-
post 14.05.2008, 11:16:51
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SongoQ
post 14.05.2008, 12:17:14
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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)


--------------------
Go to the top of the page
+Quote Post
-kobe-
post 29.05.2008, 11:06:19
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


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ś?

Ten post edytował -kobe- 14.05.2008, 12:45:12
Go to the top of the page
+Quote Post
tomeksobczak
post 29.05.2008, 12:42:55
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


a próbowałeś tak?

  1. <?php echo oci_result($stmt, 3)->load(); ?>


--------------------
Go to the top of the page
+Quote Post
-kobe-
post 2.06.2008, 10:55:30
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


... 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?
Go to the top of the page
+Quote Post
tomeksobczak
post 2.06.2008, 11:41:02
Post #10





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


ociresult()


--------------------
Go to the top of the page
+Quote Post
-kobe-
post 2.06.2008, 12:11:28
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.05.2008

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2024 - 19:52