• Загрузил на хостинг сайт показывает это?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Если тебе нужен переводчик то тут говорится что ты допустил ошибку и у тебя в браузер уже отправлены заголовки. а следовательно у тебя не может стартовать сессия.
    output started at "/hermes/bosnaweb03b/b201/ipg.ibstorenet/index.php:59"
    Ответ написан
  • Как передать php в шаблон smarty через плагин?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    "но как передать в шаблон переменную с объектом и как построить с ней if-else никак не дойдет."
    Вы пытаетесь сделать ужасную вещь. Вот как более или менее надо.
    <?php
    require_once 'Mobile_Detect.php';
    $detect = new Mobile_Detect;
    $is_mobile = $detect->isMobile();

    И переменную $is_mobile передать в шаблон.
    Ответ написан
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
  • Система бана на MySql, будет ли это работать?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    таблица users поле ban (boolean) при авторизации получаем это поле если TRUE то высылаем. на страницах к которым есть доступ у пользоателей делаем проверку что пользователь авторизировался. Забаненый пользователь не получает авторизации а следовательно находится на сайте как гость.
    Ответ написан
  • Как корректно поставить драйвера на видеокарты в Ubuntu?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Из коробки вы имеете универсальный VESA драйвер который работает и с интелом и нвидией. И "Как бы" объеденяет все видеоустройства в одно.
    После установки драйверов нвидии иксы запускаются уже на драйвере нвидии. Который напроч откажется видеть конкурентную видеокарту потому что не поддерживает ее. Ну и наоборот.
    Вы никак не сможете запустить иксы на двух драйверах одновременно. Надеюсь я смог предать суть.
    Ответ написан
  • Что такое public и почему не работает функция PHP?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    class Person {
    public $isAlive = true;
    public $firstname;
    public $lastname;
    public $age;
    }

    public function __construct(){} - функция за пределами класса не может быть публичной или вообще иметь какой либо модификатор доступа.

    public значит что к этому методу могут обращаться все кому не попадя (echo $teacher->isAlive;). при любом другом модифиаторе доступа такой код вызовет ошибку.
    Ответ написан
  • Фреймворк kohana хороший?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Нужно Понимать что если вы выбираете стороннее по (фреймверк) для своего проекта нужно задумываться о поддержке этого фреймверка в первую очередь. Кохана мертвая. я бы порекомендовал вам изучить несколько фремверков. Yii - для проектов малого и среднего размера. Zend framework - для проектов среднего и огромного маштаба. Причины в поддержке: yii очень популярен и у него хорошая поддержка по крайней мере пока. А зенд делают разработчики php и пока php жив фреймверк не умрет и будет развиваться как минимум разработчиками php.
    Ответ написан
  • Как сделать оповещение на сайте с помощью php + mysql + ajax для большого количества пользователей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Реализация просто ужасная. но если все же нужно то стоит выучить двунаправленные протоколы. через HTTP теоретически и технически ничего хорошего получится не может.

    "на сайте делается запрос аля comet, ожидает ответа, если ответа нет,
    то через 2 минуты делает новый запрос, и все до тех пор, пока цикл php не выдаст ответ."

    Бесполезная трата ресурсов. Если ничего не происходит вы в холостую гоняете циклы. Для справки каждый процесс пхп минимум требует около мегабайта. оперативной памяти (а зачастую больше) Умножте на количество клиентов и вы поймете что отдавать (на вскидку могу сказать что тут будет примерно по 1,4 мб в среднем) около 700 мегабайт оперативной памяти на холостую обработку слишком жирно.

    теперь представим что мы отказались от циклов на сервере давайте запустим цикл на клиенте? А че? просто на джава скрипте каждые 5 секунд отправляем запрос на сервер скрипт обработчик делает запрос на табличку просто на наличие записей с галочкой new. обрабатывается запрос не долго в считаные милисекунды да еще и все-го лишь каждые 5 секунд лепота... Но клиент сволочь! он вздумал средней кнопкой мыши вкладки открывать! Да еще и по 10 штук! да еще и откроет и не закроет и пойдет свою сантабарбару смотреть! Нативный ДДОС самого себя по другому.

    Как бы вы не пытались найти решение. Но самый грамотный и правильный ответ на ваш вопрос - На связке "ajax + mysql + php" реализовать данный функционал технически не возможно ввиду устройства протокола HTTP.
    Ответ написан
  • Как вывести данные в цикле из mysql?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Укажу старый добрый метод mysql для простоты. А вообще начни не с практики а с мануала php.net/manual/ прочитай минимум один раз а потом уже задавай вопросы. ну или хотябы почитай про массивы.
    $content = array();
    
    while ( $res = mysql_fetch_assoc( $query_result ) )
    {
        $content[] = $res;
    }
    
    print_r($content);
    Ответ написан
  • Проблема с cookie?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Для ответа не хватает данных. каким образом вы храните данные о авторизации? Если в сессии. то куки не исчезают, просто может протухнуть сессия. То есть первый браузер отправляет идентификатор сессии от которой уже отвязана авторизация для пользователя (либо после выполнения манипуляций с хранением авторизации старая сессия убивается вовсе).

    Собственно текущий ответ как и дальнейшие рассуждения это гадание на кофейной гуще. Дополните исходную задачу описанием механизма авторизации.
    Ответ написан
  • Как получить файл или класс в котором произошло исключение в php?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    php.net/manual/ru/function.set-error-handler.php Это может помочь хотя точно сказать не могу.
    try catch для того и создан чтобы отлавливать заведомо возможные ошибки.
    __FILE__ , __LINE__ - Волшебные константы тоже могут помочь.
    Ответ написан
  • Как обновить php код через git используя php?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Нужен как минимум один сервер с гитом. на гитхабе для проекта устанавливаешь вебхук который будет отправлять по указанному адресу Http запрос с информацией о комите в ветку. каждом комите каждой ветки проекта если быть точным. в скрипте приемнике отсеиваешь нужную ветку получаешь список измененных файлов и их льешь на другие по фтп например.
    Ответ написан
  • Как сгруппировать массив дат по заданному интервалу?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Твой массив это $dates Работать будет только при правильной сортировке.

    $ndates = array();
    foreach ( $dates as $key => $date )
    {
    	$ndates[$key] = strtotime($date) - (15*60*60);
    }
    
    $filtered_dates = array();
    foreach ( $ndates as $key => $timestamp )
    {
    	$day = (int) date('d', $timestamp);
    	$filtered_dates[$day][] = $key;
    }
    
    $grouped = array();
    $group = 0;
    foreach ($filtered_dates as $groups) {
    	foreach ($groups as $id){
    		$grouped[$group][] = $dates[$id];
    	}
    	$group++;
    }
    
    var_dump($grouped);
    Ответ написан
  • Как отправить выбранную картинку из поля file в php обработчик через ajax?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    id="myForm" $("form") - не порядок ко всем формам вязать, лучше так: $("#myForm").
    serialize() не подходит для форм с файлами и аяксом. Посмотрите в сторону FormData() работает только в "новых" бразерах вроде. А вообще основная проблема в serialize(), дальше сами.
    Ответ написан
  • Какие нужны минимальные знания php для того, чтоб приступить к изучению php-фреймворков?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Самый крутой и быстрый способ найти себе опытного учителя.

    А перечень знаний необходимых для начала ( чтобы не вставать на грабли на которые встают большинство неопытных разработчиков ( даже с профильным высшим образованием ) )
    1. Знания о том как работает компьютер. ( в частности файловая система, большим плюсом будет понимание файловой системы операционных систем Linux ). притом не важно на windows ты будешь работать или на линукс
    2. Работа сети : Что такое ип адрес, порт, протокол HTTP (и как он работает в плане отправки, приема и обработки команд (GET POST PUT) ) и что такое заголовки запроса и ответа (http headers).
    3. Конфигурация HTTP сервера, какие настройки есть и за что они отвечают. хотя бы по документации пробежаться по дефолтным настройкам.
    4. Вот тут можно глянуть на настройки PHP и посмотреть описание дефолтных значений.
    5. Наизусть выучить адрес где можно достать документацию PHP (php.net)
    6. Тут можно начинать смотреть всякие видеокурсы по php (именно по пхп). Хорошо структурированные можно найти у специалиста(specialist.ru) я не знаю законно ли выкладываются в интернете лекции с веб обучения но можно всегда записаться на онлайн курсы. Гарантия что получишь полные и структурированные знания. Плюс в интернете много бесплатных сейчас можно найти, не то что в мое время. Только учти что с одного курса от одного человека ты не научишься лучше посмотреть 3 и больше разных. И копишь опыт.

    Учить программирование на PHP это как учится ездить на велосипеде пока не набьешь шишек не научишься. Будешь придерживаться этого списка будешь учится быстро и если что-то поломается, а я тебе даю 100% что что-то будет не так. Будешь находить и решать проблемы быстрее.

    Забегая вперед, если страница в "кракозябрах" 2 возможные проблемы с кодировками - сам файл в кодировке отличной от той что приходит в заголовках ответа либо наоборот заголовок ответа отличный кодировки файла. при соединении с базой данных неправильно передана команда "SET NAMES".
    Ответ написан
  • Таблица отношений пользователей. Как правильно?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Правильная таблица отношений:
    Отмечу на всякий случай никаких id(самих записей) не должно быть! все выборки по ключам приведенным ниже
    user_id|friend_id|relation_id|date(timestamp)
    222|444|1|ts
    444|222|2(не просто дружит а например встречается, женат, и т.п. для каждого случая свой уникальный id)|ts

    первичный ключ составной (user_id,relation_id)
    дополнительный ключ (friend_id, relation_id)

    если кидают заявку создается 1 запись user_id>friend_id>0

    проверка на поступившие заявки friend_id(current_user_id) | relation_id = 0

    подтверждение: (должна быть транзакция!) то есть если отвалится один из запросов нужно вернуть все как было.
    на MyISAM ручками(средствами PHP проверяем). На innodb делаем транзакцию средствами БД.
    вписываем строчку с подтверждением курент_юзер > фриенд_ид > relid - 1 и обновляем основную заявку до единицы. Повторюсь если одна из команд не пройдет надо все откатить.

    если отказ то удаляем основную заявку из базы.

    по поводу дополнительных отношений:
    кинуть заявку можно только пользователю у которого взаимно стоит 1 и проверка собственно на заявки
    friend_id(current_user_id) | relation_id >(больше) 1.
    Остальной алгоритм тот же. одновременно у 1 пользователя может быть только одна запись с отношением больше 1 (желательно, это как индикатор именно личного отношения, для группировки друзей лучше все же завести отдельное поле)
    Описание с реальной базы данных на 30 миллионов пользователей.
    Ответ написан