|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.10.2018, 17:48 | #1 |
Регистрация: 04.10.2018
Сообщений: 7
|
Вывод файлов из БД в файловую систему
Уважаемые господа, добрый день!
Возникла проблема с выводом файлов из БД PostgreSQL в файловую систему на боевом сервере. Есть код, который отрабатывает локально на моем компе, на котором установлен MAMP. Смысл этого кода - выбрать данные из БД поместить данные в директорию файловой системы, затем отправить эти файлы на удаленный сервер (отправляю библиотекой php cURL). На боевом серваке с другой ОС данные манипуляции не работают, работа кода останавливается на выборке файлов из БД и размещении их в файловой системе. ОС локальной системы: MacOS 10.14.1 Версия MAMP: 4.5 Веб-сервер: Apache/2.2.34 (Unix) Версия PHP: 7.2.1 ОС боевой системы: Debian GNU/Linux 9.4 (stretch) Веб-сервер: Apache/2.4.25 (Debian) Версия PHP: 7.0.30-0+deb9u1 При выводе файлов на боевом серваке из БД возникают следующие ошибки: Некорректно отправляется содержимое файла - файл в файловую систему приходит битый, размер файла либо нулевой, либо 1КБ. Название файла передается неполностью, на каком-то символе режется. (ПР: «prezentatsiya_1128329_435», «prezentatsiya_1128329_л). От типа символа - число или буква не зависит. Название файлов приходит из БД уже переведенное в транслит. (Делал перевод из русской литерации в латиницу средствами PHP, но это не помогало, поэтому сделали транслитерацию в БД) Я предположил, что какая-то проблема с локалью на Debian 9 и осуществил следующие шаги: Код:
После применения данных настроек команда locale показывает следующие результаты: Код:
Я предполагаю, что, всё-таки дело в настройках локали, поэтому не прилагаю рабочий код, если будет необходимо, добавлю. Искал информацию по настройке локали на Debian взял инструкцию в данном источнике, пункт Standard(https://wiki.debian.org/Locale#Standard), выполнял следующие шаги: 1. Редактировал файл /etc/default/locale, добавив строку LANG=ru_RU.UTF-8 2. Перезагружал сервер. 3. Не помогло 4. Смотрел файл /etc/locale.gen 5. После применения команды dpkg-reconfigure locales раскомментированы следующие строки "en_US.UTF-8 UTF-8", "ru_RU.UTF-8 UTF-8" 6. Не помогло Правил файл php.ini - увеличил размер отправляемых файлов: Код:
Код:
Код:
|
04.10.2018, 18:54 | #2 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Информации много, но...
Без кода сложно будет найти в нём ошибку (если причина в нём). Если везде UTF-8 вряд-ли. И не выводит никаких сообщений об ошибках и даже не пишет в лог (притом, что по поведению явно exception)? Дайте stack trace. Файл на сервер обычно передаётся POST запросом. Что толку увеличивать максимальный размер файла, если максимальный объём данных запроса остаётся прежним?.. |
05.10.2018, 11:30 | #3 | ||
Регистрация: 04.10.2018
Сообщений: 7
|
Как корректно вывести файлы из БД в файловую систему?
Цитата:
Цитата:
Вот такую тестовую штуку написал, но она не работает: Код:
|
||
05.10.2018, 12:19 | #4 |
Регистрация: 04.10.2018
Сообщений: 7
|
Как корректно вывести файлы из БД в файловую систему?
Собственно, сам код.
|
05.10.2018, 18:52 | #5 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Гуглите про try catch в PHP. Ставите на проблемный участок и будет Вам перехват ошибок. Дёшево, но сердито.
По результатам вывода ошибок можно будет уменьшить объём кода для форума за счёт локализации проблемы (это так, на будущее). Там их 360 и походу этот файл не имеет отношения к делу. Если я правильно понял, там только отправка, а где приём? |
10.10.2018, 12:05 | #6 |
Регистрация: 04.10.2018
Сообщений: 7
|
Как корректно вывести файлы из БД в файловую систему?
Спасибо за совет.
Сейчас настраиваю работу с исключениями в коде. Еще такие вопросы: 1. Подскажите, пожалуйста, что Вы подразумеваете под stack trace? Достаточно ли мне изучить работу данного метода Exception::getTrace — Получает трассировку стека? 2. Правильно ли я понимаю, что Exception в PHP позволяют настроить пользовательский отлавливатель ошибок, а как в таком случае мне отловить ошибки системы? Допустим, в процедурном программировании мне в этом помогала строка ini_set(display_errors,1); Во вложении файл с кодом приема файлов на сервер. Метод getFile(). |
10.10.2018, 15:52 | #7 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Stack trace (трассировка стека) – это список методов, которые были вызваны до момента, когда в приложении произошло исключение (отсюда).
Этот метод возвращает трассировку стека исключения. Для отладки через try-catch сгодится. У меня он работает корректно. При при том, что я загружаю файлы даже с изначально "русскими" названиями, не могу воспроизвести ошибку. Посмотрите, что приходит к Вам на сервер через var_dump. Дайте stack trace с рабочего сервера. |
10.10.2018, 16:11 | #8 | |
Регистрация: 04.10.2018
Сообщений: 7
|
Цитата:
Еще дурацкий вопрос: Не могли бы Вы подсказать возможно ли такое употребление блока try-catch: Код:
|
|
10.10.2018, 19:24 | #9 | ||
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
getTrace возвращает ассоциативный массив. Для быстрой отладки, его можно вывести и через var_dump (не забыв теги pre). А, вообще подумайте как отобразить stack trace в читабельном виде. Цитата:
Вообще советую почитать книгу Котерова по PHP 7 (для начинающих лучше пока ничего не встречал) и учиться работать хотя бы с документацией (php.net). Последняя содержит полную информацию о PHP, как говорится, из первых рук. Очень многие вопросы у Вас просто отпадут сами собой. Последний раз редактировалось Streletz; 10.10.2018 в 19:30. |
||
11.10.2018, 09:14 | #10 | ||
Регистрация: 04.10.2018
Сообщений: 7
|
Как корректно вывести файлы из БД в файловую систему?
Цитата:
Возможно, я некорректно задал вопрос. Я подразумевал, что хотел бы получать в кастомном классе Exception все значения, которые приходят в блок try{}. То есть, есть у меня 16 параметров, которые я хотел бы проверить в одном блоке try{}, и я хотел бы вывести значения всех параметров в один этот кастомный класс. Сам класс имеет следующий вид: Код:
Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал | Колямбий | Помощь студентам | 0 | 21.04.2013 21:31 |
Как форматировать флешку в файловую систему, из ntfa в fat32 | igor 91 | Общие вопросы C/C++ | 1 | 04.02.2013 12:05 |
Создать файловую систему через делфи | Renok | Общие вопросы Delphi | 13 | 02.03.2012 23:52 |
вывод файлов | mojohead | Помощь студентам | 3 | 11.05.2011 12:10 |
Создать файловую систему Joliet на языке С++ | Лисничая Дарья | Помощь студентам | 1 | 22.09.2009 09:47 |