Задать вопрос
Ответы пользователя по тегу PHP
  • Как в Битриксе настроить редирект ссылок без слеша в конце на с ним?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    Владислав Старцев,
    уже много раз вижу такую шляпу
    кто вообще придумал этот редирект ?
    RewriteCond %{REQUEST_URI} !\?
    ? - не может физически быть в %{REQUEST_URI} поскольку не является частью урла
    собственно как и RewriteCond %{REQUEST_URI} !\&
    & - выделяется через RewriteCond %{QUERY_STRING}
    По факту все что тут работает
    RewriteCond %{REQUEST_URI} !\=
    Если не =, но простите а причем тут равно ? Скорее всего тот "мастер" что придумал сей редирект думал о GET параметрах, но они как я и говорил выше не попадают в REQUEST_URI
    Если не точка, а простите причем тут точка ?
    И того 2 условия в принципе не выполнимы
    2 из них идиотские и не удовлетворяют тз

    Все что остается это предпоследнее не слеш в конце
    И сам реврайт рул.
    То есть из всего правила работает 10% остальные 90% это мусор идиота

    Теперь разберемся
    Как бы это должно было быть на самом деле
    Тут все сложнее поскольку есть пара условий в которых нельзя убирать слеш.
    RewriteCond %{REQUEST_URI} \..+$
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]
       # Исключить слеш.


    Оданко не все так просто, сематнически правильно именно закрывать слешем
    НА СЕО не влияет ни то ни то, это 100% инфа, влияет отсутствие редиректов с одного на другое что может дать два урла.
    НО какой именно урл со слешем или нет, не влияет!

    НО семантически URL должне быть закрыт
    однако слеш после имени файла дает 404, если это просто файл.
    Так что нам нужно разделить реальные файлы и урлы созданые ЧПУ

    добавив вот такое правило.
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteCond %{REQUEST_URI} ^(.+)$
     # В URL есть хоть один символы
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.


    И того сразу два правила, притом именно в такой последовательности должны быть в .htccess
    за врея работы я видил много горе СЕО специалистов рекоменующие вот такие шляпы, да и редиректы 90% которого не может сработать физически.
    так же часто видил удаление аперкейсов в урлах ( чего разумеется тоже делать нельзя)
    редиректы на хтмл мативируя тем что гугл думает что это статика и лучше их валидирует и тд и тп.
    Все это лечится одним, удалением этого сотрудника и наемом более квалифицированного сеошника, а не плавающего товарищя в анабиозе.
    Ответ написан
    6 комментариев
  • Как установить PHP 5.4 CentOS 7?

    shambler81
    @shambler81 Куратор тега Linux
    репозиториев нет ставь с тарболов в режиме php+fpm это сделать проще всего
    Вот так я ставил на дебиане, подправить нужно с учетом центоса.
    apt-get install -y libxslt-dev libcurl4-gnutls-dev libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libxml2-dev zlib1g-dev libcurl4-gnutls-dev libjpeg-turbo8-dev libbz2-dev libjpeg-dev libfreetype6-dev libmcrypt-dev libcurl4-gnutls-dev
    apt-get install -y libpq-dev
    cd /usr/include
    cd /usr/local/include
    sudo ln -s /usr/include/x86_64-linux-gnu/curl curl
    mkdir /opt/php5.4.45
    mkdir /usr/local/src/php5
    cd /usr/local/src/php5
    wget http://de2.php.net/get/php-5.4.45.tar.gz/from/this/mirror
    mv mirror php-5.4.45.tar.gz
    tar -xzvf php-5.4.45.tar.gz
    cd php-5.4.45
    
    
    ./configure \
    --prefix=/opt/php5.4.45 \
    --with-pdo-pgsql \
    --with-zlib-dir \
    -with-freetype \
    --enable-mbstring \
    --with-libxml-dir=/usr \
    --enable-soap \
    --enable-calendar \
    --with-curl \
    --with-mcrypt \
    --with-zlib \
    --with-gd \
    --with-pgsql \
    --disable-rpath \
    --enable-inline-optimization \
    --with-bz2 \
    --with-zlib \
    --enable-sockets \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-pcntl \
    --enable-mbregex \
    --with-mhash \
    --enable-zip \
    --with-pcre-regex \
    --with-mysql \
    --with-pdo-mysql \
    --with-mysqli \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --enable-gd-native-ttf \
    --with-fpm-user=www-data \
    --with-fpm-group=www-data \
    --with-libdir=/lib/x86_64-linux-gnu \
    --enable-ftp \
    --with-kerberos \
    --with-gettext \
    --enable-fpm
    
    make
    make install
    
    cp /usr/local/src/php5/php-5.4.45/php.ini-production /opt/php5.4.45/lib/php.ini
    cp /opt/php5.4.45/etc/php-fpm.conf.default /opt/php5.4.45/etc/php-fpm.conf
    
    
    sed -i 's/listen = 127.0.0.1:9000/listen = 127.0.0.1:8998/g' /opt/php5.4.45/etc/php-fpm.conf
    sed -i 's/\x3Bpid = run\/php-fpm.pid/pid = run\/php-fpm.pid/g' /opt/php5.4.45/etc/php-fpm.conf
    echo "include=/opt/php5.4.45/etc/pool.d/*.conf" >> /opt/php5.4.45/etc/php-fpm.conf
    
    mkdir /opt/php5.4.45/etc/pool.d
    vim /etc/init.d/php5.4.45-fpm  # вставляем конфиг, и правим версию пхп https://www.howtoforge.com/how-to-use-multiple-php-versions-php-fpm-and-fastcgi-with-ispconfig-3-ubuntu-12.10-p3
    chmod 755 /etc/init.d/php5.4.45-fpm
    #заменяем актуальной версией php,  плс название в общем стиле а не как по ману
    sed -i 's/php\-5\.4\.12/php5.4.45/g' /etc/init.d/php5.4.45-fpm
    
    update-rc.d php5.4.45-fpm defaults 
    /etc/init.d/php5.4.45-fpm start
    update-rc.d php7.3-fpm defaults
    apt-get install libmemcached-dev
    
    # исправит проблему подключения по loalhost поскольку в  стандартных php.ini она вообще не обьявлена
    echo "mysqli.default_socket = /var/run/mysqld/mysqld.sock" >> /opt/php5.4.45/lib/php.ini
    echo "mysqli.default_socket = /var/run/mysqld/mysqld.sock" >> /opt/php5.4.45/lib/php.ini
    /etc/init.d/php5.4.45-fpm restart
    /etc/init.d/apache2 restart
    Ответ написан
    Комментировать
  • Как обратиться к локальному серверу извне?

    для обращения вам нужно
    1. выяснить к какому демоны или сервису вы пытаетесь подключиться
    2. какие порты должны быть открыты для этого деомна,сервиса.
    3.Открыть их в фаерволе на самом ПК
    4. на вашем роутере перенаправить внешние порты на этот компьютер
    там должен быть порт форвардинг или что то подобное
    в параметрах там будет что-то вроде
    Название
    порт внешний
    порт внутренний
    Айпи компьютера внутри вашей сети кому отдать внешний порт

    что-то вроде такого
    RDP 3389 - 3389 192.168.0.2
    Тогда ваш роутер отдаст этот порт компьютеру внутри вашей сети.
    И если подключитья к вашему айпи выданому провайдером то роутер перенаправит на нужный порт нужной машины в вашей сети.
    6093c16823023094617368.png
    Ответ написан
    Комментировать
  • Какая сейчас актуальна бесплатная конфигурация VDS-сервера для совместимого набора максимально свежих PHP + MySQL + панель управления хостом?

    shambler81
    @shambler81 Куратор тега Linux
    vestacp - ставится в 1 клик
    braynycp - большой ставится в 1 клик умеет очень много но немного дебильный интерфейс в 1 клик
    ispconfig3 - удобно красиво функционально но все точится напильником, для обучения само то и для опытных тоже.
    автоинстала официального нет а тот что есть нужно перепиливать.
    что делать писал тут
    https://klondike-studio.ru/blog/ispconfig3-nginx-a...
    bitrix vm ( нет днс сервера, почтовый внешний админка консольная но удобная)
    Ответ написан
  • Как запустить файл PHP в ispManager?

    не забывайте что виды представления пхп в консоли может отличаться от того что есть на сайте
    переменые пхп да и собственно даже версия пхп
    так что лучше всего запускать вот так
    wget -q --spider http://www.example.com/cronit.php
    или
    wget -O /dev/null http://www.example.com/cronit.php

    ну или через курл.
    /usr/bin/curl -s http://yourserver.com/controller >> /path/to/file.log

    так вы 100% будете запускать то что вам нужно с теми переменными средами что на самом сайте.
    Ответ написан
  • Как настроить чпу в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    в .htacess ты добавляешь только редирект на php файл который рулит всем этим делом. Сама магия происходит в php
    вот тут сразу с верху разобрано все
    https://g.zeos.in/?q=%D1%87%D0%BF%D1%83%20php
    Ответ написан
    Комментировать
  • Как в nginx запретить прямой доступ к файлу?

    https://sysadmin.pm/referrer-spam-nginx/
    смотри пример с valid_referers.
    Ответ написан
    Комментировать
  • Как написать редирект?

    Ох ванную похоже товарищ имеет в виду что он хочет запилить ЧПУ однако ;)
    blog.ox2.ru/php/hpu
    Ответ написан
  • Какие права дать для пользователя Apache www-data?

    shambler81
    @shambler81 Куратор тега Linux
    chown -R www-data:www-data /var/www/site.ru
    но лучше всего делать следующий вариант
    запускать для каждого сайта апачь под своими юзерами
    тут все зависит от мода представления пхп
    Ответ написан
  • Nginx proxypass cache и php, как правильно настроить?

    shambler81
    @shambler81 Куратор тега Linux
    в 99% случае было бы целесообразнй поработаь с кодом самого сайта это факт, улучшить систему кеширования переделать самые тяжелые запросы как правило при разрастание проекта такое не редко, и тут добиться производительности можно куда быстрей чем через костыли.
    так же не забывайте что если часть сайта не хотите кешировать то сделайте отдельный локейшен под эхто мероприятие.
    Так же есть особые рекомендации в индивидуальном порядке каждому движку.
    Так же не забывайте что даже смена версии пхп может сильно улучшить ситуацию опять же нужно смотреть что у вас, если вы на 5.6 то точно 100% да
    и даже если на 7.0
    не забывайте что так же у вас должен быть подключен opcache и качественно отстроены конфиги apache nginx и mysql это вам тоже должно дтаь отличный буст.
    до 50К посетителей сайт должен справляться на одном сервере без костылей.
    так что больше вводных
    какие версии че за по сслку на сайт ( это не сеерет, вы еще и за директ платите чтоб я ее узнал)
    Ответ написан
    Комментировать
  • Из-за чего скачки времени обработки запросов?

    1. iotop -okaво время таких фризов
    2. переведите режим работы процессоров с энерджи сейв в перфоманс cat /proc/cpuinfo | grep MHz все процессоры должны иметь или максимальную частоту или близкую к ней.
    Когда процессор "холодный" то ему нужно время поднять частоту, и получается что он быстрей иногда отрабатывает под нагрузкой чем полностью пустой но с 800MHz
    3. не забывайте что php+sql один и тот же запрос могут выполнить с разной скоростью, притом эта разница нифига не в 1% а порой доходит до 300% и усугубляется очередью как в sql так и на любом этапе.
    4. Могу вам сказать что по факут является самым распространенным

    а) i-o диска особенно HDD ( nvme) можно даже не тестировать.
    б) sql параллелит свои запросы но один запрос делает на 1 ядре, в результате 128 ядерный камень по 2Ghz может работать медленней вашего офисного Corei3 поскольку такт на ядро у него больше.
    в) кеш php кешируйте все что только можно и грамотно, как правило в этом месте можно ускориться раз в 10-30, даже не оптимизируя запросы в бд
    г) находите самые тяжелые запросы в бд и оптимизируйте их.

    Теперь что скорее всего происходит
    у вас встает очередь запросов в бд, например идет тяжелый хит скажем каталог с 5 фильтрами, в это время остальные запросы встают в очередь, и даже мелкие из них выполняюются медленно поскольку пред ними стоит тяжелый товарищь.
    ТАк вот к примеру когда делается 1 тяжелый запрос встало еще 300, и они вместе начинают лезть и выполняться.
    В результате получается то - же самое что выделить 10000 файлов в винде на hdd и скопировать параллельно а не последовательно
    I-O проседает многократно порой до десятков тыс раз.
    Пример утрированный но тем не менее.
    В результате у вас затык на пустом месте, когда LA системы 5 I-O 10% sql=100% на 1 камне.
    Как правило ситуация дальше осложняется по следующей схеме
    занимаются все камни тяжелыми хитами, тем более с каждым разом это становится легче, поскольку ресурсы других камней уже заняты, в результате раз в день база начинает тормозить, и ее рестартуют по крону.
    ;)))
    Но все индивидуально.
    Ответ написан
    6 комментариев
  • Как изменить URL в адресной строке?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$ /blog/article/$1/? [L,R=301]

    [0-9]{4}- от нуля до 9, 4 раза подряд то есть эквивалент XXXX цифр
    (.*) любое значение собрали в группу 1
    $1 - выводим значение 1 группы
    /? - удаляем гет парметры. - опционально можно не делать
    не забудь включить реврайт энджин он
    Ответ написан
  • Как запретить обращение(скачивание архива) по url?

    shambler81
    @shambler81 Куратор тега htaccess
    полодите архив под .htpass и скачивате его с урлом указав пароль, в таком случае физически файл не возможно будет скачать только со ссылкой логина и пароля.
    это самое простое решение.
    Второе решение это скачивание файла через php генерацию урла.
    Ответ написан
    Комментировать
  • Как изменить чужую картинку с HTTP на HTTPS?

    php proxy на гите дофига примеров
    ну и стрреплейс все ;)
    Ответ написан
  • Почему Апаче скачивает php файлы?

    <IfModule !php5_module> 
        <FilesMatch "\.php$">        
            Order allow,deny
            Deny from all     
        </FilesMatch>
    </IfModule>
    Ответ написан
  • Https заменяется на http после прохода через nginx?

    ТАК НЕЛЬЗЯ ДЕЛАТЬ!
    Какой-то идиот написал ман и все маны в интернете ошибочны ( да оно работает но есть множество но)
    И это связано именно с тем что бэк не знает что он на https, да есть частичные костыли которые решают большинство косяков ( но не все)
    Короче если в кратце
    http -> http
    https -> https
    Подставляете тот же сертификат на бэке
    Падения производительности нет.
    Придумывать велосипед смысла нет, делайте как положено и все будет хорошо
    тот гений что придумал миксовать контент, может и ответит зачем он так придумал но реально от этого решения нет никакой пользы а вот минусы есть
    Ответ написан
  • Как сделать правильно сохранение?

    shambler81
    @shambler81 Автор вопроса
    Все вопрос решил вот так

    if ($array['my_phone'][$row['yandex_building_id']] !== NULL) {
    		 	mysql_query($sql);    
    }
    Ответ написан
    Комментировать
  • В каких таблицах хранятся в битрикс изображения у товаров?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    Вы документацию битрикс читали?
    Обращение к изображениям по средствам АПИ
    Не придумывайте велосипед, тем более на ровном месте
    Ответ написан
    Комментировать