powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как прочитать поток из
2 сообщений из 2, страница 1 из 1
Как прочитать поток из
    #38841558
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем! Нужна помощь.
в ms sql есть табличка
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[Repository](
	[FileName_] [varchar](64) NOT NULL,
	[File_] [image] NULL,
	[Description_] [varchar](150) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



В табличку 1С записывает файлы вот таким образом:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	ТекстЗапроса = "SELECT * FROM [" + Константы.ИмяБазыОбразов.Получить() + "].[dbo].[Repository] where FileName_ IS NULL"; // Запрос вернёт пустой набор данных, в который мы добавим новый файл
	
	RecordSet = Новый COMОбъект("ADODB.RecordSet");
	RecordSet.CursorLocation = 3;
	RecordSet.Open(ТекстЗапроса, Соединение, 1, 3);
	
	//Поместим двоичные данные в поток
	Stream 	= Новый COMОбъект("ADODB.Stream");
	Stream.Type = 1;
	Stream.Open();
	
	//Прочитаем запакованный файл в поток
	Stream.LoadFromFile(ПолноеИмяАрхиваВоВременномКаталоге);
	//Удалим запакованный файл во временном каталоге
	УдалитьФайлы(ПолноеИмяАрхиваВоВременномКаталоге);
	
	RecordSet.AddNew();
	RecordSet.Fields("FileName_").Value = АрхивныйФайлОбъект.Код;
	RecordSet.Fields("File_").Value = Stream.Read();
	RecordSet.Fields("Description_").Value = Описание;
	RecordSet.Update();


т.е., используя поток данных.
Мне нужно этот файл по первичному ключу получить и возвратить на php

Пробовал:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	$query = "SELECT [FileName_]
					,[File_]
					,[Description_]
				FROM  dbo.Repository
				WHERE FileName_=?";
	$stmt = $dbh->prepare($query);	
	$stmt->bindValue(1, "$file_find", PDO::PARAM_STR);

	if ($stmt->execute()) {
		$row = $stmt->fetch();

		$content1 = $row['File_'];
		

		$ado_stream = new COM("ADODB.Stream");
		$ado_stream->Type = 1;
		$contentByteArray = unpack('C*', $content1);
		$ado_stream->Open();
		$ado_stream->Write($contentByteArray); 
		//TODO: сохранить поток в файл
	}



В этом коде $content1 содержит явно не то, что записывали было в исходном файле, который загружали в поток в 1С.
Пытаюсь записать прочитанное из БД в поток, что бы его сохранить в файл. но
на строке $ado_stream->Write($contentByteArray); вылетает с крикомPHPPHP Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> ADODB.Stream<br/><b>Description:</b> Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.' in C:\Inetpub\wwwroot\GCR\file_out2.php:133
Stack trace:
#0 C:\Inetpub\wwwroot\GCR\file_out2.php(133): com->Write('504B03041400000...')
#1 {main}
thrown in C:\Inetpub\wwwroot\GCR\file_out2.php on line 133
а если файл большой, то и раньше на строке unpack, с криком о нехватке памяти.
Если unpack не делать, то ошибка такая же - методу Write не нравится входной параметр.

Кто-нибудь знает, как на php получить файл, записанный в БД таким образом - через поток?
------------------------------------------------------------
Модератор: Реклама удалена
--
vkle
...
Рейтинг: 0 / 0
Как прочитать поток из
    #38842753
Фотография jsmirnoww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто подскажет про потоки данных:
если я прочитаю файл в поток
Stream.LoadFromFile(ПолноеИмяАрхиваВоВременномКаталоге);
и потом прочитаю из него данные методом Stream.Read(); и запишу в файл
это должны быть два одинаковых файла?
у меня получаются разные. я с потоками данных никогда не работал, поэтому туплю.

help, please!!!!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как прочитать поток из
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]