На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> После переезда на другой хостинг появились проблемы , Кодировка и работа скриптов
    Здравствуйте!

    Ранее был на хостинге, где предоставлялась возможность использовать php 4.4, 5.2 - 5.6., а MYSQL - 5.1.67.

    В итоге старый сайт работал себе нормально на версии PHP: 5.2.17 и, соответственно, на MYSQL - 5.1.67.

    Для движка одного из моих новых сайтов потребовались: MySQL версии 5.5.3 и PHP версии 7. Поменял хостинг. Новый сайта заработал на УРА!

    А вот со старым начались проблемы. Версию PHP ниже 5.6 новый хостинг не предоставляет. MySQL, как и писал выше, - версии 5.5.3.

    Проблем две:

    1. Работающие ранее скрипты перестали работать нормально. Вылезли предупреждения.

    Warning: Variable passed to each() is not an array or object in .../paginator.php on line 17 ( ругается на while (list($var, $value) = each($HTTP_GET_VARS)))

    Warning: getimagesize(./figs/cauc3.jpg): failed to open stream: No such file or directory in .../table.php on line 17
    Warning: getimagesize(./figthumbs/cauc4.jpg): failed to open stream: No such file or directory in .../table.php on line 21
    Warning: getimagesize(./figthumbs/cauc5.jpg): failed to open stream: No such file or directory in .../table.php on line 21
    В этих трех случаях ругается на это $size = getimagesize($image_path); Но эти файлы там есть.

    Разбивка списка на страницы отключилась, видимо, из-за неверного параметра, передаваемого в each().

    2. Текст, который выводится из базы MySQL, стал такого плана: РїРѕСЃРѕС…РѕРј (UTF-8 65001).

    Со второй проблемой вроде проще. Поменял себе кодировку в базе и живи спокойно. Но что-то не получается :blush: .
      Цитата voidman @
      Версию PHP ниже 5.6 новый хостинг не предоставляет.

      версии ниже 5.6 просто не поддерживаются, да и 5.6 как бы уже всё: http://php.net/supported-versions.php

      Цитата voidman @
      Warning: Variable passed to each() is not an array or object in .../paginator.php on line 17 ( ругается на while (list($var, $value) = each($HTTP_GET_VARS)))

      $HTTP_GET_VARS - устарел http://php.net/manual/ru/reserved.variables.get.php используй $_GET вместо этого.

      Помимо этого функция each тоже, начиная с php 7.2.

      ExpandedWrap disabled
        foreach($_GET as [$var, $value]) { ... }


      Цитата voidman @
      В этих трех случаях ругается на это $size = getimagesize($image_path); Но эти файлы там есть.

      Сообщенька говорит об обратном =) Ну или права проверь

      :whistle:
        Спасибо!

        Да! Отстал я от жизни. А если версии PHP ниже 5.6 просто не поддерживаются, то и мой прошлый провайдер застрял в эпохе динозавров.

        Получается, что:

        while (list($var, $value) = each($HTTP_GET_VARS))
        {
        $argsstring = $argsstring . "$var=$value&";
        }

        надо переписать как:

        foreach($_GET as [$var, $value])
        {
        $argsstring = $argsstring . "$var=$value&";
        }

        Протестирую.

        Что касается наличия файла в папке "./figs/cauc3.jpg", то увы... при копировании с сервера прошлого провайдера он не скачался. То ли сбой, то ли что... А я то был уверен, что он там. Удалю пока ссылки на несуществующие файлы из базы. Потом восстановлю. Тут все ясно.

        Осталось выяснить последнее. У меня для генерируемой страницы charset=windows-1251. Открываю базу через phpMyAdmin, там все читабельно. А почему на страницу выводятся иероглифы?

        Сервер: Localhost via UNIX socket
        Версия сервера: 10.0.32-MariaDB-0+deb8u1 - (Debian)
        Версия протокола: 10
        Кодировка сервера: UTF-8 Unicode (utf8)
        Сообщение отредактировано: voidman -
          Цитата voidman @
          У меня для генерируемой страницы charset=windows-1251

          Напоминаю, что в PSR-1, которому 100 лет в обед: http://www.php-fig.org/psr/psr-1/ явно написано, что надо использовать utf-8, отсюда и проблемы ;) Ну т.е. сам себе выдумал их.

          В любом случае надо при соединении всегда прописывать set collation, тогда и проблем не будет, даже с cp1251.

          Цитата voidman @
          foreach($_GET as [$var, $value])
          {
          $argsstring = $argsstring . "$var=$value&";
          }

          о_0

          Если задача сделать таким образом, то надо для начала почитать мануал :D И переписать как:
          ExpandedWrap disabled
            $result = http_build_query($_GET);
          :whistle:

          Добавлено
          Цитата voidman @
          "./figs/cauc3.jpg"

          Помимо этого не стоит забывать, что всегда и везде стоит указывать абсолютные пути, в противном случае проблем ещё больше можно огрести ;)
          Сообщение отредактировано: Serafim -
            Прошу прощения, у меня не всегда хватает времени даже написать сюда, уж куда там во что-то вникать.
            Было время, когда я занимался Web-программированием. Не скажу, что стал прямо асом.
            Но в то время, да! "Курил" мануалы, обзавелся кучей средств отладки и "варился" в этом.
            Сайт, о котором я веду здесь речь, был написан в 2004 году. Он был, наверное, последним.
            Делался для близкого человека. Сайт ничего не продавал, больще был для информации. Для него же все это время держал хостинг.
            База данных сайта состояла всего из одной таблицы. В дальнейшем, в код я практически не лез, так как все работало и примерно раз в год добавлял пару строчек в эту самую таблицу. Недавно мне понадобился серьезный сайт и людям, которые его подрядились делать, я сообщил что у меня есть хостинг. Мне в ответ выставлили требования к хостингу.

            Цитата Serafim @
            версии ниже 5.6 просто не поддерживаются, да и 5.6 как бы уже всё


            Мой провайдер так не считает (о поддерживаемых версиях я писал выше) и в итоге его пришлось сменить. Перенес и сайт ради, которого тут и задал вопрос.

            Цитата Serafim @
            Напоминаю, что в PSR-1, которому 100 лет в обед: http://www.php-fig.org/psr/psr-1/ явно написано, что надо использовать utf-8, отсюда и проблемы Ну т.е. сам себе выдумал их.


            Без обид, я даже эту ссылку открывать не стал. Но рад, что мне искренне пытались помочь. Я себе ничего не выдумывал. На тот момент все работало нормально.


            Цитата voidman @
            ругается на while (list($var, $value) = each($HTTP_GET_VARS))


            Я наивно полагал, что мне с этим просто подскажут: что не поддерживается, что переписать и как переписать. Что-то я все таки помню. Но если надо столько всего изучить и прочитать, то лучше обращусь к тем, кто мне делает сайт. Пусть каждый занимается своим делом. Еще раз спасибо за попытку помочь.
              Это не та профессия, где можно что-то сделать в 2004ом и считать, что это нормально в 2017ом :D За эти ~13лет изменилось вообще всё :)
                Обычно я пишу как решил вопрос. Всегда может быть полезным для других.
                Мне и впрямь помогли с перекодировкой профессиональные Web-строители. Перелопативли все файлы и базу. Респект.
                А вот на ошибках в скрипте забуксовали. Сработало типовое: "Легче все заново переписать, чем разбираться".
                Пришлось тряхнуть стариной. Не хотелось подводить человека, работоспособность сайта которого нужно было срочно восстановить. Заработало все за 10 минут. Почему? Потому что разобрался, хотя на собственный скрипт, спустя 13 лет, уже смотрел как на чужой.

                Не пожалею свободного "окошка" во времени и поделюсь.

                Цитата Serafim @
                изменилось вообще всё



                Serafim, соглашусь, что изменилось! Иначе с переездом от застрявшего в каменном веке хостинга, работоспособность скриптов не исчезла бы. Но я всегда против использования превосходных форм и степеней. Если по сути, то мало, что поменялось. Синтаксис?!...

                Программирование - это прежде всего математика, логика и только потом уже чтение мануалов и синтаксис.

                Математика - это царица всех наук. Ее мы тут трогать не станем. Задачка мелковата.

                Логика у разработчика интерпретатора PHP, видимо, есть, раз он переопределил способ "готовки" глобальных и суперглобальных переменных. Это остается его правом. Тут комментарии бессмысленны.

                А вот логике скрипта, фрагменты которого перестали работать, пару фраз уделю.

                Для username, получаемой методом POST из формы:

                ExpandedWrap disabled
                  <form action="foo.php" method="post">
                      Имя:  <input type="text" name="username" /><br />
                          <input type="submit" name="submit" value="Отправь меня!" />
                  </form>


                на версии PHP: 5.2.17 вполне сработало бы (а точнее РАБОТАЛО все 13 лет, вплоть до 5.6):

                ExpandedWrap disabled
                  echo $username;


                Аналогично для метода GET из URL:

                ...somesite.com?username=Ted

                ExpandedWrap disabled
                  echo $username;
                также работало бы.

                А теперь надо как минимум:

                ExpandedWrap disabled
                  $username = $_POST['username'];

                или
                ExpandedWrap disabled
                  $username = $_GET['username'];


                Логика того, что делал скрипт, такова:

                1. Получить ответ, что используется: GET или POST (я уже сразу вопрошал про GET, так как скрипт был уже в этой части "ветки");
                2. Получить имя переменной и проверить, действительно ли это username, а не какая-то другая (в этом месте скрипт и забуксовал);
                3. Получить значение переменной username (а скрипт вместо 'Ted', получал '') и дальше делать все по заложенному алгоритму.

                Как только получил название переменной и ее значение, все заработало.

                Удачного всем дня!
                  Цитата voidman @
                  также работало бы.

                  Да, и делало код небезопасным. Это и во времена 4ки даже считалось плохим тоном и всегда отключалось при первой возможности.


                  Вот есть у тебя:
                  ExpandedWrap disabled
                    if (\password_verify($passwrod, $hash)) {
                        echo 'Hello admin!';
                    }


                  А потом такой хоба, прописываешь "?password=123&hash=$2y$10$GElJvlT5EP0Th3hhOOyOYOSoiNjbhtxN7ljWHTjVN6L2pTjFCLqU." и вуаля, ты - админ.
                    Спасибо, Serafim!

                    Безопасность - это важно. Именно поэтому серьезный сайт поручается проверенным профессионалам.
                    Но это уже другая история.
                    А по части данного поста, - вопрос решен.
                    Сообщение отредактировано: voidman -
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0346 ]   [ 15 queries used ]   [ Generated: 28.03.24, 20:55 GMT ]