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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для выполнения JavaScript-кода из файла на вашей странице, его (код из файла) надо подключить в шапке сайта внутри тега head

    https://yandex.ru/search/touch/?text=%D0%BA%D0%B0%...
    Ответ написан
    Комментировать
  • Как мне взять только строку кода с файла?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте функцию file() - она как раз на выходе дает массив строк из которого можно брать только определенные нужные вам строки.
    Ответ написан
    Комментировать
  • Как прошерстать сайт?

    zkrvndm
    @zkrvndm
    Архитектор решений
    обрабатывать за один запрос десятки тысяч страниц одного сайта

    Ну если у вас достаточно денег, чтобы купить десятки тысяч прокси и минимум пару-тройку топовых физических серверов... то почему нет? Ах да, есть совсем маленький нюанс в виде разработки уникального ПО способного работать с такими объемами, но право слово, это будет герунда на фоне трат выше.
    Ответ написан
    7 комментариев
  • Как в mysql сохранить массив BLOB?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Картинки можно хранить в базе в виде текста с кодировкой Base64, но так не стоит делать. Стандартный подход, это хранить картинки в специальном каталоге, а в базе просто держать пути до нужных картинок.
    Ответ написан
    Комментировать
  • Как узнать откуда был отправлен запрос?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Не вижу никаких проблем, просто шифруйте запрос уникальным ключем, который есть только у отправляющей стороны и принимающей.
    Ответ написан
    Комментировать
  • Не приходят данные с POST ajax?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Внутри файла mail.php вы должны не просто принять файл, а записать принятые данные куда-нибудь, чтобы потом их можно было посмотреть. Например, вы можете записывать полученные данные в текстовый файл - для этого разместите внутри mail.php следующее содержимое:
    <?php
    
    header('Access-Control-Allow-Origin: *'); // Разрешаем запросы с любых сайтов
    header('Content-Type: text/plain; charset=utf-8'); // Указываем тип ответа (обычный текст) и кодировку
    
    // На всякий случай включаем отображение ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // В переменную $received пишем нужную нам информацию:
    
    $received = "Последний принятый POST-запрос содержал следующие данные:\n\n" . print_r($_POST, true);
    
    // Сохраняем содержимое переменной $received в файл post.txt и результат операции записываем в переменную $save (сохранилось или нет):
    
    $save = file_put_contents('post.txt', $received);
    
    // Если файл сохранить не удалось выводим соответствующее предупреждение:
    
    if ($save === false) {
    	
    	echo 'Ошибка, не удалось записать информацию в файл post.txt';
    	
    }
    
    // Если же все сохранилось успешно выводим уведомление об этом:
    
    else {
    	
    	echo 'Данные успешно сохранены в файле post.txt';
    	
    }


    Ну и справедливости ради POST-запрос вы отправляйте криво. Оно конечно и так будет работать, но с вашим кодом вы не увидите ответа сервера, поэтому надо делать так:
    $.ajax({
    	url: '/wp-content/themes/lk/pages/mail.php',
    	method: 'POST',
    	cache: false,
    	data: { 'message' : 'Привет мир!' },
    	success: function(response) {
    		console.log('Запрос успешно отправлен. Ответ сервера:');
    		console.dir(response);
    	},
    	error: function(err) {
    		console.log('При отправке запроса произошла ошибка, детали:');
    		console.dir(err);
    	}
    });
    Ответ написан
  • Почему не работает POST запрос с ответом на другой сайт?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте GET-запрос при помощи file_get_content() и тогда код получится в разы проще и понятнее.
    Ответ написан
    Комментировать
  • Как с помощью PHP получить родительский узел DOM-элемента?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Там точно те же методы, что и у браузерного jQuery. Попробуйте так:
    <?php
    include 'phpQuery-onefile.php';
    
    $site = file_get_contents($source_url);
    $document = phpQuery::newDocument($site);
    
    $a = $document->find('a.test');
    
    $result = pq($a)->parent()->html();
    
    echo $result;
    ?>


    По идее должно найти ссылку с классом test и вывести html код родительского элемента, но надо тестить.
    Ответ написан
    1 комментарий
  • Как сконвертировать Blob в файл PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Blob это и есть файл, когда вы его отправляйте на сервер, с точки зрения php к нему приходит самый обычный файл, словно он отправлен из обычной формы. Тут вопросы могут быть лишь к скрипту, которым вы Blob отслыайте.

    Покажите JavaScript которым Blob шлете.
    Ответ написан
  • Как сделать скачивание файла с редиректом на php?

    zkrvndm
    @zkrvndm
    Архитектор решений
    1. Файл качайте частями при помощи JavaScript в виде Blob, не забудьте только сделать понятную индикацию процесса
    2. Пока качается файл, можете внутри iframe показать любой какой угодно сайт посетителю, в том числе и рекламу
    3. Как только файл докачается отдаете его на сохранение, а iframe закрывайте
    Ответ написан
    Комментировать
  • Можно ли отдать пользователю на скачивание в один момент пару файлов?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вариантов несколько, самый очевидный это положить картинки в zip-архив и отдать на скачивание именно, что архив. Кроме этого, можно вместо скачивания картинок просто вывести ему html-страницу с мини галереей, где будут эти картинки и рядом с каждой картинкой была бы кнопка: Cохранить на диск
    Ответ написан
    Комментировать
  • Как дать понять что включен js и как представиться роботом при парсинге страницы?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте указать те же заголовки, что отсылал бы реальный браузер.

    Пример:
    <?php
    
    // Указываем тип документа и кодировку:
    header('Content-Type: text/html; charset=utf-8');
    
    // Включаем отображение ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // Адрес для парсинга:
    $url = 'https://yousite.com';
    
    // Создаём новый сеанс:
    $curl = curl_init();
    
    // Указываем адрес целевой страницы:
    curl_setopt($curl, CURLOPT_URL, $url);
    
    // О отключаем проверку SSL сертификата:
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    
    // Устанавливаем заголовки для имитации браузера:
    
    $headers = [];
    $headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
    $headers[] = 'Accept-Encoding: identity';
    $headers[] = 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
    $headers[] = 'Cache-Control: no-cache';
    $headers[] = 'Connection: keep-alive';
    $headers[] = 'Host: ' . parse_url($url)['host'];
    $headers[] = 'Pragma: no-cache';
    $headers[] = 'Sec-Fetch-Dest: document';
    $headers[] = 'Sec-Fetch-Mode: navigate';
    $headers[] = 'Sec-Fetch-Site: none';
    $headers[] = 'Sec-Fetch-User: ?1';
    $headers[] = 'Upgrade-Insecure-Requests: 1';
    $headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36';
    
    
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    
    // Разрешаем переадресацию:
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    
    // Запрещаем прямяой вывод результата запроса:
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    
    // Делаем сам запрос:
    $result = curl_exec($curl);
    
    // Завершаем сеанс:
    curl_close($curl);
    
    // Смотрим результат:
    echo $result;


    Если метод не помогает, напишите ссылку на сайт, возможно подскажу что.
    Ответ написан
  • Как с помощью iframe тег сделать зеркало сайта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте CSS-стили, чтобы растянуть iframe на всю высоту и ширину окна браузера.
    Ответ написан
    Комментировать
  • Можно ли передать дескриптор CURL другому скрипту (процессу)?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если другой скрипт подключить через include / require то наверное можно.
    Ответ написан
    Комментировать
  • Как выполнить такое действие на php?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Однажды я задавал похожий вопрос. Посмотрите ответы, возможно они вам помогут:
    Существуют ли эмуляторы JavaScript на PHP?
    Ответ написан
    Комментировать
  • Как сделать перенос строки, который будет работать и в консоли, и в браузере?

    zkrvndm
    @zkrvndm
    Архитектор решений
    По умолчанию в html-тегах переносы строк игнорируются, поэтому вы и не видите переносы сделанные при помощи \r\n

    Однако это поведение вполне можно изменить, достаточно лишь применить к блокам в которых выводите информацию специальный стиль:
    <div style="white-space: pre-line;">
        Ваш текст
    </div>

    И текст будет показан с учетом переносов строк.
    Ответ написан
    Комментировать
  • Как с помощью php изменить href у ссылки зная ее класс?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте библиотеку phpQuery. Пример изменения атрибута:
    require_once 'phpQuery/phpQuery/phpQuery.php';
    $html = file_get_contents('https://ссылка_на_страницу');
    $doc = phpQuery::newDocument($html);
    $link = $doc->find('селектор_для_поиска_ссылки');
    pq($link)->attr('href', 'https://новый_адрес_для_ссылки');
    echo pq($doc)->html();

    Писал по памяти, мог накосячить, поэтому код надо тестить, но вся суть библиотеки в том, что там точно такие же методы как в jQuery.
    Ответ написан
    5 комментариев
  • Как отправить POST-запрос на другой сайт?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для отправки POST-запросов на PHP принято использовать cURL.

    При этом инструкций в сети полно:
    https://yandex.ru/search/?text=php%20post%20запрос...
    Странно, что вы не догадались забить свой вопрос в поиск Яндекса или Google.
    Ответ написан
  • Как спарсить сайт с последующим переводом на другой язык?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте виджет:
    https://translate.yandex.ru/developers/website-widget

    Алгоритм действий следующий:
    1. Получайте html-код целевой страницы при помощи file_get_contents()
    2. Внутрь полученного html перед закрывающим тегом body вставляйте JavaScript-код виджета
    3. Затем выводите результат в браузер пользователя при помощи echo

    P. S. Это в корне не правильный, но наиболее простой способ переводить страницы на лету. Если делать все по уму, нужно поднимать ревер-прокси и переводит тексты на стороне сервера используя непосредственно API переводчика.
    Ответ написан
  • Есть ли ограничения на количество файлов и папок на php-хостингах?

    zkrvndm
    @zkrvndm
    Архитектор решений
    У Beget есть бесплатный хостинг и там четко прописано максимальное количество файлов:

    Максимальное количество файлов: 25 000

    Если будете использовать их бесплатный хостинг, можете ориентироваться на эту цифру.
    Ответ написан
    Комментировать