Авторизация из PHP

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-09 23:07:58

Собственно есть в сетке у меня камера которая умеет отдавать картинку по урлу вида
"http://адрес камеры/image.jpg"

Написал такой скрипт image.php

Код: Выделить всё

<?php

    define('SOURCE', 'http://адрес камеры/image.jpg');
    
    $source = imagecreatefromjpeg(SOURCE)
      or die('Cannot jpg');
    
    imagejpeg($source);
    imagedestroy($source);
    
?>
Ну и некий html в котором используется картинка с камеры.

Код: Выделить всё

    <img src="http://тра-та-та/image.php">
Все замечательно работает. Но вот понадобилось мне сделать на камере авторизацию по логину-паролю. Установил. Естественно скрипт стал не рабочий. Как из PHP эту авторизацию замутить?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Авторизация из PHP

Непрочитанное сообщение zg » 2009-04-10 7:16:41

BAV_Lug писал(а):Как из PHP эту авторизацию замутить?
какую эту? там поди Basic Authentication?

Если да, то вот вдержка из HTTP/1.1

Код: Выделить всё

11.1 Базовая схема установления подлинности (Basic Authentication
     Scheme).

   "Базовая" схема установления подлинности основана на том, что
   агент пользователя должен доказывать свою подлинность при помощи
   идентификатора пользователя (user-ID) и пароля (password) для
   каждой области (realm). Значению области (realm) следует быть
   непрозрачной (opaque) строкой, которую можно проверять только на
   равенство с другими областями на этом сервере. Сервер обслужит
   запрос, только если он может проверить правильность идентификатора
   пользователя (user-ID) и пароля (password) для защищенной области
   (protection space) запрошенного URI (Request-URI). Никаких
   опциональных опознавательных параметров нет.

   После получения запроса на URI, находящийся в защищаемой области
   (protection space), сервер МОЖЕТ ответить вызовом (challenge),
   подобным следующему:

          WWW-Authenticate: Basic realm="WallyWorld"

   где "WallyWorld" - строка, назначенная сервером, которая
   идентифицирует область защиты запрашиваемого URI (Request-URI).

   Чтобы получить права доступа, клиент посылает идентификатор
   пользователя (userid) и пароль (password), разделенные одним
   символом двоеточия (":"), внутри base64-кодированной строки
   рекомендаций (credentials).

          basic-credentials = "Basic" SP basic-cookie

          basic-cookie   = 

          user-pass   = userid ":" password

          userid      = *

          password    = *TEXT

   Userid может быть чувствителен к регистру.

   Если агент пользователя хочет послать идентификатор пользователя
   (userid) "Aladdin", и пароль (password) "open sesame", он будет
   использовать следующее поле заголовка:

          Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

   Соглашения о защите, связанные с базовой схемой установления
   подлинности, смотрите в разделе 15.

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-10 19:45:28

Ну и как это будет выглядеть на PHP?
Я просто PHP не очень хорошо знаю :(

ev
ст. лейтенант
Сообщения: 1325
Зарегистрирован: 2008-07-27 17:11:30
Откуда: Москва

Re: Авторизация из PHP

Непрочитанное сообщение ev » 2009-04-10 20:59:44

а что за камера?

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-10 22:09:44

ev писал(а):а что за камера?
А это принципиально?
Камера длинк 900
Авторизация Basic

Что добавить в код, чтобы получать с камеры картинку? Логин-пароль естественно знаю :)

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Авторизация из PHP

Непрочитанное сообщение zg » 2009-04-10 22:17:50

BAV_Lug писал(а):Что добавить в код, чтобы получать с камеры картинку? Логин-пароль естественно знаю
примерно так, если мануалы не врут

Код: Выделить всё

<?php

$login = 'login';
$passw = 'password';

$authBasic = 'Authorization: Basic '. base64_encode($login .':'. $passw);

// Опции для потока
$opts = array
( 
	'http' => array 
	(
	    'method' => 'GET',
	    'header' => $authBasic ."\r\n"
	)
);

$context = stream_context_create($opts);

// Получение файла
$file = file_get_contents('http://www.example.com/', false, $context);

?>
скрипт не проверял.... может и не работать

Ссылка на мануал http://ru2.php.net/manual/en/function.f ... ntents.php

PS: проверил -))) маны не врут, скрипт рабочий :smile:

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-10 22:39:37

zg писал(а):
BAV_Lug писал(а):Что добавить в код, чтобы получать с камеры картинку? Логин-пароль естественно знаю
примерно так, если мануалы не врут

Код: Выделить всё

<?php

$login = 'login';
$passw = 'password';

$authBasic = 'Authorization: Basic '. base64_encode($login .':'. $passw);

// Опции для потока
$opts = array
( 
	'http' => array 
	(
	    'method' => 'GET',
	    'header' => $authBasic ."\r\n"
	)
);

$context = stream_context_create($opts);

// Получение файла
$file = file_get_contents('http://www.example.com/', false, $context);

?>
скрипт не проверял.... может и не работать

Ссылка на мануал http://ru2.php.net/manual/en/function.f ... ntents.php

PS: проверил -))) маны не врут, скрипт рабочий :smile:
Спасибо за наводку конечно, но мне не очень понятно, как потом $file превратить в изображение.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Авторизация из PHP

Непрочитанное сообщение zg » 2009-04-10 22:48:31

BAV_Lug писал(а):как потом $file превратить в изображение.
добавь в конец скрипта

Код: Выделить всё

header('Content-type: image/jpeg', true);
echo $file;

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-10 22:53:41

zg писал(а):
BAV_Lug писал(а):как потом $file превратить в изображение.
добавь в конец скрипта

Код: Выделить всё

header('Content-type: image/jpeg', true);
echo $file;
Спасибо. Буду пробовать.

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Авторизация из PHP

Непрочитанное сообщение BAV_Lug » 2009-04-10 23:18:00

Появился еще вопросик.
Как сделать так, чтобы картинка перегружалась через определенное время сама (не вся страница - это я знаю как), а только одна картинка.
Подозреваю, что нужно копать в сторону ява скрипт.

Хочется на страничке набор радио-боксов с временем. В зависимости от того какой выбран - каритинка обновляется с таким интервалом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Авторизация из PHP

Непрочитанное сообщение zg » 2009-04-11 7:43:36

BAV_Lug писал(а):а только одна картинка.
посылай заголовок рефреш у картинки, например, так

Код: Выделить всё

header('Refresh: 10');
и картинка будет перегружаться сама каждые 10 секунд... Ещё не плохо бы вырубить кэширование, делается следующими заголовками

Код: Выделить всё

// Запрет кэширования
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
Но можно и через яваскрипт, правда кэширование картинки всё равно лучше вырубить.