проблема со вставленными символами новой строки в загруженных файлах и отображаемых изображениях из cakephp / apache / linux - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть приложение cakephp, которое работает на многих других машинах, но когда я установил его на одном конкретном компьютере с Ubuntu / Apache2 / PHP 5.3.3, в каждом загружаемом файле добавляется дополнительная новая строка, вставленная в начале файла.

Мои изображения не будут отображаться в моем браузере с этого сервера, и когда я щелкну правой кнопкой мыши >>> сохранить изображение как, изображение будет сохранено с дополнительной новой строкой в ​​начале.Это сохраненное изображение не отображается на моем локальном компьютере, но как только я удаляю лишнюю новую строку, изображение отображается нормально.

То же самое происходит с текстовыми файлами, загруженными из этого приложения (приложение позволяет пользователям загружать файлы).и загрузить файлы, такие как эти текстовые файлы и изображения).Все сохраненные изображения на сервере верны, я могу скопировать их на свой локальный компьютер, и они отображаются правильно, поэтому новая строка каким-то образом добавляется из моего приложения при рендеринге.

Я сделал простой тестовый скрипт (украден изphp.net), который работает на этом же сервере в качестве автономного сценария php:

<?php
ob_clean();
header("Content-type: image/gif");
$im = imagecreate (100, 50);
imagegif($im);
imagedestroy($im);
?>

Когда я использую этот сценарий, включенный в мое приложение, в точке, где я обычно отображаю изображения, я получаю то же самоеповедение: это изображение не отображается, но когда я щелкаю правой кнопкой мыши >>> сохранить изображение как, я могу загрузить изображение, удалить новую строку и правильно отобразить сгенерированный gif черного ящика.

Iдаже думал, что вызов ob_clean () удалит все предыдущие данные в буферах, но это не так (или я должен сказать, что это не решило мою проблему).

Есть идеи о том, как отладить это?

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Спасибо за предложения.

Оказалось, что в конце файла конфигурации php была добавлена ​​новая строка для настраиваемого приложения в торт, которое было "include" -ed.Новая строка произошла после закрытия "?>" В скрипте и была выведена как вывод.

ob_clean();

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

ob_start();
include(whatever);
ob_end_clean();

это не позволило отображать символ новой строки.Только позже я нашел точное место, где был перевод строки.

0 голосов
/ 30 мая 2018

Я знаю, что сейчас 7 лет, но я хотел бы поделиться простым способом найти проблемный файл (под Unix), предполагая, что проблема вызвана переводом строки после ?> закрытого тега php: 1002 *

pcregrep -r -M --include='\.php$' '\?>\n' root/of/the/project

pcregrep - это grep вариант, который допускает многострочное сопоставление, поэтому с помощью этой команды я перечисляю все .php файлы с новой строкой после закрывающего тега.

0 голосов
/ 23 апреля 2011

Вы пробовали провести сравнение на <?php echo phpinfo(); ?> среди различных серверов?Возможно, вы используете разные версии / расширения?Возможно, между ними есть что-то другое, вставляющее NULL, когда должна выполняться функция или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...