Moodle: файлы, загруженные через File API, повреждаются при просмотре

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

По общему признанию, после некоторой борьбы с моей стороны, чтобы заставить File API работать, теперь все работает нормально. Только в моем формате курса есть дополнительная рубрика, под которой можно загрузить одно изображение. Это отлично сохраняется в базе данных, оно не находится в черновике, и его можно просматривать в моем каталоге корневых данных, если я следую хэшу содержимого в базе данных. Он даже загружается в форму как штраф по умолчанию. Однако, если я пытаюсь работать с изображением, все тесты проходят нормально (.is_valid_img() и т. д.), и мне даже предлагается загрузить файл. Однако, когда я это делаю, он поврежден, и мой просмотрщик файлов говорит: «Критическая ошибка: не файл png». Излишне говорить, что это не отображается на моем фактическом сайте курса.

Когда я смотрю на файл в filedir, это совершенно очевидно, что это png. Пожалуйста, я был бы благодарен за любую помощь, так как я много пробовал, и я в своем уме.


person Julian Kurz    schedule 07.06.2017    source источник


Ответы (1)


Мне кажется, что вы получаете какой-то вывод на странице перед отправкой файла PNG, который будет добавлен в начало файла и заставит его не работать как файл PNG.

Я бы посоветовал вам открыть файл в шестнадцатеричном редакторе и проверить начало файла — оно должно выглядеть так: https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header, так что ищите лишние символы перед этим.

Что касается того, откуда берутся лишние символы - они могут быть очевидным предупреждением/сообщением об ошибке (которое должно быть легко отследить и исправить). Кроме того, у вас могут быть какие-то случайные операторы «эха» (опять же, их довольно легко отследить). Худшие проблемы, которые можно найти, — это лишние символы перед открывающими тегами «php» файла где-то в вашей установке или после закрывающего тега в конце файла (именно поэтому вы никогда не должны использовать закрывающие теги PHP). Их поиск сведется к поиску их во всех ваших настроенных файлах кода.

person davosmith    schedule 07.06.2017
comment
Чувак, СПАСИБО БОЛЬШОЕ. Да, это был просто случайный var_dump, который печатался на адрес картинки, который я не учел, потому что не думал, что содержимое картинки будет генерироваться в этом месте. - person Julian Kurz; 07.06.2017
comment
Содержимое картинки там не генерируется, а загружается из хранилища сервера и оттуда выталкивается в браузер пользователя, а значит, перед собственно содержимым файла ничего не должно выводиться. - person davosmith; 07.06.2017
comment
Ах, приятно знать, что, на мой взгляд, они должны сделать это более понятным в документации. В любом случае, спасибо за вашу помощь! :) - person Julian Kurz; 07.06.2017