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


Вопрос по функции save_data_file


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

#1 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 11:22

Доброго времени суток.

Возникла такая проблема:
Существовало две базы (две лицензии) в разных филиалах, сейчас решили объединить две базы в одну, что-бы не дублировать изменения в конфигурации сразу в две базы.

Все строки корректно получилось перенести. Кроме таблицы в которых есть поле типа "изображение".
Дело в том что во время переноса у полей которые импортировались поменялись id строк.

С помощью службы поддержки удалось найти функции в файле functions1.php с помощью которых можно пересоздать папки в папке files. Во всем вроде разобрался кроме одного: в функции save_data_file есть параметр $data,

Цитата

function save_data_file($field_id,$line_id,$fname,$data)


Собственно вопрос, что нужно передавать в этом параметре?

#2 CbCoder

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

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

Отправлено 30 Июль 2013 - 13:46

Собственно, содержимое файла и передавать. Сохраняться ведь что-то должно в файле.

#3 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 14:29

Просмотр сообщенияCbCoder (30 Июль 2013 - 13:46) писал:

Собственно, содержимое файла и передавать. Сохраняться ведь что-то должно в файле.

Подскажете как?

Нужно считать содержимое файла в переменную?

Цитата

$data = file_get_contents('1000.jpeg', true);

save_data_file("98", "1000", "1000.jpeg", $data);

Сообщение отредактировал skakot: 30 Июль 2013 - 14:37


#4 CbCoder

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

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

Отправлено 30 Июль 2013 - 14:39

Цитата

Нужно считать содержимое файла в переменную?

Именно.

#5 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 14:48

Просмотр сообщенияCbCoder (30 Июль 2013 - 14:39) писал:

Именно.

Цитата

$data = file_get_contents('1000.jpeg', true);

save_data_file("98", "1000", "1000.jpeg", $data);
Вот так сделал. Но ничего не вышло.

#6 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 14:53

Просмотр сообщенияCbCoder (30 Июль 2013 - 14:39) писал:

Именно.


В каком формате должна быть переменная $fname?

Название файла 1000.jpeg,

Сообщение отредактировал skakot: 30 Июль 2013 - 14:53


#7 CbCoder

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

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

Отправлено 30 Июль 2013 - 14:55

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

#8 CbCoder

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

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

Отправлено 30 Июль 2013 - 14:58

Просмотр сообщенияskakot (30 Июль 2013 - 14:53) писал:

В каком формате должна быть переменная $fname?

Просто имя файла, но точно так, как оно передавалось при сохранении в поле. Если оно не совпадает с именем в поле - ссылка будет некорректна.

#9 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 15:01

Просмотр сообщенияCbCoder (30 Июль 2013 - 14:55) писал:

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

Обрисовываю всю схему:
Есть строка в базе с id=1000
Есть файл который называется 1000.jpeg

Я скриптом создаю дерево папок и файл, после чего через ftp переношу это дерево и файл в папку files на сервере.

Вот скрипт:

Цитата

<?

function get_file_hash($field_id,$line_id,$fname)
{
return md5($field_id."_".$line_id."_".$fname)."_".$field_id."_".$line_id."_".ord($fname[0]);
}

// Получить полный путь к файлу таблицы
function get_file_path($field_id, $line_id, $fname)
{
global $config;
$h=get_file_hash($field_id,$line_id,$fname);
return "files/".substr($h,0,2)."/".substr($h,2,2)."/".$h;
}

// Создать систему каталогов, если она необходимы, для заданного пути файла
function create_data_file_dirs($field_id, $line_id, $fname)
{
global $config;
$h=get_file_hash($field_id,$line_id,$fname);
$d="files/".substr($h,0,2)."/".substr($h,2,2);
if (!file_exists($d))
{
$d1="files/".substr($h,0,2);
if (!file_exists($d1))
{
mkdir($d1,0777);
// Если необходимы особые настройки прав сохраняем
//if ($config['chown']) chown($d1,$config['chown']);
//if ($config['chgrp']) chgrp($d1,$config['chgrp']);
}
mkdir($d,0777);
// Если необходимы особые настройки прав сохраняем
if ($config['chown']) chown($d,$config['chown']);
if ($config['chgrp']) chgrp($d,$config['chgrp']);
}
}

// Сохранить файл, автоматически будут созданны необходимые каталоги, если они необходимы
function save_data_file($field_id,$line_id,$fname,$data)
{
global $config;
create_data_file_dirs($field_id,$line_id,$fname);

$fname=get_file_path($field_id,$line_id,$fname);
if ($config['chown_group']) $f=fopen($fname,'w', 0666);
else $f=fopen($fname,'w');
fwrite($f,$data);
fclose($f);
if ($config['chown']) {chown($fname,$config['chown']&0666);} // Снимаем флаг запуска
if ($config['chgrp']) {chgrp($fname,$config['chgrp']);}
}


$data = file_get_contents('1000.jpeg', true);

save_data_file("98", "1000", "1000.jpeg", $data);

?>

Скрипт лежит в одной папке с файлом 1000.jpeg

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

В базе файл назван 1000.jpeg

Ссылка которую формирует база выглядит так: /open_file.php?field=98&line=1000&file=1000.jpeg&show=1

Вместо картинки - белый экран.
При этом если смотреть код страницы - есть блок размерами 240х320. (Это размер картинки).

Сообщение отредактировал skakot: 30 Июль 2013 - 15:18


#10 CbCoder

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

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

Отправлено 30 Июль 2013 - 15:23

Цитата

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

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

#11 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 15:28

Просмотр сообщенияCbCoder (30 Июль 2013 - 15:23) писал:

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

Папка создается, структура тоже, и файл.
Потом я эту структуру переношу в files. И после этого белый экран.

#12 CbCoder

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

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

Отправлено 30 Июль 2013 - 15:42

Просмотр сообщенияskakot (30 Июль 2013 - 15:28) писал:

Потом я эту структуру переношу в files. И после этого белый экран.

Почему "потом", не понял? Разве не сразу сохраняете в папке files? Возможно, что причина в этом, т.е. путь к файлу создается не тот что нужен, соответственно программа его не находит.

#13 skakot

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 30 Июль 2013 - 16:57

Просмотр сообщенияCbCoder (30 Июль 2013 - 15:42) писал:

Почему "потом", не понял? Разве не сразу сохраняете в папке files? Возможно, что причина и в этом, т.е. путь к файлу создается не тот что нужен, соответственно программа его не находит.

Спасибо большое! Перенес файлы и скрипт в корень базы, все сработало.

#14 goodcolor

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

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

Отправлено 23 Июль 2020 - 15:28

Привет. Не стал создавать новую тему. Если нужно записать в создаваемый файл json строку, в параметре $data можно положить просто строку или необходимо её как-то обрабатывать предварительно?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#15 goodcolor

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

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

Отправлено 23 Июль 2020 - 15:36

Разобрался. Оказывается, в поле типа файл предварительно необходимо положить строку с названием создаваемого файла.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов





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

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