Задать вопрос
Crazy developer and hard-working man
Контакты

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (11)

Лучшие ответы пользователя

Все ответы (19)
  • Какими условными операторами лучше воспользоваться если функция имеет 2 определенных сценария и третий сценарий по умолчанию?

    shineblu
    @shineblu
    Добрый день,

    +1 за switch-case, т.к. мало ли какие-новые параметры/типы книг Вы захотите добавить

    Успехов!
    Ответ написан
    Комментировать
  • Как реализовать авторизацию выхода в интернет по http?

    shineblu
    @shineblu
    Добрый день,

    Для Windows подобных решений не знаю (но наверняка есть). Для Linux (Debian) рекоммендую CoovaChilli (стабильный форк Chillispot). Для его использования нужно будет поднять отдельную железку (шлюз/комп). И все будет так как Вы и описываете:

    1. При подключении к WiFi, CoovaChilli выдаст клиенту внутренний IP из своей подсети, при этом клиент будет изолирован от соседей
    2. В Windows появится окошко в трее, что требуется авторизация для доступа в интернет, а IOS устройства сразу попробуют открыть браузер (в момент подключения к точке доступа, покажут Login Page)
    3. После успешной авторизации шлюз начнет пропускать трафик с локального на WAN интерфейс (это или Ваша локалка или отдельный линк в интернет)

    Из плюсов - решение очень гибкое, аутентификацию клиента можно сделать через HTTP (не будет проблем с self-signed сертификатами), можно сделать ваучеры (почасовой доступ), можно прописать ресурсы доступные без авторизации (обычно это DNS сервера) и прочее.

    Другие решения Вы можете посмотреть здесь: en.wikipedia.org/wiki/Captive_portal

    Успехов!
    Ответ написан
    1 комментарий
  • Как запретить запуск определенных программ через bat?

    shineblu
    @shineblu
    Добрый день,

    Есть пара вариантов

    1. Вы можете настроить локальную безопасности и ограничить доступ на запуск конкретных приложений. Для этого откройте оснастку "Локальная политика безопасности" (secpol.msc, данный вариант можно использовать и в домене). В ней будет раздел "Политики ограниченного использования программ", нажмите на него правой кнопкой и создайте новую политику. Появятся подразделы, Вам нужен раздел "Дополнительные правила". В этом разделе нужно добавить правила с указанием пути к файлу или папке доступ к которым запрещен. При создании правила в поле Уровень безопасности выберите Не разрешено. Например если указать путь: "%userprofile%\Local Settings\Temp" (поддерживаются маски и переменные окружения) то пользователь не сможет запустить на выполнение ни одну программу из этой папки - получит предупреждение что запуск ограничен политикой безопасности. При этом, если файл переместить в другую папку, его можно будет запустить. Есть еще вариант добавления правила по хэшу. Это должно защитить Вас от запуска файла при перемещении. Замечу что данный механизм полностью игнорирует права пользователя и будет одинаково работать как для обычного пользователя так и для администратора.

    2. Вы можете граничить доступ на чтение/запуск на уровне NTFS для конкретного пользователя. Для этого зайдите в свойства нужного файла/папки и просто установите нужные разрешения.

    Успехов!
    Ответ написан
    1 комментарий
  • Как правильно организовать хранение и чтение настроек сайта?

    shineblu
    @shineblu
    Добрый день,

    Предложу тогда и свой вариант. Храните настройки в сериализованом виде: как только сайт открывается, он проверяет наличие файла (например: settings.dat), если файл найден - читает его и делает unserialize - на выходе получается массив настроек. Если файла нет - делаете запрос в базу (как предлгал @VasiliyIsaichkin) и затем полученный массив настроек сохраняете в файл (например settings.dat) через serialize функцию + при каждом изменении настроек CMS - удаляйте файл settings.dat и он будет снова синхронизирован с БД.

    Успехов!
    Ответ написан
    3 комментария
  • Как реализовать "обратный" порядок вызова методов класса PHP?

    shineblu
    @shineblu
    Добрый день,

    В дополнение к решению от @AMar4enko

    class Template {
    	private $callback = array();
    	private $name = 'dummy';
    	private $data = array();
    
    	private function doCallback() {
    		foreach (array_reverse($this->callback) as $func) {
    			call_user_func_array(array($this, $func[0]), $func[1]);
    		}
    		$this->callback = array();
    	}
    
    	// реализация вызываемых методов (вызываются только из doCallback)
    	private function _render($name) {
    		echo "Call Render<br>\r\n";	
    		$this->name = $name;
    	}
    
    	private function _withData($data) {
    		echo "Call WithData<br>\r\n";
    		$this->data = $data;
    	}
    
    	// эти функции записываются в стек и видны извне
    	public function render($name) {
    		$this->callback[]=array('_'.__FUNCTION__, func_get_args());
    		return $this;
    	}
    	
    	public function withData($data) {
    		$this->callback[]=array('_'.__FUNCTION__, func_get_args());
    		return $this;
    	}
    
    	// конечная функция которая вызовет функции из стека в обратном порядке
    	public function __toString() { 
    		$this->doCallback();
    		echo "Show output<br>\r\n";
    		return "";
    	}
    
    	// конечная функция которая вызовет функции из стека в обратном порядке
    	public function compile() { 
    		$this->doCallback();
    		echo "Show output<br>\r\n";
    	}
    }
    
    $tpl = new Template;
    $tpl->render('templateName')->withData(array('a','b','c'));
    echo $tpl->compile(); // или echo $tpl;


    Наслаждайтесь :)
    Ответ написан
    3 комментария