Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Где хранятся задания cron?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У тебя вопрос по панели управления для клиентов системы "Йа с понтом хостер-криворучко". Cpanel и вот это вот всё.

    К тегу unix оно не имеет ни малейшего отношения.
    потому что в юникс можно написать
    crontab список_заданий.txt
    и все загрузить.
    А куда грузить в твоей панели - надо спрашивать пользователей панели, а не юникса.

    Впрочем, в любом случае если у тебя там " много однотипных cron-задач", то ты все делаешь неправильно.
    Ответ написан
  • Форма отправки данных, В чем проблема?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Аналогичный случай был в Одессе
    Ответ написан
    Комментировать
  • Куда PDO пишет ошибки если нет try / catch?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никакой обработчик писать не надо.
    Порождается стандартная Fatal error, которая должна содержать текст ошибки.
    То есть, PDO дальше становится не при чем, и ошибка обрабатывается так же, как и все остальные. То есть, куда по умолчанию выводит ошибки РНР - туда и выведется.

    Проблема, как я понимаю, в отсутствии текста ошибки. Я бы грешил на xdebug и для начала попробовал бы без него.
    Ответ написан
    Комментировать
  • Как извлечь из MySQL данные по нескольким критериям силами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Следует понимать, что EAV - не панацея, а несколько наоборот - постоянная боль пониже спины.
    Во-первых, если в реляционной модели за целостностью данных может следить СУБД, то здесь вся работа ложится на программиста.
    А уж получив в том же EAV хотя бы пару-тройку уровней вложенности, можно начинать заранее строить себе стену, об которую потом захочется убиться.

    А во-вторых, проблему поиска EAV не решает от слова "совсем". Искать надо другими средствами, например - сфинксом.
    И вот тут на первый план выходит не удобство хранения, а удобство построения RT индекса. От которого и надо плясать.
    Ответ написан
    Комментировать
  • Зачем нужны отдельные классы для работы с БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле это интересный вопрос. А, точнее, два: зачем нужен такой класс, и зачем их пишут.
    Ответ на первый становится очевиден, когда начинаешь не смотреть на код, а писать его ;)
    Практически все библиотеки, представленные в РНР, представляют в пользование программиста довольно низкоуровневые функции, которые позволяют, с одной стороны, довольно гибко управлять процессом, но с другой - делают этот процесс ну очень многословным. Самый яркий пример - CURL. Никто, находясь в здравом уме, не будет писать все время эти бесконечные curlopt. Надо пилить библиотеку, которая реализует стандартные методы пост, гет за один вызов, и только для исключительных случаев позволяет задать кастомные параметры.

    То же самое касается и работы с БД. К примеру, очень часто нам бывает нужно получить из БД массив. Сколько строк нужно написать для этого? Классическим говнокодом - 5:
    $ret = array();
    $res = mysql_query();
    while ($row = mysql_fetch_assoc($res)) {
        $ret[] = $row;
    }

    И такой код надо написать раз 15-20 за приложение. У программиста сразу руки зачешутся уничтожить этот повторяющийся код и написать функцию, которой передаешь запрос, а получаешь массив. За 1 вызов. Вот для этого библиотеки и пишут.

    Но в здесь мы подходим ко второй причине. Дело в том, что "классический говнокод" из видеоуроков всегда очень упрощен. Авторы видеоуроков не знают, что для работы с БД надо делать миллион дополнительных действий - от обработки ошибок до защиты от инъекций. И если все эти действия выполнять вручную, то времени больше ни на что не останется - придется снова и снова переписывать одни и те же тонны кода для каждого запроса.

    Возьмем для примера код примера из мануала. Даже выкинув из него очевидные глупости, мы получаем пол-дюжины строк кода. Это на ОДИН запрос.
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($district);
        $stmt->fetch();
    }

    И это все - чтобы получить единственную строчку!

    В то время как с помощью (нормальной) библиотеки вся работа с БД сведется к 1 (одной) строчке, а все необходимые телодвижения будут выполнены библиотекой автоматически:
    $distr = $db->getOne("SELECT District FROM City WHERE Name=?", $city);

    Теперь перейдем ко второму вопрос - зачем их пишут.
    Самый основной мотив - "шоб було!" "У всех есть - значит, и у меня будет!". При этом, подходя к написанию библиотеки, новички наступают на одни и те же грабли.
    Чаще всего, из-за недостатка опыта авторов, код сокращается только для самых примитивных запросов. Но при этом работа с нестандартными запросами превращается в ад. Но самое ужасное - практически никогда такие самописные библиотеки не поддерживают работу с подготовленными выражениями. А это должно быть их главной фичей, без которых ценность сразу стремится к нулю. А точнее, даже к минусу, потому что инъекции. Ну и по мелочи: к примеру, если в коде действительно написано $db->FetchArray(); - то это ужас, летящий на крыльях ночи, потраченной на отлов неочевидных ошибок .
    Ответ написан
  • Как подключить файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Что такое " базовое подключение файлов" и как конкретно оно "не работает"?
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. ты пытаешься обратиться к несуществующей переменной.
    2. http_build_query()
    Ответ написан
    Комментировать
  • Можно ли подключить внешний файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    можно, если в file.php прописаны полные урлы к css и js
    и РНР позволяет читать урлы.
    урл, разумеется, должен быть полным, а вот include использовать нежелательно. лучше readfile().

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

    В любом случае, скорее всего ты просто выдумал от неграмотности какого-то монстра, и все делается гроаздо проще.
    Ответ написан
    2 комментария
  • Почему не работает энтер?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    - Алло!!! Полиция??? Срочно пришлите наряд. У меня украли!!!
    - Что украли? Говорите толком.
    - Из машины! Все украли! Руль, приборную доску, все рычаги и педали!!!
    ...через пять минут...
    - Алло! Полиция? Отмените пожалуйста вызов... Я на заднее сидение сел…
    Ответ написан
    1 комментарий
  • Как правильно принять информацию от сервера?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У меня на ум приходит только написать пхп функцию, которая бы парсила ссылку:

    $year = file_get_contents('http://domain.com/text.php?n=1');

    Пиши-пиши, писатель.

    Ну или padded JSON сразу с клиента, если у тебя доступ к этому серверу есть.
    Ответ написан
    1 комментарий
  • Понять принцип работы обьектов в php на примере?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "Вообщем" учить ООП надо года 2-3 чтобы начало получаться что-то стоящее.
    И в двух строчках тебе на тостере этого не расскажут.

    Покупай учебники, читай. Это единственный вариант, если профильного образования нету.
    Ответ написан
  • Как закрыть от просмотра ini файлы на сайте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Апач стоит не везде.
    2. Всю внутреннюю кухню надо класть выше веб-рута.
    3. по поводу локализации и вовсе париться не нужно - она никому не нужна
    Ответ написан
    1 комментарий
  • В чем ошибка php кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Переписываем на PDO и выкидываем ненужный код.
    if (isset($_POST['edit'])) {
        db_connect();
        $query = "UPDATE `Processors` SET Price=?, Article=? WHERE ID=?";
        $data = array($_POST['price'], $_POST['article'], $_GET['edit_id']);
        $db->prepare($query)->execute($data);
        header("location: edit.php?edit_id=".$_GET['edit_id']);
    }

    Что писать в db_connect смотрим здесь

    2. проверяем, передаем ли из формы edit_id
    Ответ написан
    4 комментария
  • Error 1064 (DB1) ,что это значит?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это значит, что при работе с БД из РНР надо либо работать через ORM, либо добавлять данные в запрос только через плейсхолдеры, для чего использовать PDO.
    Ответ написан
    Комментировать
  • Как оптимизировать код?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    совершенно адский вопрос, я бы такие удалял.
    Один заголовок чего стоит. "Помогите оптимизировать расходы, дайте 5000 рублей!"

    Ну и код, конечно.
    while($line = fgets($stream)) {
        flush();
        $result = array(
            'console' => $line,
        );
        exit( json_encode($result) );
    }

    А попробуй-ка сам посмотреть на этот код, и сказать, что в нем неправильно. Не бойся, это не так сложно, как тебе кажется.
    Ответ написан
  • Как получить все значения из массива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ты выводишь ключи не того массива.
    Запомни простое правило: если какая-то функция РНР работает неправильно, то бегом проверяй свои данные, которые ей подсовываешь.
    Ответ написан
  • Как в foreach присвоить значения первым трем элементам?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если у нас, есть два класса, один для нормальных строк и один для первых трех, то если назвать их
    class и class1 можно записать чуть короче:
    <? foreach ($colors as $i => $item): ?>	
      <img rel="<?=$item['id']?>" src="/<?=$item['image_path']?>" class="class<?=($i < 3)?>" />
    <? endforeach ?>


    Но вообще отслеживать такие вещи ПХП-кодом - это заведомо ад.
    А тебе нужно вот это: css-tricks.com/useful-nth-child-recipies
    Ответ написан
    Комментировать
  • Как верно, как нужно, где можно посмотреть примеры как выводить данные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Массив - это самый распространенный подход.
    Ответ написан
    Комментировать
  • Как использовать SQL-запросы в JavaScript?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здравствуйте. Подскажите, можно ли использовать газовую горелку, чтобы получить доступ к носоглотке через нижнюю часть спины, минуя ротовое отверстие? Как должна проводиться такая операция?
    Насколько это безопасно, если возможно? Я читал, что в этом случае пациент может обуглиться и откинуть копыта.

    P.S. На текущий момент необходимо вырезать гланды.
    Ответ написан
    Комментировать
  • Как отправить JSON на сервер c помощью PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если это локальный сервис, то почему бы не вывести отладочную информацию?
    Не беспомощно разводить руками, "не присылает ничего", а сделать так, чтобы присылало. или логировало - запрос, заголовки, чекпойнты.
    Ответ написан