Отображение изображений в gsp (grails)

Это проблема загрузки или конфигурации времени выполнения

. Важно признать, что во время этапа компиляции или синтаксического анализа происходит синтаксическая ошибка или синтаксическая ошибка, что означает, что PHP закладывает деньги до того, шанс выполнить любой из ваших кодов. Поэтому, если вы изменяете конфигурацию PHP display_errors во время выполнения (это включает в себя что угодно: от использования ini_set в вашем коде до использования .htaccess, который является файлом конфигурации во время выполнения), тогда загружаются только загруженные настройки конфигурации по умолчанию.

Как всегда избегать WSOD в разработке

Чтобы избежать WSOD, вы хотите убедиться, что загруженный файл конфигурации имеет display_errors и error_reporting установлен на -1 ( это эквивалент E_ALL, потому что он обеспечивает включение всех битов независимо от того, какая версия PHP вы используете ). Не печатайте постоянное значение E_ALL, потому что это значение может быть изменено между разными версиями PHP.

Загруженная конфигурация - это либо ваш загруженный файл php.ini, либо ваш apache.conf или httpd.conf или файл virtualhost. Эти файлы читаются только один раз на этапе запуска (когда вы сначала запускаете apache httpd или php-fpm, например) и только переопределены изменениями конфигурации времени выполнения. Убедившись, что display_errors = 1 и error_reporting = -1 в загруженном файле конфигурации гарантируют, что вы никогда не увидите WSOD независимо от синтаксиса или ошибки синтаксического анализа, которые происходят до изменения времени выполнения, например ini_set('display_errors', 1); или error_reporting(E_ALL); может иметь место.

Как найти загруженные файлы конфигурации (php.ini)

Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только с помощью следующего кода ...

Затем укажите ваш браузер и посмотрите на загруженный файл конфигурации и дополнительные файлы .ini, которые обычно находятся в верхней части вашего phpinfo() и будут содержать абсолютный путь ко всем ваши загруженные файлы конфигурации.

Если вы видите (none) вместо файла, это означает, что у вас нет файла php.ini в файле Configuration (php.ini). Таким образом, вы можете загрузить файл php.ini в комплекте с PHP отсюда и скопировать его в свой путь к файлу конфигурации как php.ini, затем убедитесь, что ваш пользователь php имеет достаточные разрешения для чтения из этого файла. Вам нужно будет перезагрузить httpd или php-fpm, чтобы загрузить его. Помните, что это файл development php.ini, который поставляется в комплекте с источником PHP. Так что, пожалуйста, не используйте его в производстве!


Просто не делайте этого в производстве

Это действительно лучший способ избежать WSOD в разработке. Любой, кто предположил, что вы положили ini_set('display_errors', 1); или error_reporting(E_ALL); наверху вашего PHP-скрипта или используете .htaccess, как вы это делали, не поможет вам избежать WSOD при возникновении синтаксиса или синтаксического анализа (как в вашем случае здесь ), если ваш загруженный файл конфигурации отключен display_errors.

Многие люди (и фондовые установки PHP) будут использовать файл production-ini, который по умолчанию отключен display_errors, что обычно приводит к это то самое разочарование, которое вы испытали здесь. Поскольку PHP уже отключился, когда он запускается, он сталкивается с синтаксической или синтаксической ошибкой и не дает ничего для вывода. Вы ожидаете, что ваш ini_set('display_errors',1); в верхней части вашего PHP-скрипта должен был избежать этого, но не имеет значения, не может ли PHP не разобрать ваш код, потому что он никогда не достигнет времени исполнения.

7
задан chaos 31 December 2008 в 02:46
поделиться

3 ответа

Если Ваш imageList имеет список попытки объектов изображения следующий

$ {createLinkTo (dir: 'изображения', файл: image.filename)}.

, Если Ваши imageList как это ['1.jpg', '2.jpg', '3.jpg'] пробуют следующий

**${createLinkTo(dir: 'images', file: image)}**
4
ответ дан 31 December 2008 в 12:46
поделиться
  • 1
    Необходимо переделать англичан в последних сообщениях пары. У меня нет подсказки, что Вы говорите. Возможно, просто сделайте все это одним dll? – Bryan Rowe 30 June 2009 в 05:11

В зависимости от того, что находится в Вашем imageList, можно сделать a:

<g:each in="${imageList}" var="image">
<img src="${createLinkTo(dir: 'images', file: image.filename)}" alt="Grails"/>
</g:each>
2
ответ дан mat 31 December 2008 в 12:46
поделиться
  • 1
    Извините за мой английский язык:). Я разрешил проблему сам. Я представил интерфейс и устранил класс в платформе 3.5, затем заменил все ссылки на этот класс с интерфейсом. – pedrofernandes 30 June 2009 в 09:27

Принятие Вашего imageList, что-то как ['1.jpg', '2.jpg', ...], Ваш createLinkTo должно просто быть похожим:

${createLinkTo(dir: 'images', file: image)}

, Так как Вы уже определили переменную итератора как 'изображение'. Если это не работает, это могло бы помочь разъяснить то, что находится в содержании Вашего imageList набор.

2
ответ дан Rob Hruska 31 December 2008 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: