За последние 24 часа нас посетили 21729 программистов и 1014 роботов. Сейчас ищут 677 программистов ...

Проблема с header("Content-type: image/png");

Тема в разделе "PHP для новичков", создана пользователем anadonam, 11 янв 2020.

Метки:
  1. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    у меня что то никак не получается русскими буквами писать... на нужном мне сайте :(
    проблема то понятно но как решить ?
    как я понял все функции работают только с кодировкой utf-8
    а у меня в файле .htaccess прописаны директивы
    AddDefaultCharset windows-1251
    php_value default_charset "cp1251"

    без этого почему то сайт показывается в крякозябрах. (это стало необходимо когда на хостинге появился php 5. с 4 не было проблем).
    и вот теперь инструкции типа .<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    не работают для отдельных страниц.. пиши не пиши...

    на поддомене, где для всего сайта utf-8 если поставить там все нормуль...
    (вот бьюсь (не спеша) с новым подводным камнем)
    // не хочу я целиком на utf 8 уходить , мне не удобно с ней....(Привычка сильная к 1251)
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    нет. поясни про какие функции речь.
    это точно лишнее. по формату похоже на кодировку символов в mysql, то конкретно эта переменная среды никакого влияния иметь не будет.

    проблема может быть в кодировке соединения с базой, а ты, судя по всему, управляешь только кодировкой http. то есть отправляешь данные на страницу ты корректно, а вот добываешь данные из базы не факт что правильно.

    гуглить "mysql set names"
    --- Добавлено ---
    P.S. кодировка 1251 выглядит анахронизмом. но чисто чтобы понять как всё работает, ты конечно можешь избавиться от ошибок. и только потом перейти на UTF-8, lol :)

    https://php.ru/forum/threads/pro-kodirovku-i-bazu.56793/
     
  3. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    Нет БД тут не причем
    Весь контент хранится в файлах .
    (БД есть, но в ней информация о скриптах движка - там всё на латинице и кодировка роли не играет)

    // этим 2 строчки мне админ хостинга сказал вписать после того как я нему обратился по вопросу- почему все стало крякозябрами...... .

    переход - не знаю. я уже думал... пришел к выводу, мне будет очень неудобно а это скажется на производительности очень сильно... - пока переучусь привыкну это годы нужны .....
    (а ошибки то исправлю . это конечно.. - просто никто никуда не спешит и не рвет и не мечется)
     
    #28 anadonam, 25 янв 2020
    Последнее редактирование: 25 янв 2020
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Если у тебя страницы в разных кодировках, вообще отключи отдачу кодировки в заголовке Content-Type. Оставь только в мета-тегах страниц.
    --- Добавлено ---
    Но вообще это «вырви мозг». Лучше приведи страницы к одной кодировке.
     
  5. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    Нет не в разных.
    это возникли вот сложности что функция : imagestring ()
    хочет работать только с utf-8.
     
  6. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    Пытался применить
    Код (Text):
    1. $str0=iconv('windows-1251', 'utf-8', $str0);
    но разница лишь в том, что крякозябры разные...
    прописывал в
    Код (Text):
    1. header("Content-type: image/gif; charset=utf-8");
    2. header("Content-type: image/gif; charset=windows-1251");
    на всякий случай
    совершенно нет разницы...

    // вот в запасе идейка ... организовать работу скрипта на поддомене, сохранять картинки и использовать их уже на главном сайте..
    тут вот надо решить свой подводный камень как бы это сделать в реальном времени, ведь поддомен никто кроме меня не будет посещать --- как и когда скрипт запускать ..........
    --- Добавлено ---
    так прошу прощения ....
    похоже я опять просто туплю
    дело в том что я веду все тесты а у меня сам файл в кодеровке utf....
    (сейчас сделаю и отпишусь)..... Ой есть шанс :)
    --- Добавлено ---
    только что проверил и выключил именно это
    моментально стало всё крякозябрами
    а вот строчка как раз AddDefaultCharset windows-1251
    ни на что не повлияла когда убрал
     
  7. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    Нет.... ничего . не вышло..
    Но здесь это уже особенности конфигурации моего движка
    тут я помощи не прошу... (главное вообще разобрался как работает- за что спасибо ответчикам....)
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Писец! Это никак не связано с Content-Type.

    Почитай описание ф-ции. Шрифт 2 – это встроенный шрифт в кодировке Latin 2. Образов кириллических букв там нет. Можешь хоть до посинения перекодировать текст.
     
  9. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    чуть попозже постю и шрифты....
    прям щас времени нет больше на это
     
  10. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    Ура!
    Вопрос полностью решился!.

    - Использовал imagettftext вместо imagestring
    1 - скачал и подключил arial.ttf
    2 - использовал функцию iconv (); для манимапуляций с кодировкой нужного текста.

    Код (Text):
    1. <?php
    2.  
    3. //$font = imageloadfont('arial.gdf');
    4. $font = 'arial.ttf';
    5. $string="работает всё хорошо";
    6. //$string="Картинка РЅР° тексt"; (так тоже работает и без iconv!)
    7. $image = imagecreatetruecolor(320, 240);
    8.     if ($image) {
    9.         $colorBg = imagecolorallocate($image, 155, 255, 255);
    10.         imagefill($image, 0, 0, $colorBg);
    11.         $colorTx = imagecolorallocate($image, 233, 14, 91);
    12.  
    13.  
    14.         $string=iconv('windows-1251', 'utf-8', $string);
    15.      
    16.        //imagestring($image, $font, 10, 10, "$string", $colorTx);
    17.  
    18.         imagettftext($image, 10, 0, 10, 20, $black, $font, $string."!!" );
    19.  
    20.         header("Content-type: image/png");
    21.         imagepng($image);
    22.         imagedestroy($image);
    23.     }
    24. ?>
     

    Вложения:

  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Для тех, кто все же отважится использовать imagestring...

    1. Взял консольный шрифт из одного нашего проекта (кодировка нестандартная).
    2. Преобразовал его в формат, пригодный для использования в imagestring (см. описание imageloadfont). Результат во вложении.
    3. Ну и написал демку:
    PHP:
    1. <?php
    2.  
    3. if ($font = imageloadfont(__DIR__.'/unpacked.bin'))
    4. {
    5.     if ($image = imagecreate(32*8, 7*16))
    6.     {
    7.         imagecolorallocate($image, 0, 0, 0);
    8.         $color = imagecolorallocate($image, 255, 255, 255);
    9.  
    10.         for ($i=32, $y=0; $i<256; $i+=32, $y+=16)
    11.         {
    12.             imagestring($image, $font, 0, $y, implode(range(chr($i), chr($i+31))), $color);
    13.         }
    14.  
    15.         header('Content-Type: image/png');
    16.         imagepng($image);
    17.         imagedestroy($image);
    18.         exit;
    19.     }
    20.     else error(503);
    21. }
    22. else error(503);
    P.S. Чтобы выводить ANSI-строки, используйте шрифт в соотв. кодировке, либо ф-цию преобразования строки в показанную консольную кодировку.
     

    Вложения:

    • unpacked.zip
      Размер файла:
      1,6 КБ
      Просмотров:
      5
  12. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    А я между тем нашел, что о чем еще поговорить в эту тему..
    вопрос второстепенной важности...

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

    Но
    когда мы наводим курсор на эту картинку и:
    1) делаем сохранить как... - он предлагает сохранить как image.php (по имени того что указано в параметре src тега <img)
    2) аналогично выбираем из меню - сохранить url картинки и получаем тоже самое - ссылку на файл images.php

    может подскажете чего почитать с чем разобраться

    ( набравшись наглости скажу - сам пока не думал, не решал спрашиваю просто для ускорения в вопросе разбирательства.. (сейчас чуть более важные задачи имеются... (там вопросов нет просто делать делать делать (на 3-5 дней по расчетам).. ) ))
    --- Добавлено ---
    @miketomlin, как я понял там имеются более привлекательные возможности...
    можно свой шрифт сделать и вообще не быть зависимым от кодировки....
    И вот получается так что сколько я времени потратил на разбирательство с этими кодировками так было бы оптимальнее :D
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Ты же сам указал в ссылке имя скрипта (с расширением .php). В моей демке все норм. сохраняет ;)
    --- Добавлено ---
    Потому что скрипт обработки (файл или функция) и адрес, при запросе по которому скрипт запускается, – это разные вещи. Если ничего умнее придумать не сможешь, сделай рерайт в конфиге Web-сервера :)
     
  14. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    @miketomlin, это то ясно.
    вот и вотпрос то - А как я туда вместо php gif Или jpg подсунуть то ... ?????
    с лёту что то пока не знаю...

    ага..если файл переименовать в .gif уже будет отличная полноценная картинко
    это уже хорошо

    @miketomlin - это решаемо!
    это вопрос не особой важности...
    просто если кто уже знает подскажет - облегчит потуги и ускорить :)
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Какой файл? Если ты переименуешь файл скрипта, изменив расширение на .gif и т.п., он перестанет исполняться. Можно попробовать сделать так: image.php.gif, но это идиотизм. Делай рерайт, как я выше написал.
     
  16. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    прошу прощения
    под ререйтом имеет в виду редирект ?

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

    (то что сегодня получилось отобразить русский текст это для меня огромный шаг вперед и когда я не знал причины ПОЧЕМУ не работало --- над которым я зависал недели 3.... остальное должно быть проще ..... .. . )
     
    #41 anadonam, 25 янв 2020
    Последнее редактирование: 26 янв 2020
  17. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Внутренний редирект.
    --- Добавлено ---
    Лично я просто установил связь между адресом (точнее слагом sansfont.png) и модулем-обработчиком в рамках движка.

    Ты же типа Web-студия. Должен знать, как работают современные движки.
     
  18. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    ха-ха-ха-ха-ха

    мне сказали что если я не знаю, что такое карусель то я не веб-студия.
    когда спрашивали не знал....

    потом узнал говорю что вы мозг компосите - слайдер!
    Но - не помогло - квалификация не была доказана.
    нет - я не знаю, как работают чужие движки. :)
    (всем угодить не возможно и даже не стараюсь. я даже от интернет магазов отказываюсь за 50-70, а сижу на мелких за 15-30.)

    Почему? вот ты ему сделаешь за эти "50" сдашь все хорошо.. но месяца через 3-4 начнется - подправь вот это , еще вот так было лучше там дел на 100 рублей мелочи.. .... (именно по прецедентам подобным и отказался делать сложные проекты) .. . в общем ..... ненадонам такое.. (им на 100 рублей а мне через полгода вспоминать индивидуальные алгоритмы чтобы эту вставку сделать... - что либо доказывать что это тяжело и это 100р оно по трудоемкости как в 3000 выливается бесполезно!. )

    Это ..... тут сеошники о релевантных поисковых запросах для выдачи поговаривают,
    а я не понимаю это КАК?
    так что никакая я не веб-студия - так шарага на мелких подработках перебивающаяся....
     
    #43 anadonam, 26 янв 2020
    Последнее редактирование: 26 янв 2020
  19. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    :D @anadonam, что ни разу не торкнуло вбить в поисковую строку «MVC», «роутинг» и т.п.?
    --- Добавлено ---
    Ладно, это оффтоп. Ты в очередной раз меня шокировал :) Спок. ночи.
     
  20. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    @miketomlin НЕА
    вот в данный момент вбиваю туда JSON.. - решил начать с этой структурой данных работать вместо csv (explode (1#2#3#4#5#)), расчитал вроде алгоритмы должны быть проще...... (вопросы по преобразование данных в эту структуру и парсингу (для чистки) этой структуры все решены - сижу реализую...... )
    (офтоп - да ладно - главное же чт форум живет ;) )
    вот такое делаю - тут проще показать

    https://anonado.ru/resurs/kiip#Efb_WJPPm30

    чуть позже (пока просто нет времени оно тратится на кодинг - но это не бесконеный процесс - думаю еще полгодика и всё нужное напишу ...... ) будут свои ролики и описание этих роликов я буду хранить в структуре json и со своего канала на YT в произвольном порядке отображать...

    я сначало думаk прям парсить .... Но
    медленно очень всё динамика не получается из за большого времени работы скриптов......
    проще свои файлы с данными сделать......

    а MVC (Не знаю что это) не вбивал пока еще....
     
    #45 anadonam, 26 янв 2020
    Последнее редактирование: 26 янв 2020
  21. anadonam

    anadonam Новичок

    С нами с:
    10 янв 2020
    Сообщения:
    89
    Симпатии:
    3
    Адрес:
    Воронеж
    тест с видео уже проводил
    вот такое искусство показывать буду

    сильно то не судите это мой самый лучший ролик из первых трех
    дальше планируется лучше и качественней

    ну а чо
    вот извиняюсь за выражение вот это Г (я сам знаю что Г)
    но на прошедший новый год набрало 130 просмотров :)
    а страница сайта на котором стоит этот ролик - была посещена 350 раз..
    то есть тест дал положительный результат - будем развивать -улучшать

    ps/ а на заказ - да там нет ниче интересного - там скучные шаблонные люди.. - ""мы вам предлагаеи наше"" вот картинка сапогоф от модгного кутюрье по низкой цене со скидкой чтобы вы купили""...тьфу ....
    скукатень и дрибедень и как ты им картинку крутую в шапку не лепи c кнопками яркими - сапоги эти со 79% скидкой никому не сдалися...
     
    #46 anadonam, 26 янв 2020
    Последнее редактирование: 26 янв 2020
  22. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Рекомендую глянуть в сторону Imagick. Почему-то гуру данного портала немного умолчали об этом. Там намного больше возможностей по работе с изображениями. В тч конвертацией из одного формата в другой.
    Например, кусок из создания капчи одного из проектов:
    upload_2020-2-1_17-17-56.png
    А вот преобразование первой страницы pdf в jpg:
    PHP:
    1. function genPdfThumbnail($source, $target) {
    2.     $im = new Imagick();
    3.     $im->readimage($source."[0]");
    4.     $im->setimageformat("jpeg");
    5.     $im->setImageCompression(\Imagick::COMPRESSION_JPEG);
    6.     $im->setImageCompressionQuality(10);
    7.     $im->writeimage($target);
    8.     $im->clear();
    9.     $im->destroy();
    10. }
    Намного удобнее работать, чем штатными средствами)
     
  23. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    По первому примеру имеем что-то типа этого:
    upload_2020-2-1_17-38-22.png