PHP WORD BLOB

xgrisha

Новичок
PHP WORD BLOB

Всем добрый доброго времени суток!!!

столкнулся с такой проблемой:

есть табличка с полем типа BLOB в катором хранятся текстовые файлы с расширением *.rpt
корорые создает и сохраняет туда процедура на оракле...

мне нужно достать ети файлы точнее их содержимое и вывести в окне браузера...
достать худо бедно у меня получилось но вот как вывести я бес понятия при попытке вывода просто того что у меня в переменной после результата селекта он отображает чисто циферку 2
тоесть както нада перекодировать получить содержимое blob поля

перекопал половину рунета нигде ненашол как достать содержимое файла содержашегося в blob поле...
в одном месте дажу увидел надпись типо магией владеть нада =)

может какнибуть через word`вые обьекты или еше что ?
ктонибудь сталкивался с подобной проблемой или что посоветует ?
как вапше ето можно организовать ?

очень срочно нада сроки жмут :D
 

Фанат

oncle terrible
Команда форума
ты уверен, что достаешь из базы содержимое поля, а не циферку 2?
 

xgrisha

Новичок
Автор оригинала: *****
ты уверен, что достаешь из базы содержимое поля, а не циферку 2?
Да достаю именно содержимое еси на оракле просто открыть ето поле он тоже 2 отображает и припроверке типа резкльтата селекта выдает тип blob... недавно на VS FOXе такуюже штуку делал там при открытии курсора он тоже цаферку 2 отображает но после обработки виден сам текст документа

-~{}~ 09.10.08 06:12:

Автор оригинала: fixxxer
там в мане что то есть про oci-lob, это не оно?
можеш поточнее сылку дать ? :)
 

Falc

Новичок
Когда фетчишь записи можешь добавить параметр OCI_RETURN_LOBS, и лоб просто пофетчится в твою переменную.
 

xgrisha

Новичок
Автор оригинала: *****
после какой обработки?
раз уж спросил то вот такой код

select [RESULT] выбираю курсов

вот таким вот образом вызываю метод ThisForm.BinaryToFile("FIELD", Alias(),TmpIdctrt) - TmpIdctrt ето поле содержащее blob данные


а вот сам метод


***************************************************************************
* копирование из поля типа GENERAL (IMAGE на SQL) бинарного значения в файл
***************************************************************************
* параметры: поле типа GENERAL с файлом, алиас, полное имя файла с путём, в который копировать
* возвращает: -3 - не найдено поле или алиас
* -2 - проблемы с доступом
* -1 - тип не GENERAL
* 1 - все ОК
* пример: BinaryToFile("file_","WWW","c:\temp\www.tif")
* function BinaryToFile




lparameter m.pFIELD,m.pALIAS,m.pFILE
*
local m.S,m.lLOCALFILE,m.lHANLDE,m.lALIAS,m.lERROR,m.lFLAG
*
m.lFLAG=.T.
m.lALIAS=alias()
m.lLOCALFILE=sys(2015)
*
m.lERROR=on("ERROR")
on error m.lFLAG=.F.
select &pALIAS
copy structure fields &pFIELD to &lLOCALFILE
on error &lERROR
if m.lFLAG=.F.
return -3
endif
*
select 0
use &lLOCALFILE
append blank
m.S=m.pALIAS+"."+m.pFIELD
replace &pFIELD with &S
use in &lLOCALFILE
*
m.lHANDLE=fopen(m.lLOCALFILE+'.dbf',12) && открываем dbf-файл
if m.lHANDLE<0
if file("&lLOCALFILE"+".dbf")
delete file "&lLOCALFILE"+".dbf"
endif
if file("&lLOCALFILE"+".fpt")
delete file "&lLOCALFILE"+".fpt"
endif
return -2
endif
*
fseek(m.lHANDLE,43,0) && ставим указатель на 43 байт
if fread(m.lHANDLE,1)#"G"
fclose(m.lHANDLE)
if file("&lLOCALFILE"+".dbf")
delete file "&lLOCALFILE"+".dbf"
endif
if file("&lLOCALFILE"+".fpt")
delete file "&lLOCALFILE"+".fpt"
endif
return -1
endif
*
fseek(m.lHANDLE,43,0)
fwrite(m.lHANDLE,'M')
fclose(m.lHANDLE) && закрываем DBF
*
select 0
use &lLOCALFILE

a = 16777184 && максимальная длина строки переменой типа CHAR
c = 1
s = len(&lLOCALFILE..&pFIELD)


* set step on

if s > a then


for i = 1 to FLOOR(s/a)+1 step 1
if i = FLOOR(s/a)+1 then
strtofile(substr(&lLOCALFILE..&pFIELD,a,s-a),m.pFILE,.T.)

else
if i = 1 then
strtofile(substr(&lLOCALFILE..&pFIELD,c,a-1),m.pFILE)
else
strtofile(substr(&lLOCALFILE..&pFIELD,c,a-1),m.pFILE,.T.)
endif
c = c + a
endif
endfor
else
strtofile(&lLOCALFILE..&pFIELD,m.pFILE)
endif


* strtofile(&lLOCALFILE..&pFIELD,m.pFILE)

use in &lLOCALFILE
*
if file("&lLOCALFILE"+".dbf")
delete file "&lLOCALFILE"+".dbf"
endif
if file("&lLOCALFILE"+".fpt")
delete file "&lLOCALFILE"+".fpt"
endif
*
if .not.empty(m.lALIAS) && возвращаемся в исходный алиас
select &lALIAS
endif
return 1

работает как часы =)
 

xgrisha

Новичок
Вопшем никак

Пример использования oci_fetch_array() с флагом OCI_RETURN_LOBS

<?php
$connection = oci_connect("user", "password");

$query = "SELECT id, name, lob_field FROM fruits";

$statement = oci_parse ($connection, $query);
oci_execute ($statement);

while ($row = oci_fetch_array ($statement, OCI_NUM)) {
echo $row[0]."<br>";
echo $row[1]."<br>";
echo $row['LOB_FIELD']."<br>"; //this will output LOB's content
}
?>

невыводит ничего тоесть пустую строку


---------------------------------------------------------------------------------
Пример использования oci_fetch_array() с флагом OCI_NUM

<?php
$connection = oci_connect("user", "password");

$query = "SELECT id, name, lob_field FROM fruits";

$statement = oci_parse ($connection, $query);
oci_execute ($statement);

while ($row = oci_fetch_array ($statement, OCI_NUM)) {
echo $row[0]."<br>";
echo $row[1]."<br>";
echo $row[2]->read(100)."<br>"; //this will output first 100 bytes from LOB
}
?>

возвращает просто циферку 2
 
Сверху