Ответы пользователя по тегу PHP
  • Как сделать фото с веб камеры и отослать в форме php?

    @antonowano
    Профессиональный самоучка
    https://codepen.io/anon/pen/RmmNqR?editors=0010
    был вопрос на stackoverflow, как передать canvas на сервер, подробнее тут:
    https://stackoverflow.com/questions/13198131/how-t...
    Ответ написан
    Комментировать
  • Как сделать редирект php?

    @antonowano
    Профессиональный самоучка
    при нажатии на кнопку чтоб через 5 секунд произошел редирект

    PHP такого не умеет, он не знает что такое кнопки. PHP работает только тогда, когда ваша страница загружается.
    А с уже загруженными элементами страницы работает JavaScript.

    <button onclick="setTimeout('window.location = \'http://google.ru\'', 5000)">Перейти на Google!</button>

    или
    <button id="btn_go">Перейти на Google!</button>
    <script>
    document.getElementById('btn_go').onclick = function() {
        setTimeout(function() {
            window.location = 'http://google.ru';
        }, 5000);
    };
    </script>


    Если для вас принципиально на PHP, то сначала нужно выполнить переход к другой странице на которой пока PHP работает происходит задержка на 5 сек, а уже потом редирект.
    <a href="redirect.php?url=google.ru">Кнопка</a>
    redirect.php
    sleep(5);
    header('Location: http://' . $_GET['url']);
    Ответ написан
    9 комментариев
  • Как составить регулярку чтобы вырезало из URL http://?

    @antonowano
    Профессиональный самоучка
    preg_replace('/^(https?:\/\/)www\./i', '$1', $url)
    Ответ написан
  • Как в php добавить метод к объекту динамически?

    @antonowano
    Профессиональный самоучка
    Так никто не делает. Учите ООП. Если вам нужны новые методы в классе, расширьте его с помощью наследования. А так как этот stdClass ничего из себя не представляет, то создайте новый класс пропишите ему нужные методы и по необходимости назначьте __get(), __set() методы для создания новых свойств.
    class MyStdClass extends stdClass {
        public function getTitle() {
            return 'TITLE';
        }
    }
    
    $std = new MyStdClass();
    
    echo $std->getTitle();


    Если вы не можете без этого жить, то это работает вот так:
    echo ($std->getTitle)();
    // или
    $func = $std->getTitle;
    echo $func();
    // а если еще нужен контекст класса
    echo ($std->getTitle)->bindTo($std)();
    Ответ написан
    4 комментария
  • Если в базе пусто то запись не отправляется. PHP?

    @antonowano
    Профессиональный самоучка
    Где-то допущена ошибка. Ваш код тяжело читать поэтому ищите сами.
    Для информации: mysqli_* и mysql_* устаревшие функции. Используйте PDO.
    Ответ написан
    Комментировать
  • Почему не отправляется изображение на почту по phpMailer?

    @antonowano
    Профессиональный самоучка
    Добавьте в функцию sendSMTP параметр array $attachment = array() и передавайте с его помощью пути на файлы, которые нужно прикрепить. Советую вместо временного хранилища использовать место, куда файл был скопирован после закачки, в вашем случае это - $imageFile1.
    Ответ написан
  • Какой раздел php отвечает за привязку к dom event?

    @antonowano
    Профессиональный самоучка
    JavaScript никак не связан с PHP.
    У PHP нет обработки нажатия и остальных событий, таких как в JavaScript.
    PHP только генерирует для вас страницу и не умеет управлять dom уже загруженной страницы.

    Чтобы выполнить операцию на сервере с помощью JavaScript события, вам нужно в самом событии осуществить запрос к серверу с необходимыми параметрами, который вы должны заранее настроить. Запрос осуществляется с помощью AJAX или redirect'ом.

    document.getElementById("id").onclick = function() {
        $.ajax('/post/add', {
            data: { name: '', description: '' },
            success: function() { alert('Пост опубликован!'); }
        });
    };


    $.ajax - функция из jQuery библиотеки (распространенная библиотека для простой работы с JavaScript).
    Ответ написан
    3 комментария
  • Как правильно построить роутер php?

    @antonowano
    Профессиональный самоучка
    В .htaccess
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [L]
    Ответ написан
    3 комментария
  • Как упростить перепор массива?

    @antonowano
    Профессиональный самоучка
    Вывожу на страницу список из 400 записей. В каждой записи должен быть выпадающий список select (одинаковый, но отличающийся только выбранным элементов в нем).


    Вы можете создать свой select элемент с одним общим списком, для этого нужны хорошие знания JavaScript.

    Есть ли способ как-то иначе отметить нужный элемент внутри выпадающего списка, без перебора массива?


    Что бы не плодить PHP-код создайте функцию, которая принимает первым аргументом все значения select`а, а вторым - какое значение нужно выбрать. И возвращающую html текст тега select.

    function createSelect($items, $value) { /* Код функции */ }
    Ответ написан
  • Как правильно в php получать данные по url?

    @antonowano
    Профессиональный самоучка
    cURL самый гибкий вариант.
    Вся информация о работе с cURL на PHP тут.

    Вот основной пример:
    $file = curl_init('http://simple.ru');
    
    // Настройка cURL до выполнении операции считывания
    curl_setopt($file, CURLOPT_RETURNTRANSFER, true); // устанавливаем true, для получения содержимого в переменную, вместо вывода в браузер
    curl_setopt($file, CURLOPT_HEADER, false); // отключить вывод заголовка в содержимом
    curl_setopt($file, CURLOPT_FOLLOWLOCATION, true); // следовать редиректу, если сервер пытается перенаправить посетителя
    curl_setopt($file, CURLOPT_MAXREDIRS, 5); // максимальное кол-во редиректов
    curl_setopt($file, CURLOPT_USERAGENT,
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36'); // информация о браузере
    curl_setopt($curl, CURLOPT_POST, true); // включаем POST передачу данных
    curl_setopt($curl, CURLOPT_POSTFIELDS, "a=4&b=7"); // указываем POST данные
    
    // Выполнение операции считывания и получение результата
    $data = curl_exec($file); // получаем содержимое (если страница - html-код, если картинка - код картинки и т.п.)
    $code = curl_getinfo($file, CURLINFO_HTTP_CODE); // получаем код ответа сервера (200, 500 и др.)
    $type = curl_getinfo($file, CURLINFO_CONTENT_TYPE); // получает тип передаваемого содержимого (text/html, jpeg/image и др.)
    
    curl_close($file);
    Ответ написан
  • Как эффективно учить 2 языка программирования?

    @antonowano
    Профессиональный самоучка
    Для начала осознайте разницу между Javascript и PHP, а потом приступайте к изучению.
    Вот интересный ресурс по JavaScript.
    По PHP тоже много ресурсов, Google вам в помощь.

    Главное запомните:

    Есть два компьютера:
    Сервер - на котором хранится сайт и все его данные,
    Клиент - компьютер посетителя.
    PHP работает с компьютером-сервером, JavaScript с компьютером посетителя.

    а именно:
    PHP - работает с данными на сервере, генерирует ответ на запрос клиента;
    JavaScript - работает с элементами на странице, добавляя анимацию и события (клик, скрол и т.д.) на разные элементы.
    Ответ написан
    1 комментарий
  • Как найти элемент массива в тексте и удалить по шаблону?

    @antonowano
    Профессиональный самоучка
    Мне не понятен смысл. В исходном варианте удаляются все ссылки из контента, в вашем варианте только перечисленные в $links_mass.
    Да и кстати вы обновляете пост столько раз сколько у вас ссылок, достаточно 1 раз:
    function links_remove () {
        $args = array ('numberposts' => 9999);
        $allposts = get_posts( $args );
    
        foreach( $allposts as $post ) {
            $id = $post->ID;
            $content = $post->post_content;
            $links_mass=array(/*Сотни ссылок через запятую*/);
    
            foreach($links_mass as $link) {
                $pattern = '/<a href="'/.$link./'" (.+?)>|<\/a>/'; /* тут вся проблема*/
                $new_content = preg_replace ($pattern, '', $content);
            }   
            
            $new_post = array();
            $new_post['ID'] = $id;
            $new_post['post_content'] = $new_content;
            wp_update_post( $new_post );
        }
    }


    И саму ссылку нужно привести к строке в регулярном выражении, потому что некоторые символы из ссылки могут быть восприняты как спецсимволы. Не забывайте экранировать ссылки функцией preg_quote()

    Регулярное выражение заданное вами - недостаточно гибкое. Атрибут href может быть не только самым первым атрибутом в теге <a> и после него может отсутствовать пробел.
    Ответ написан
    7 комментариев
  • Как сохранить SVG с картинкой в PNG?

    @antonowano Автор вопроса
    Профессиональный самоучка
    Переписал index.php
    $svg = __DIR__ . '/scheme.svg';
    $svg_blob = file_get_contents($svg);
    $absolute_path = __DIR__;
    
    $svg_blob = preg_replace_callback('/<image xlink:href="([^"]+)"/i', function($match, $a, $b) use ($absolute_path) {
        $path_to_image = $absolute_path . '/' . $match[1];
        $image_base64 = base64_encode(file_get_contents($path_to_image));
        list($w, $h, $type) = getimagesize($path_to_image);
    
        switch ($type) {
            case IMAGETYPE_PNG:
                $type = 'image/png';
                break;
            case IMAGETYPE_JPEG:
                $type = 'image/jpeg';
        }
    
        return "<image xlink:href=\"data:$type;base64,$image_base64\"";
    }, $svg_blob);
    
    $imagic = new Imagick();
    $imagic->readImageBlob($svg_blob);
    $imagic->setImageFormat("png24");
    
    header('Content-Type: image/png');
    echo $imagic;
    
    $imagic->clear();
    $imagic->destroy();
    Ответ написан
    Комментировать
  • Как вырезать картинку из картинки используя координаты полигона в SVG?

    @antonowano Автор вопроса
    Профессиональный самоучка
    Разобрался. Это проще, чем кажется. Вот рабочий скрипт.
    Описываю работу:
    1. Создаю маску. Используя функцию imagefilledpolygon рисую красный полигон на чистом холсте.
    2. Копирую каждый пиксель с исходной картинки, добавляя прозрачность в зависимости от яркости красного цвета на холсте маски. Красный - непрозрачный, белый - прозрачный.
    [3. Вырезаю полученное изображение на отдельный холст, чтобы избавиться от пустых краев картинки]
    Ответ написан
    Комментировать
  • Как проверить XML файл с помощью XMLReader?

    @antonowano Автор вопроса
    Профессиональный самоучка
    Пробовал использовать XSD схему, но тоже при всех попытках получал true.
    Поэтому решил вопрос скачиванием архива на сервер и параллельно проверкой его на правильность.
    private function upload($uri, $temp)
    {
        if (preg_match('/[^\/]+(.(gz)|(bz2))$/i', $uri, $match)) {
            $compress = array(
                '.gz' => 'compress.zlib://',
                '.bz2' => 'compress.bzip2://'
            );
            $source = $compress[ $match[1] ] . $uri;
        } else {
            $source = $uri;
        }
    
        $hR = fopen($source, "r");
        $hW = fopen($temp, "w");
        $part = 0;
    
        while ( ! feof($hR)) {
            $str = fread($hR, 1024);
    
            if ($part == 0 && stripos($str, '<?xml') === false) {
                throw new \Exception('Передаваемый файл не XML.');
            }
    
            fwrite($hW, $str, strlen($str));
            $part++;
        }
    
        fclose($hW);
        fclose($hR);
    }
    Ответ написан
    Комментировать
  • Как к сайту подключить 2 файла css?

    @antonowano
    Профессиональный самоучка
    Задаешь id стилю, который будет меняться:
    <link rel="stylesheet" href="general.css" id="style">

    Для смены выполняешь JavaScript:
    document.getElementById('style').setAttribute('href', 'red.css');
    Ответ написан
  • Как не уронить сайт запуская громадный скрипт в кроне?

    @antonowano Автор вопроса
    Профессиональный самоучка
    Нашел проблему в скрипте. Функция simplexml_load_file съедал всю ОЗУ, записывая в память здоровенный XML, от чего сервер зависал. После переписи скрипта под класс XMLReader, скрипт перестал съедать весь ОЗУ. Сделал как в примере: как использовать XMLReader.
    Спасибо Adamos за подсказку:
    Громадные файлы и SimpleXML, прямо скажем, не созданы друг для друга.

    Для разбора файла использовал XMLReader
    Ответ написан
  • Где лучше всего хранить sql запросы?

    @antonowano
    Профессиональный самоучка
    Используй Doctrine и храни все запросы в репозиториях.
    Ответ написан
    Комментировать
  • Выполнение скрипта после перехода через адресную строку?

    @antonowano
    Профессиональный самоучка
    Это называется ЧПУ. Читай mod_rewrite в доке .htaccess.
    Роутеры для php - Какой PHP маршрутизатор выбрать?
    Ответ написан
    Комментировать
  • Обработчик формы не корректно передает данные из формы. В чем ошибка?

    @antonowano
    Профессиональный самоучка
    В инпуте не хватает атрибутов name и value
    измените
    <input type="checkbox" id="select1">
    на
    <input type="checkbox" id="select1" name="inspection" value="ok">

    а потом в php коде так:
    if ( isset($_POST["inspection"]) ) {
        echo 'Проводить осмотр';
    } else {
        echo 'Не проводить осмотр';
    }
    Ответ написан