Ответы пользователя по тегу PHP
  • Почему ajax возвращает null?

    zkrvndm
    @zkrvndm
    Архитектор решений
    При отправке запроса на другой домен fetch не передает куки, а без куков ваш сервер не может определить пользователя. Подробнее тут:
    https://learn.javascript.ru/fetch-api#credentials
    Вам нужно указать параметр credentials равным include, при этом для корректной работы сервер у вас должен отдавать заголовок Access-Control-Allow-Credentials.

    Сам с собой это только если ваш сайт и бэкенд на разных доменах. Если они на одном и том же домене, но ошибка сохраняется, ищите причину на серваке или попробуйте для начала заюзать XMLHttpRequest.
    Ответ написан
  • RedBeanphp как преобразовать данные массива в число?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте использовать count() чтобы узнать количество элементов в массиве.
    В документации php есть примеры:
    https://php.ru/manual/function.count.html
    Ответ написан
    Комментировать
  • Как реализовать отправку файлов через форму PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для отправки файлов на сервер лучше всего использовать xhr в связке с FormData, о них обеих можете легко найти информацию в Яндексе. Если не получается разобраться, но надо отправить форму именно без перезагрузки страницы, то тогда можете использовать iframe. Отправленные файлы потом на сервере смотрите в глобальной переменной $_FILES.
    Ответ написан
    Комментировать
  • Почему cUrl не работает через прокси?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте указать CURLOPT_PROXYTYPE. Например, если у вас сокс прокси, то:
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    Ответ написан
    Комментировать
  • Как оптимизировать страницу с большим кодом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы не должны грузить из БД всё и сразу, надо запрашивать инфу для таблицы небольшими кусками и грузить следующую страницу только после того, как юзер нажал соответствующую кнопку. Кстати, сортировка и формирование таблицы тоже должно происходить на стороне сервера.
    Ответ написан
    6 комментариев
  • Как лучше реализовать заполнение форм?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Валидацию всегда надо на сервере делать, если вам это лень, можете использовать Google формы или Яндекс формы - они оба бесплатные, есть защита от ботов и их можно выводить через iframe у себя на сайте.
    Ответ написан
    Комментировать
  • Как сделать проверку ссылки на битость перед переходом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Не существует способов проверить работоспособность ссылки, без обращения к ней. Соответственно, чтобы убедится в том, что переданная ссылка не битая, нужно попытаться ее открыть, допустим, через тот же curl.

    Для этого создайте в корне своего сайта файл 1.php и поместите в него код:
    Нажмите здесь, чтобы развернуть код
    <?php
    
    header('Access-Control-Allow-Origin: *'); // Разрешаем запросы с любых доменов
    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);
    
    // Если мы получили GET-запрос:
    
    if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    	
    	// Если переменная со ссылкой существует и не пуста:
    	
    	if (isset($_GET['url']) and !empty($_GET['url'])) {
    		
    		check(); // Запускаем функцию для проверки действительности ссылки
    		
    	}
    	
    	// Если переменная со ссылкой не существует:
    	
    	else {
    		
    		echo 'Отсутсвует переменная url со ссылкой для проверки!';
    		
    	}
    	
    }
    
    // Если мы получили НЕ GET-запрос, а допустим POST-запрос или любой другой:
    
    else {
    	
    	echo 'Метод не поддерживается!';
    	
    }
    
    // Функция для проверки переданной ссылки:
    
    function check() {
    
    	// Определяем параметры запроса:
    	
    	$url = $_GET['url']; // Получаем адрес запроса
    	
    	// Создаём новый сеанс:
    	$curl = curl_init();
    	
    	// Указываем адрес целевой страницы:
    	curl_setopt($curl, CURLOPT_URL, $url);
    	
    	// Устанавливаем таймаут для запроса в 10 секунд:
    	
    	curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    	
    	// Устанавливаем User-Agent чтобы имитировать браузер:
    	$headers = [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 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);
    	
    	// Смотрим, есть ли ответ:
    	
    	if ($result == '') {
    	    echo 'Передана не рабочая ссылка!'; // Выводим ошибку, если ответ пустой
    	}
    	
    	else {
    	    header('Location: ' . $url); // Переадресуем, если ответ не пустой
    	}
    
    }

    Проверить работу скрипта можно сделав GET-запрос на файл 1.php:
    https://site.ru/1.php?url=https://yandex.ru
    Где https://site.ru ваш сайт, а вместо https://yandex.ru подставляйте ссылку, которую надо проверить.
    Ответ написан
  • Как запускать php раз в час?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Есть два способа периодически запускать php-скрипт.

    1. Первый способ подразумевает использование CRON, он обычно есть на большинстве хостингов, но если вдруг нет, то смотрите второй способ.

    2. Второй способ подразумевает, что на страницах своего сайта вы размещайте JavaScript, который при каждом просмотре сайта посетителями делает AJAX-запрос по адресу вашего php-скрипта. Соответственно, на стороне php-скрипта тупо проверяйте, что с момента прошлого выполнения прошло больше часа и спокойно выполняйте нужные действия. Способ не без минусов, требуется чтобы у вас был более менее стабильный поток посетителей, да и могут быть разбросы по времени, но зато не требуется наличие CRON на хостинге.

    У меня на некоторых сайтах используется второй способ, правда интервал там обычно раз в сутки и проблем еще не было, так как за сутки обязательно кто-нибудь да зайдет или реальные люди или поисковые боты.
    Ответ написан
    2 комментария
  • Как не выводить php код, а его выполнять (nginx)?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если нужная именно связка NGINX + PHP рекомендую Winginx, там нет Apache, да и в целом по моему опыту, работает стабильнее, чем другие локальные сервера.
    Ответ написан
    Комментировать
  • Почему не работает file_get_contents?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если вы на 100% уверены в пути и ссылка точно рабочая, но у вас при этом выдает 404, то дело скорее всего в отсутствии внутри запроса заголовка Host - заголовок этот надо передавать в контексте потока. Я сейчас не у компа, но завтра вам в комментариях отпишу, как это правильно сделать.
    Ответ написан
  • Возможна ли работа с несколькими пользователями не используя БД?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Можно конечно. Достаточно придумать уникальное правило, которое позволит на основе e-mail сгенерировать уникальный статичный пароль - это избавит от необходимости хранить пользователей в БД.
    Ответ написан
    2 комментария
  • Как свалидировать user agent?

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Здесь два метода борьбы, официальный и неофициальный.

    1. Официальный. Направляйте жалобу хостеру и регистратору, что нарушены ваши права на интелектуальную собственность, с описанием ситуации. Если хостер наш, не зарубежный, сайт скорее-всего заблокируют. Дополнительно можно попробовать решить вопрос через Роскомнадзор или вовсе напрямую подать в суд на владельца сайта.

    2. Неофицальный. Прячете на своём сайте троян, который будет потом скрытно пересылать контакты клиентов с сайта вашего конкурента вам. Соответственно, сможете в наглую уводить у них клиентов, пока не догадаются.
    Ответ написан
    2 комментария
  • Как в тег поместить домен сайта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Это делается не так. Для начала вам надо написать в тех. поддержку Beget, чтобы все суб домены вашего сайта, направили на директорию основного суб домена. Далее, надо написать небольшой php-роутер, после чего можно будет внутри вашего сайта создавать папки вида raz, dva, tri и файлы с этих каталогов будут уже открываться, как отдельные сайты: raz.site.ru, dva.site.ru, tri.site.ru

    Такой лайфхак позволят легко обойти ограничение на количество сайтов и размещать их сколько душе угодно.

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы талант. По порядку:
    1. У вас переменные не экранированы, правильно будет вот: $_POST["u_name"]
    2. Функцию майл надо вызывать один раз, вы же вызывайте три раза
    3. Результат работы функции майл надо записать в переменную и уже в зависимости от результата выдавать ответ

    P. S. Косяк с вашей стороны.
    Ответ написан
    1 комментарий
  • Как загрузить страницу с основного домена со всеми стилями на поддомене с помощью PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Самый просто способ;
    <?php
    
    echo file_get_contents("http://site.ru/page/test.html");


    Но в идеале надо ещё автозаменой пройтись по тексту страницы.
    Ответ написан
  • Как в поле формы обратной связи вставить php код?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Это забивание гвоздей микроскопом. При отправке формы переменная $_SERVER и так содержит в себе адрес страницы, с которого было обращение.
    Ответ написан
    Комментировать
  • Как запускать скрипты одновременно?

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вам нужно будет для этих целей написать специальный php-прокси. На своём сайте получаете заполненную форму и пересылаете на второй сайт посредством curl или file_get_contents, ответ сохраняете к себе в БД и затем делаете с ним, что хотите.
    Ответ написан
    Комментировать
  • Как безопасно указать строковый параметр при формировании JS на PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Знаете как я сам обычно делаю в таких случаях, чтобы не путаться во всей этой мешанине скобок? Все JavaScript функции сохраняю в отдельные файлы и при необходимости просто вставляю их через file_get_contents("function_name.js") и тогда не приходится парится с экранированием. По аналогии, можно все хранить в базе данных, если нужна скорость.
    Ответ написан
    Комментировать