Ответы пользователя по тегу PHP
  • Почему после подключения RedBeanPHP перестают работать js?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет.

    RedBeanPHP сам по себе не может влиять на js. Всего скорее, у тебя происходит какая-то ошибка и в конечный html добавляется какой-то код (сообщение об ошибке, или трейс ошибки), который и ломает все.

    Открой конечный код html (Ctrl+U в браузере) и посмотри что выводится в месте подключения redbean. Предполагаю, что там ошибка или код обрывается, это и приводит к проблеме.
    Ответ написан
    Комментировать
  • В каких случаях стоит использовать redbeanphp?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет,

    RedBeanPHP - это ORM которая отличается от всех своих собратьев тем, что может на лету создавать и менять схему базы данных в режиме разработчика. В остальном это обычная ORM-ка, которых сейчас целая куча.

    В 95% фреймворков встроены собственные ORM-ки которые и надо использовать. В остальных 5% можно использовать все что угодно, хоть голый mysqli, хоть PDO, хоть ReadBeanPHP, главное чтобы тебе было комфортно. Я, например, когда надо что-то накидать "на коленке" использую Idiorm или Paris, удобнее чем PDO напрямую, покрывает 99% потребностей, легко читается, легко переписывается на что-то другое.
    Ответ написан
    Комментировать
  • Как через curl передать дополнительные параметры следующего вида?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет

    Я думаю ты ищешь функцию http_build_query

    $url = 'https://site.com/?'
              .http_build_query([
                  'queryString' => [
                      ['name'=>'date', 'value'=>'2019-05-10'],
                      ['name'=>'showAll', 'value'=>true],
                  ],
    ]);
    echo $url;


    если перейти по такому url в $_GET окажется

    Array
    (
        [queryString] => Array
            (
                [0] => Array
                    (
                        [name] => date
                        [value] => 2019-05-10
                    )
                [1] => Array
                    (
                        [name] => showAll
                        [value] => 1
                    )
            )
    )
    Ответ написан
    1 комментарий
  • Как отправлять заголовок и url страницы в форме обратной связи?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    можно добавить в форму любые скрытые поля используя html тег input с типом hidden
    <input type="hidden" name="url" value="тут-url-страницы">
    <input type="hidden" name="form-title" value="тут-название-формы">

    сами поля можно либо заранее заполнить через php, либо отлавливать event у формы "on submit" через js и заполнять их перед отправкой формы
    Ответ написан
    Комментировать
  • Как лучше хранить одно значение, которое может меняться иногда?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет, я бы сделал таблицу общего формата
    settings
    - group (группа настроек, не обязательное поле, но я бы его сразу добавил)
    - var (переменная)
    - val (значение)

    Сейчас у тебя там будет только price 1000 , но со временем заказчик может захотеть скидки по выходным или еще чего-нибудь такого (например менять контакты формы обратной связи). И ты сможешь все эти данные хранить в этой таблице.
    Ответ написан
    2 комментария
  • Почему класс объявляется внутри проверки на существование класса?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Так делают, когда нужно обеспечить поддержку разных версий подключаемых либ. И обеспечить работу там, где нет такого класса.

    Пример:

    В php7 добавилась функция error_clear_last

    Если ты запустишь такой код в php7, то все будет ок
    var_dump(error_get_last());
    error_clear_last();
    var_dump(error_get_last());

    но если в php5 то будет ошибка

    ----

    Теперь другая ситуация, объявляем в php5
    function error_clear_last() {}
    будет все ок, но в PHP7 будет ошибка тк существует уже такая встроенная функция

    ----

    Задача, надо чтобы работало и там и там
    if (!function_exists('error_clear_last')) {
        function error_clear_last() {}
    }

    В итоге, в PHP7 функция уже существует и будет использоваться встроенная, в PHP5 функция не существует и будет использоваться твоя.

    У тебя, тоже самое, только с классами.
    Ответ написан
    1 комментарий
  • Как правильно будет реализовать POST запрос на сайте?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    в стороннем скрипте
    192.168.2.245/?start=true

    в твоем /index.php
    if ($_GET['start'] ?? null) { // выполняем запрос CURL-ом
         ...
        CURLOPT_URL => 'http://192.168.2.245/index.php',
        ...
        CURLOPT_POSTFIELDS => http_build_query(['show_something'=>'1'])
        ...
    }


    но, здается мне ты делаешь что-то как минимум странное, т.к. не понятно зачем вызывать самого себя?
    Ответ написан
  • Как сохранить ассоциативный массив в redis?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    пример отсюда
    $redis->hMSet('user:1', array('name' => 'Joe', 'salary' => 2000));
    Ответ написан
    Комментировать
  • Почему с сайта приходят пустые заявки?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    В указанном куске данных все верно, возможно проблема где-то еще.

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

    Так же попробуй, использовать регулярку, чтоб отсеить любые нежелательные символы
    if (empty($phone) OR !trim($phone)) die();
    if (!preg_match('~^[-+0-9]{8,}$~', trim($phone))) die();

    * от начала до конца строки должны быть только символы -+ или цифра, минимум 8 символов
    Ответ написан
    2 комментария
  • Как отправить файл клиенту на почту?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    В поиске вбей: php отправка письма с вложением. Будет куча примеров.

    Вот один из них
    $path = '/путь/к/папке/с/файлом/';
    $filename = 'file.html';
    
    $file = $path.$filename;
    $content = file_get_contents( $file);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    
    // header
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    
    // message & attachment
    $nmessage = "--".$uid."\r\n";
    $nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $nmessage .= $message."\r\n\r\n";
    $nmessage .= "--".$uid."\r\n";
    $nmessage .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
    $nmessage .= "Content-Transfer-Encoding: base64\r\n";
    $nmessage .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $nmessage .= $content."\r\n\r\n";
    $nmessage .= "--".$uid."--";
    
    if (mail($mailto, $subject, $nmessage, $header)) {
        return true; // Or do something here
    } else {
      return false;
    }


    вот еще один с использованием PHPMailer
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    
    $path = '/путь/к/папке/с/файлом/';
    $filename = 'file.html';
    
    $email = new PHPMailer();
    $email->SetFrom('email@отправителя.com', 'Your Name');
    $email->Subject   = 'Message Subject';
    $email->Body      = $bodytext;
    $email->AddAddress( 'email@получателя.com' );
    
    $email->AddAttachment( $path.$filename , $filename);
    
    return $email->Send();
    Ответ написан
    1 комментарий
  • Парсер Яндекса. Что не так?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Вангую Яндекс умеет ставить куку JavaScript-ом и потом чекать ее наличие. А тк твой curl не выполняет JS то и кука не ставится. Ну, или вариации по типу, JS-ом скрывается это сообщение и происходит дальнейшая загрузка, а тк JS у тебя не выполняется... ну в общем, идея думаю ясна.

    Выход: посмотреть в инструментах разработчика, как происходит загрузка страницы и какие куки устанавливаются после ее открытия. Тот же набор надо воспроизвести в запросе курла.

    Вариант попроще использовать Chrome в Headless режиме, т.е. не эмулировать браузер через курл, а использовать полноценный браузер.
    Ответ написан
    6 комментариев
  • Долгий вывод информации при запросе к mysql?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Особо никак выборку не ускоришь, тк все упирается в чтение данных с диска.

    Не уверен, но думаю надо создать индексы и фильтрацию перенести в MySQL, например, индекс по полю "user_id" и запрос вида
    SELECT * FROM tbl WHERE user_id=$id

    Если такой вариант не подходит и надо ускорить именно MySQL, то при наличии достаточного кол-ва оперативки, можно попробовать создавать MEMORY таблицы, загружать данные туда, а после по ним делать выборки, чтобы увеличить I/O rate

    Другое решение, разумеется, если оно подходит к случаю, это кеширование полученных результатов.
    Ответ написан
    Комментировать
  • Как получить ВСЕ ссылки встречающиеся на сайте с помощью нативного PHP?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Но вот ходить постоянно по всем ссылкам - тяжеловато.

    Параллель запросы, используя multi_curl. Если этого недостаточно, тогда очередь (например RabbitMQ или попроще Gearman) и обрабатывающие ноды.

    Их потенциально может быть миллионы, если это новостной сайт.

    Да, может быть. Поэтому тебе надо какая-то таблица, примерно в таком формате
    id - int
    url - text
    url_hash - char(32), unique
    parsed - tinyint
    в которой будешь хранить все url и их статус парсинга, за уникальность будет отвечать url_hash = md5(url)

    Также не совсем понимаю, как проверять что это ссылка этого домена? Вечно проверять host через parse_url? А если путь без домена в статье?

    Если путь без домена, то и проверять не надо, ссылка принадлежит этому домену
    Ответ написан
    Комментировать
  • Как найти разницу в дате?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    echo 'Timestamp: '.strtotime('2019-02-06T18:00:00+03:00');
    echo 'Текущий timestamp: '.time();
    echo 'Разница, секунд: '. (time() - strtotime('2019-02-06T18:00:00+03:00'));


    timestamp = время в секундах прошедшее с 1 янв 1970
    Ответ написан
    Комментировать
  • Как вернуть массив с наименьшим значением?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    <?php
    $arr = [
            [
                "window" => 01,
                "services" => "Asd",
                "clients_count" => 4
            ],
            [
                "window" => 02,
                "services" => "Asd",
                "clients_count" => 3
            ]
        ];
    
    usort($arr, function($a, $b){
        return $a['clients_count'] > $b['clients_count'];
    });
    
    print_r($arr[0]);


    Array ( [window] => 2 [services] => Asd [clients_count] => 3 )
    Ответ написан
    Комментировать
  • Как делать редирект в зависимости от часового пояса?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    в js ставишь куку или передаешь в запросе тайм зону, через Date.getTimezoneOffset

    В PHP анализируешь переданное значение и делаешь редирект
    Ответ написан
    Комментировать
  • Что не так с SQL запросом?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    запятых не хватает
    e_mail = '$e_mail' phone_number = '$phone_number' region

    должно быть
    e_mail = '$e_mail', phone_number = '$phone_number', region


    и советую почитать про sql инъекции и mysqli prepare

    327_v1.png
    Ответ написан
    1 комментарий
  • Почему не приходит форма на почту?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    mail возвращает false в случае неудачи, т.е. надо так делать
    if (mail($to, $subject, $message, $headers)) {
    echo 'OK';
    } else {
    echo 'NOT OK';
    }


    Проблема может быть так же в том, что сервер в бан-листе или у него не настроен MTA. Т.е. дело может быть и не в PHP. Если скрипт работает, попробуй в консоли отправить письмо и посмотри дойдет оно или нет
    mail -s "Test Subject" user@example.com < /dev/null


    Так же не забудь проверить папку "Спам", зачастую письма прилетают туда
    Ответ написан
    Комментировать
  • Почему php долго выполняется?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Если у тебя нормальное интернет соединение (проверить можно например ping-ом, а так же загрузкой страниц твоего сайта и какого-нибудь другого), то проблема в хостере, возможно перегружен сервер где ты хостишься. Попробуй его сменить, например, можешь погуглить хостеров с бесплатным тестовым периодом.
    Ответ написан
    2 комментария
  • PHPMyAdmin почему не отображаются строки таблицы?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Предполагаю, что PMA не может или не успевает сделать выборку с таким смещением:
    1) Открой код этого фрейма и посмотри на наличие ошибок и html вообще (там может быть что-то типа max execution time reached.. на стороне php, тк выборка через LIMIT, дорогостоящая операция на большом кол-ве данных)
    2) Открой код php файла отвечающего за вывод и посмотри, что там происходит.
    3) попробуй выполнить тот же запрос через выполнение SQL кода

    Так же рекомендую попробовать Adminer, лично мне нравится больше
    Ответ написан
    Комментировать