Перейти к содержимому


Скопировать файл из таблицы в поле типа "файл"

файл

Сообщений в теме: 10

#1 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 20 Август 2014 - 14:44

Подскажите пожалуйста каким образом можно скопировать файл из одной записи в другую. Поле типа "файл".
На форуме нашел только способ, чтобы можно было скопировать в поле с типом текст и включенным html, но мне этот вариант не подходит.

если использовать функцию save_data_file, то необходимо знать путь к файлу но как его получить? использовать ссылку по которой происходит скачивание файла?

$dat = file_get_contents(ссылка до файла);
save_data_file(id поля, $new_id, название, $dat);


#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 20 Август 2014 - 19:44

Просмотр сообщенияaleks.goodcolor (20 Август 2014 - 14:44) писал:

Подскажите пожалуйста каким образом можно скопировать файл из одной записи в другую. Поле типа "файл".
На форуме нашел только способ, чтобы можно было скопировать в поле с типом текст и включенным html, но мне этот вариант не подходит.

если использовать функцию save_data_file, то необходимо знать путь к файлу но как его получить? использовать ссылку по которой происходит скачивание файла?

$dat = file_get_contents(ссылка до файла);
save_data_file(id поля, $new_id, название, $dat);

Плохо искали я уже кому-то ссылку на статью давал. Вот статья как копировать из одного поля в другое.

#3 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 21 Август 2014 - 10:48

Просмотр сообщенияwondertalik (20 Август 2014 - 19:44) писал:

Плохо искали я уже кому-то ссылку на статью давал. Вот статья как копировать из одного поля в другое.
Спасибо за ответ. я так понимаю что без использования внешних файлов копирование файлов невозможно?

#4 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 21 Август 2014 - 10:51

Просмотр сообщенияaleks.goodcolor (21 Август 2014 - 10:48) писал:

Спасибо за ответ. я так понимаю что без использования внешних файлов копирование файлов невозможно?
Почему нет, возможно. Но для этого вам придется писать код самому, поболее чем пару строчек. А это уже требует знаний. Можете поискать на форуме. Тем по работе с файлами - куча.

#5 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 21 Август 2014 - 12:04

Алгоритм записи файла я понимаю - главное понять как получить адрес файла в поле.

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Сентябрь 2014 - 10:40

Адрес файла получается через функцию get_file_path(id поля, id записи, имя файла).

#7 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 03 Сентябрь 2014 - 14:47

Спасибо за функцию.
Пытаюсь получить файлы в новой записи но никак не получается. Выводится только файл из второй записи и дублируется столько раз сколько было файлов.
Немного объясню в чем заключается задача: подгружаю письма в КБ. Проверяю есть ли необработанные письма от одного и того же адреса. Если есть, то склеиваю эти письма путем создания новой записи. а необработанные письма становятся обработанными. Таким образом мне нужно добавить в новую запись файлы из писем.
Алгоритм получения файлов такой:
- Получаю названия и пути файлов в массивы из первого письма.
- Получаю названия и пути файлов в массивы из второго письма.
- Сливаю массивы
- В цикле произвожу запись файлов в новую запись

Подскажите пожалуйста в чем может быть ошибка?

Вот часть кода где я произвожу "склеивание":
$res2 = data_select(580, "`status` = 0 AND (`f9920`='Входящее (тек.)' OR `f9920`='Входящее (нов.)') AND `f9800` =",$line['От кого']," AND `f9810` = 'Новый'" /*AND `f9930` =",$line['Менеджер']*/);
		  
		   while($row2 = sql_fetch_assoc($res2))		
		   {
				if($row2['f9800']==$line['От кого'] && $check != "777")
				{
						$tx = $row2['f9830'];
						//формируем поля для новой записи
						$check = "777";
						$mas['Кому'] = $row2['f9780'];
						$mas['Имя отправителя'] = $row2['f9790'];
						$mas['От кого'] = $row2['f9800'];
						$mas['Тема'] = "Объединенное сообщение от ".$row2['f9790'];
						$mas['status_files'] = "1";
						//$mas['Приоритет'] = $row2['f9900'];
						$mas['Статус'] = $row2['f9920'];
						$mas['Менеджер'] = $row2['f9930'];
						$mas['Контрагент'] = $row2['f9880'];
						$mas['Поставщики'] = $row2['f9890'];
						$mas['Фрилансеры'] = $row2['f9940'];
						$mas['Соискатели'] = $row2['f9950'];
						$mas['Вывод'] = $row2['f9980'];
						$mas['Дата'] = $row2['f9840'];
						$mas['Статус ответа'] = "Новый";
						$mas2['Действие'] = "Письмо";
						$mas2['Клиент'] = $row2['f9790'];
					  
						$mas2['Менеджер'] = $row2['f9930'];
						$mas2['Статус'] = "Новый";
						$mas2['ID письма'] = $row2['id'];
						$mas2['Email'] = $row2['f9800'];
						$mas2['Ссылка'] = "нет";
						if($line['Файлы']!=NULL)
						{
						   $files = explode("\r\n", $line['Файлы']);
						   foreach ($files as $filename)
						   {
							
							  $dat[] = get_file_path(9860, $line['ID'],$filename);
							
						   }
						  
						}
			   }
			   if($row2['f9800']==$line['От кого'] && $check == "777" && $tx != $row2['f9830'])
			   {  
						if($row2['f9860']!=NULL)
						{
						   $files2 = explode("\r\n", $row2['f9860']);
						   foreach ($files2 as $filename2)
						   {
							
							  $dat2[] = get_file_path(9860, $row2['ID'],$filename);
						   }
						  
						  
							
						}
					  
						$tx.= "\r\n\r\nДобавлено в ".$row2['f9840']." : \r\n\r\n".$row2['f9830'];
					  
						$mas['Сообщение'] = $tx;
						$mas['Приоритет'] = $row2['f9900'];
						$mas2['Приоритет'] = $row2['f9900'];
						$mas2['Дата'] = $row2['f9840'];
						$res3 = data_select(580, "`status` = 0");
						while($row3 = sql_fetch_assoc($res3))
						{
							 if($row3['f9830']==$tx && $row3['f9820']== "Объединенное сообщение от ".$row3['f9790'])
							 {
								 $insert = "123";
							 }	
						}
						if ($insert!="123")
						{  
							 $new_id = insert_query($mas,Почта);
							 $dat_all = array_merge($dat, $dat2);
							 $fl = array_merge($files, $files2);
							 for($i=0; $i<count($dat_all);$i++)
							 {
								$mas_upd['Файлы'] =$mas_upd['Файлы'] ? ($mas_upd['Файлы']."\r\n".$fl[$i]):$fl[$i];
								save_data_file(9860, $new_id, $fl[$i], $dat_all[$i]);
							 }
							 update_query($mas_upd, "Почта", "id=$new_id");
							 $new_id_log = insert_query($mas2,Лог);
							 $upd_data['Статус ответа'] = "Обработано";
							 $upd_log['Статус'] = "Обработано";
							
							
							
							 $res4 = data_select(580, "`status` = 0 AND `f9800`=",$line['От кого']);
							 while($row4 = sql_fetch_assoc($res4))
							 {																  
								if($row4['f9800']==$line['От кого'] && $row4['f9820']!="Объединенное сообщение от ".$row4['f9790'])
								{
								  $newid = $row4['id'];
								  update_query($upd_data, "Почта", "id=$newid");
								  update_query($upd_log, "Лог", "f10120=$newid AND f10070 != 'нет'");
								
								}
							 }
							 $insert = "123";
						}		  
			   }
				
		   }

Сообщение отредактировал aleks.goodcolor: 03 Сентябрь 2014 - 14:53


#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Сентябрь 2014 - 15:06

Ну здесь наверняка просто где-то логическая ошибка в коде. Раз хотя бы один файл пишется - значит наши функции используются верно.

#9 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 03 Сентябрь 2014 - 15:17

Да так и есть - уже нашел ошибку.

#10 aleks.goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 04 Сентябрь 2014 - 13:54

Теперь выводит название всех файлов и их даже можно скачать но внутри содержимого файла написано путь к файлу и все данные внутри стерты. Подскажите пожалуйста с чем это может быть связано?

UPD: совсем забыл что в $dat нужно записывать сам файл а не путь к нему добавил строки:
$tmpname = get_file_path(9860, $row2['ID'],$filename);
$dat[] = file_get_contents($tmpname);
Но теперь почему-то файл пустой

Протестировал код - путь к файлу из функции получается, а вот получить сам файл по пути нет. Скажите может ли влиять на работу данной функции то, что сама программа находится на машине в сети.

Сообщение отредактировал aleks.goodcolor: 04 Сентябрь 2014 - 14:27


#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Сентябрь 2014 - 17:50

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





Количество пользователей, читающих эту тему: 8

0 пользователей, 8 гостей, 0 анонимных