Задать вопрос
  • Как сделать проверку ссылки на битость перед переходом?

    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 подставляйте ссылку, которую надо проверить.
    Ответ написан
  • Выгрузка товаров на сайт через API или просто хороши парсер?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Мой совет - идёте на фрилансим и публикуйте задание на создание php-скрипта, который будет парсить и импортировать товары. И не скупитесь на цену, задача у вас хоть и типовая, но муторная, так как после парсинга всех трёх источников надо будет инфу ещё как-то отработать и совместить, с удалением дубликатов.
    Ответ написан
    Комментировать
  • Как настроить особенности работы с дробями в JavaScript?

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Функцию window.open() нельзя использовать асинхронно, иначе возможен блок, как у вас.

    Наилучший вариант, это прописать вызов окна внутрь кнопки, тогда блока не будет:
    <button onclick="new_window = window.open('./step');">Кликни меня</button>

    Далее, уже после того, как отработает ваш AJAX-скрипт вы можете тупо перезаписать содержимое нового окна:
    new_window.document.write('Тест, проверка!');
    new_window.document.close();

    Или переадресовать его, куда вам там надо.
    new_window.document.location.href = '/tuda_kuda_nado';
    Ответ написан
    Комментировать
  • Как запускать php раз в час?

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

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

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

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

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Такое обычно бывает, если где-то ошибки есть в html-коде. Проверьте свой код на ошибки.
    Ответ написан
    Комментировать
  • Как отловить клик на iframe?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте атрибут onclick.
    Ответ написан
    Комментировать
  • Стоит ли парсить на сайт инфо с других сайтов?

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для отслеживания хранилища есть специальное событие:
    window.addEventListener('storage', function(events) {
        console.dir(events);
    });

    StorageEvent вызывается каждый раз, когда произошло изменение в localStorage. Это не работает на странице, которая вносит изменения, но срабатывает на открытых страницах домена в броузере. То есть, данное событие оповещает открытые вкладки одного сайта о произошедшем событии.

    Источник: https://itnan.ru/post.php?c=1&p=317586
    Ответ написан
    Комментировать
  • Как организовать фильтр масел на joomla?

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

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

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    <button onclick="localStorage.setItem('ключ', 'значение');">Кнопка, которая запишет в local Storage указанное значение по указанному ключу</button>
    Ответ написан
    Комментировать
  • Как вставить свой JavaScript-код на страницу сайта в приложении Apache Cordova?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Нашел ответ. Нужно подключить плагин InAppBrowser после чего, можно инжектить код на определенные страницы следующим образом:
    var ref = window.open('http://apache.org', '_blank', 'location=yes');
    ref.addEventListener('loadstop', function() {
        ref.executeScript({file: "myscript.js"});
    });


    Если для сборки используется Phone Gap Build, то в теории для подключения плагина достаточно в конфигах указать:
    <plugin name="cordova-plugin-inappbrowser" source="npm" />

    Но это не точно, так как не проверял.
    Ответ написан
    Комментировать
  • Как дробить большие post запросы?

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

    Создавать zip-архивы на JavaScript можно посредством библиотеки JSZip, он на выходе даст вам Blob, который в свою очередь ни что не помешает разбить на части и отослать кусками.

    P. S. Но честно сказать, вам будет проще увеличить лимиты сервера, чем такую мудрёную схему реализовывать. Если хостер не позволяет менять лимиты, меняйте хостера или переходите на VDS.
    Ответ написан
    Комментировать
  • Как узнать или задать Bundle ID?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Плохо искал, извиняюсь. Ответ на мой вопрос:
    https://stackoverflow.com/questions/21052842/cordo...
    Ответ написан
    Комментировать
  • Возможна ли работа с несколькими пользователями не используя БД?

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Покажите код, который выполняет запись в .txt файл. Вам нужно встроится в этот код, чтобы перехватывать факт записи.
    Ответ написан
  • Как через cmd послать команду в браузер?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Зависит от того, что вы хотите сделать. Для управления браузером обычно нужно писать расширение, если знаете JavaScript это несложно.
    Ответ написан
    5 комментариев