Возьмем ситуацию, когда в скрипте подгружается сразу множество файлов, и только после этого выводится картинка. Чем больше файлов, тем больше вероятность вывода “паразитного” символа, из-за которого картинка может просто не отобразиться в браузере.
В этой статье я опишу один из способов, которым можно выявить и устранить такие символы в коде.
1. Находим скрипт, отвечающий за вывод изображения, и выполяем сбор сведений о всех погруженных файлах скриптов таким образом:
1 2 3 |
$f = fopen('t.txt', 'w'); fwrite($f, serialize(get_included_files())); fclose($f); |
После просмотра такого скрипта, создастся файл t.txt, в котором будет содержаться сериализованный массив с путями всех подгруженных на данный момент файлов.
2. Создание файла – сканера:
Нужно создать в корне сайта файл i.php со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 |
$f = file_get_contents('t.txt'); $a = unserialize($f); //echo ''.print_r($a, true).''; foreach($a AS $k => $file) { if($k > 5) include($file); } $i = imageCreateFromJpeg('1.jpg'); header('Content-Type: image/jpeg'); imageJpeg($i); |
И скопировать в ту же директорию эту картинку: image.jpg
Этот скрипт читает файл t.txt, и делает unserialize массива путей всех файлов.
Осталось определить, какие файлы влияют на отображение картинки, меня соответствующим образом число в этом условии if($k > 5)
Это позволяет конкретно определить файл, содержащий паразитный символ.
Ну а дельше, дело за малым :)\