Ответы пользователя по тегу PHP
  • Как получить массив?

    Stalker_RED
    @Stalker_RED
    что я делаю не так?

    Тут много всего не так. И странные названия полей на чудо-транслите, и отсутстивие тега <code></code>, делающее эту стену закорючек нечитаемой.

    По сути:
    3. ... // преобразую в строку
    4. ... // добавляю в конец массива

    Вы же сами объеденили эти три значения в строку? Просто не делайте этого, и добавляйте значения в массив при помощи array_push() или array_merge()
    Ответ написан
  • Почему php-скрипту может не хватать памяти, хотя по данным самого php всего хватает?

    Stalker_RED
    @Stalker_RED
    Смотреть в логи, выяснять какой именно участок кода хочет такие объемы.

    Довольно часто это случается при попытке обработки хайрез картинок через GD (телефоны с камерами на 15 мегапикселей пеедают привет). Если это так - imagemagick вам в помощь.
    Ответ написан
  • Как работает функция stripslashes?

    Stalker_RED
    @Stalker_RED
    Если вы напишете "\" вы получите ошибку не только в php, но и в js, sql или в c++, например.
    И это не магия, а непонимание синтаксиса, в частности экранирования.
    Ответ написан
  • Как с квадратной картинки сделать 'впуклую' трапецию?

    Stalker_RED
    @Stalker_RED
    GD так не умеет, разве что сами напишете. Можно сделать через ImageMagick

    www.imagemagick.org/script/examples.php
    phpimagick.com
    Ответ написан
    Комментировать
  • Почему не удаляется сессия?

    Stalker_RED
    @Stalker_RED
    Как вы проверяете, что сессия не была удалена?

    Замечание:
    Спецификация HTTP/1.1 требует указывать абсолютный URI в качестве аргумента Location:
    © php.net/manual/ru/function.header.php
    (выделил болдом)

    И зачем вы передаете параметр в session_unset()? Вы точно используете ее по назначению?
    php.net/manual/ru/function.session-unset.php
    Ответ написан
    4 комментария
  • Как оформить визуальную часть php страницы?

    Stalker_RED
    @Stalker_RED
    В том и проблема, я не понимаю как сделать что б тут:
    if ($success){
      echo "Success";
      
    }
    else{
      echo "Error";
    }
    
    header('Refresh: 5; URL=http://mysite.net/index.html');

    Вместо Success или Error, выдавало заготовки моих html страниц под это, а не просто слова в окне браузера. И что б эти странички висели и потом редиректило на Главную.


    Начнем с того, что заголовки скорее всего не сработают, если вы перед ними уже выводили какой-то текст (для этого текста будут сгенерированы ДРУГИЕ заголовки). Поэтому ваш header('Refresh: ...') нужно перенести в начало.

    Далее, на счет "оформить визуальную часть php страницы".
    Я тут погуглил немножко, оказывается в браузерах в основном используют язык разметки html и каскадные таблицы стилей (CSS). Если вывести вместо echo "Success"; какой-то html код, типа такого
    <!DOCTYPE html>
    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <title>HTML Document</title>
       </head>
       <body>
          <p>
             <b>
                Этот текст будет полужирным, 
                <i>а этот - ещё и курсивным</i>
             </b>
          </p>
       </body>
    </html>

    То текст будет не просто текстом, а оформленной страницей.
    Конечно, чтобы не превращать ваш код в лапшу, лучше не писать эту простыню внутри if-а, а вынести в отдельный файл, и использовать include или require, как советует riot26.

    А когда наиграетесь, почитайте про routing в php, про модель MVC и шаблонизаторы. Поверьте, когда в проекте больше трех страниц, эти штуки уже не будут лишними.
    Ответ написан
    1 комментарий
  • Как получить данные о ссылке с формы на php?

    Stalker_RED
    @Stalker_RED
    Есть два варианта:
    1. Добавить в форму скрытое поле с адресом страницы
    2. Обрабатывать referrer $_SERVER['HTTP_REFERER']
    Ответ написан
    Комментировать
  • Рассчет отступов в пагинации?

    Stalker_RED
    @Stalker_RED
    На самом деле достаточно четырех if-ов и одного цикла. Правда условия у этих if-ов довольно развесистые.

    Сперва вычисляем какие номера страниц видны в начале, в конце и в середине
    $start = 1 + $indent;
    $end = $total - $indent;
    $mid_start = $current - $indent;
    $mid_end = $current + $indent;


    Первый и последний if-else выводят активную или неактивную стрелочку ← →
    (вместо неактивной, можно и вообще не выводить)

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

    лапша c кусками бутстрапа
    public static function renderPaginator($total, $current, $indent = 3)
        { 
            $start = 1 + $indent;
            $end = $total - $indent;
            $mid_start = $current - $indent;
            $mid_end = $current + $indent;
            
            ?>
        
        <nav style="margin: 0 auto;">
            <ul class="pagination">
                <?
                
                $skip1 = ($start > $current || $current > $end);
                
                if ($current == 1) { // previous
                    ?><li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><?
                } else {
                    ?><li><a href="?page=<?=($current-1)?>" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><?
                }
                for ($p = 1; $p <= $total; $p++) { // each page
                    if ($p == $current) {
                        ?>
                        <li class="active"><a href="#"><?=$p?> <span class="sr-only">(текущая)</a></li><?
                    } else {
                        
                        if($p < $start
                        || ($p > $mid_start && $mid_end > $p)
                        || ($p > $end)
                        || ($p == $start && $p == $mid_start)
                        || ($p == $end && $p == $mid_end)
                        ) {
                        ?>
                        <li><a href="?page=<?=$p?>"><?=$p?></a></li><?
                        } elseif($p == $start || $p == $end) {
                        ?>
                        <li class="disabled"><a href="#">...</a></li><?
                        }
                    }
                }
                if ($current == $total) { // next
                    ?><li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><?
                } else {
                    ?><li><a href="?page=<?=($current-1)?>" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><?
                }
                ?>
      
            </ul>
        </nav>    
        <?
        }

    Ответ написан
    Комментировать
  • Перенести в определенную часть сайта html?

    Stalker_RED
    @Stalker_RED
    <a href="#part2">перемотать к метке part2</a>
    <br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br>
    <a name="part2">
    <p>ура!</p>


    Гуглить "html якорь" или "html тег a"

    Пример: https://jsfiddle.net/85k28s9s/1/
    Ответ написан
    4 комментария
  • Что случилось с сессиями?

    Stalker_RED
    @Stalker_RED
    С сессиями всё в порядке. Просто SessionStorage в браузере и $_SESSION в php это две разные штуки с похожими названиями.

    И да, из браузера не получится добраться до сессии, которая на сервере. Разве что идентификатор этой сессии можно поменять.

    Но откуда тогда взялось всеобщеизвестное "что бы обойти, нужно вписать"
    Это что-то странное. Почему вы решили, что оно общеизвестное?
    Ответ написан
    4 комментария
  • Как ajax-ом отправить и получить на сервере несколько переменных?

    Stalker_RED
    @Stalker_RED
    Можно и без jquery, используя FormData.
    И переменные, и файлы. В общем всё, что можно передать формой.
    Ответ написан
    Комментировать
  • Как сделать проверку переменной на список запрещенных значений?

    Stalker_RED
    @Stalker_RED
    Нужно записывать куда-нибудь, какие изображения уже были использованы. В базу данных или в файл, например.
    Затем, перед публикацией, делать проверку - не находится ли файл в списке опубликованных.

    Или, еще лучше - сохранить все найденные ссылки, а к опубликованным добавить флаг "опубликовано".
    Ответ написан
    Комментировать
  • Как написать такую функцию PHP?

    Stalker_RED
    @Stalker_RED
    Такое чувство что CURL вообще не срабатывает, просто редиректит на веб сервис и там оставляет.

    А так и есть, вы объявили функцию, но не вызывает ее.
    Еще и редирект header('location ... ') не отправляет POST данные, а просто "редиректит и там оставляет".

    Может можно как-то заставить
    Можно. Начать стоит с описания того, что вы хотите сделать, т.к. по предложенному вами коду можно только догадываться.
    Еще круче было бы начать с чтения первых глав какого-нибудь учебника, но похоже, что вы ищете "короткий путь".

    Еще было бы здорово, если бы вы нашли где у вас лог с ошибками, и посмотрели что там. Там как минимум о неопределенных переменных сообщения должны быть.
    Ответ написан
  • Динамический контент на php + чпу. Как реализовать?

    Stalker_RED
    @Stalker_RED
    Не стоит подключать вот так любые файлы которые указаны в запросе. Злоумышленник может проявить фантазию в запросах.

    Посмотрите как другие делают роутинг
    Ответ написан
    Комментировать
  • Возможен ли синхронный запуск скрипта?

    Stalker_RED
    @Stalker_RED
    Если хотите самодельное решение:
    1. Создается очередь (список) заданий в базе данных, например.
    2. Запускается супервизор (надсмотрщик) смотрит в эту очередь, проверяет какой статус у заданий.
    Статусы могут быть такими: "готово", "новое", "в процессе (pid, time)". Можно своих еще добавить.
    Супервизор смотрит сколько заданий "в процессе" и проверяет их - если процесс с таким pid отсутствует или висит слишком давно - его можно перезапустить.
    Если есть еще свободные слоты для запуска новых воркеров, супервизор запускает их используя fork, например.
    3. Воркер берет новое задание, пишет туда свой pid и время запуска и пытается его выполнить. Если всё получилось - отмечает как "готово" и завершается.

    Если самоделка не нужна, используйте gearman, например.
    Ответ написан
    Комментировать
  • Как работать с PHPmailer?

    Stalker_RED
    @Stalker_RED
    Если вы думаете, что письма на gmail не приходили из-за неправильных настроек - это не совсем так.
    Когда-то давно, когда деревья были большими а интернет маленьким, письма могли отсылаться кем угодно и кому угодно. А сейчас многие почтовые сервера хотят от отправителя всяких цифровых подписей и сертификатов - они так со спамом борются.

    Так что нужен либо корректно настроенный smtp сервер со всеми подписями и печатями на хвосте или обращайтесь к админу этого "дефолтного сервера", с вопросом "почему у меня не ходят письма на gmail.com".
    Ответ написан
    Комментировать
  • PHP: что быстрее — массивы или объекты?

    Stalker_RED
    @Stalker_RED
    По производительности таких сравнений не припомню, но есть по памяти:
    https://habrahabr.ru/post/161629/
    https://habrahabr.ru/post/141093/

    А вообще, помогут только тесты, причем в вашем окружении и на ваших данных.

    Попробуйте посмотреть на это всё профайлером, поискать узкие места. Попробуйте акселераторы, php 7, hhvm.
    Можно ли распараллелить обработку?
    Может стоит вообще всё выбросить и написать демон на си, или как сейчас модно, на го, например?
    Ответ написан
    Комментировать
  • Как сделать вывод цифр в data-content вида 1 2 3 4?

    Stalker_RED
    @Stalker_RED
    for ($i = 1; $i < 4; $i++ ) {
        echo "<div class=\"custom-list\" data-content=\"$i\"><h3>Заголовок $i</h3></div>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";
    }


    Но когда вы созреете, чтобы выводить реальные данные вместо "рыбы", лучше использовать foreach
    Ответ написан
  • Как сделать сквозную авторизацию на intranet сайте?

    Stalker_RED
    @Stalker_RED
    Можно прикрутить на сервере ntlm авторизацию, как в squid. А сильно попроще, боюсь, не получится.
    Ответ написан