Название скрипта Member_Zone_1.5 ссылка на скрипт Файлы папка img <---- Тут картинки папка db <---- Тут как я понял генеряца ключи x-sms.php Code: <?php require_once(dirname(__FILE__).'/lib.inc.php'); ////////////////////////////////////////////////////////////////////////////////////////////////// $RESPONSE = array(); $RESPONSE[]= "smsid:".$_GET['smsid']; $RESPONSE[]= "status:reply"; $RESPONSE[]= "content-type:text/plain"; $RESPONSE[]= ""; $storage = new Membership_PasswordStorage; if($storage->isValidNumber()){ $pw = $storage->GeneratePassword($_GET['smsid']); $storage->Add($pw); $RESPONSE[] = "Ваш пароль: $pw"; }else{ $RESPONSE[] = "Вы отправили не на тот номер! Повторите на номер указанный на сайте"; } echo join("\n",$RESPONSE); ?> x-cron.php Code: <?php require_once(dirname(__FILE__).'/lib.inc.php'); $storage = new Membership_PasswordStorage; $storage->Cron(); protected.php Code: <?php /** * Указываем путь к библиотеке! */ require_once('lib.inc.php'); /** * Проверяем пользователя. Если пароль просрочен, выводим сообщение об ошибке */ $t = new Membership_Credentials(); if( false == $t->IsAuthenticated() ) { echo 'Введите пароль, вы не вошли в систему'; exit; } // Ниже размещается код закрытого раздела, нами показан простой пример вставки ссылки echo ' <html> <head> <title>Закрытая зона</title> </head> <body> <p>Скачать данный файл:</p> <p><a href="http://your_site.com/member_zone/primer_file.zip">Cкачать</a></p> </body> </html> '; ?> operators.php Code: <?php $PREFIX = 'SMSPROXY'; // Введите ваш префикс // Необходимо поставить короткие номера в соответствии со странами. По умолчанию выставлены номера максимальной стоимости. $ru = '3649' ; // Введите короткий номер для России $au = '0930399999' ; // Введите короткий номер для Австрии $est = '17013' ; // Введите короткий номер для Эстонии $be = '7796' ; // Введите короткий номер для Бельгии $gb = '79067' ; // Введите короткий номер для Великобритании $cz = '9090199' ; // Введите короткий номер для Чехии $sp = '5339' ; // Введите короткий номер для Испании $fi = '179479' ; // Введите короткий номер для Финляндии $fr = '83868' ; // Введите короткий номер для Франции $de = '80888' ; // Введите короткий номер для Германии $hu = '090645045' ; // Введите короткий номер для Венгрии $kg = '1171' ; // Введите короткий номер для Киргизии $kz = '9915' ; // Введите короткий номер для Казахстана $lv = '1874' ; // Введите короткий номер для Латвии $lt = '1645' ; // Введите короткий номер для Литвы $nl = '7117' ; // Введите короткий номер для Нидерландов (Голландии) $no = '2322' ; // Введите короткий номер для Норвегии $pl = '7910' ; // Введите короткий номер для Польши $pr = '4565' ; // Введите короткий номер для Португалии $se = '72170' ; // Введите короткий номер для Швеции $tj = '1171' ; // Введите короткий номер для Таджикистана $ua = '5014' ; // Введите короткий номер для Украины lib.inc.php Code: <?php error_reporting(E_ALL & ~ E_NOTICE); require_once(dirname(__FILE__).'/config.php'); /// DEFINITIONS // define('MEMBERSHIP_PASSWORD_LIFETIME_SEC',MEMBERSHIP_PASSWORD_LIFETIME * 3600 * 24); define("MEMBERSHIP_PASSWORD_VALID", 0); define("MEMBERSHIP_PASSWORD_EXPIRED",1); define("MEMBERSHIP_PASSWORD_INVALID",2); /// CLASSES /// class Membership_Credentials { function Membership_Credentials() {} function IsAuthenticated() { if( $_COOKIE['timem'] == $this->_Sign($_COOKIE['time']) && $_COOKIE['time'] >= time() ) { return true; } return false; } function Save($password) { $ps = new Membership_PasswordStorage(); $o = $ps->Expires($password); $this->_SetCookie('time',$o); $this->_SetCookie('timem',$this->_Sign($o)); } function _Sign($s) { return md5($s . $_SERVER['SERVER_SOFTWARE'] . $_SERVER['HTTP_USER_AGENT'] . __FILE__ ); } function _SetCookie($key,$val) { setCookie($key,$val,time() + MEMBERSHIP_PASSWORD_LIFETIME_SEC,'/',".".$_SERVER['HTTP_HOST']); } } class Membership_PasswordStorage { var $db = ''; /** * Constructor */ function Membership_PasswordStorage() { $this->db = dirname(__FILE__).'/db'; } /** * @return void */ function Add($password) { file_put_contents($this->file($password),time() + MEMBERSHIP_PASSWORD_LIFETIME_SEC); } /** * @return int */ function Expires($password) { return file_get_contents($this->file($password)); } /** * @return boolean */ function Get($password) { if( !preg_match('/^[a-zA-Z0-9]{'.MEMBERSHIP_PASSWORD_LENGTH.'}$/',$password) ) { return MEMBERSHIP_PASSWORD_INVALID; } if( file_exists($this->file($password)) && is_file($this->file($password)) ) { $time = file_get_contents($this->file($password)); if( $this->isValid($time) ) { return MEMBERSHIP_PASSWORD_VALID; } else { // @unlink($this->file($password)); return MEMBERSHIP_PASSWORD_EXPIRED; } } else { return MEMBERSHIP_PASSWORD_INVALID; } } function isValidNumber() { $numbers = split(',',trim(MEMBERSHIP_NUMBERS_PAY)); if( !in_array($_GET['num'],$numbers) ) { return FALSE; } else { return TRUE; } } function file($pw) { return $this->db . '/' . $pw; } function isValid($time) { return $time >= time(); } /** * @return void */ function Cron() { if ($handle = opendir($this->db)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $t = file_get_contents($this->file($file)); if( !$this->isValid($t) ) { @unlink($this->file($file)); } } } closedir($handle); } } function GeneratePassword($salt) { $hash = md5($salt); return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH); } } class Membership_Printers { function print_js_countries() { include(dirname(__FILE__).'/operators.php'); $g = array(); foreach( $operators as $operator ){ $a = array(); foreach( $operator as $key => $val ){ $a[] = "'$key' : '".str_replace("'","\\'",$val)."'"; } $g[] = '{'.join(",",$a).'}'; } echo join(",",$g); } function print_html_countries() { include(dirname(__FILE__).'/operators.php'); foreach( $operators as $key => $operator ){ echo '<option value="'.$key.'">'.$operator['country'].'</option>'; } } } if( !function_exists('file_put_contents') ) { function file_put_contents($file,$conts) { $fp = fopen($file,'wb'); fwrite($fp,$conts); fclose($fp); } } index.php Code: <?php require_once(dirname(__FILE__).'/lib.inc.php'); require_once(dirname(__FILE__).'/operators.php'); if( $_POST['action'] == 'login' ) { //check credentials $storage = new Membership_PasswordStorage; $isError = $storage->Get($_POST['password']); if( $isError == MEMBERSHIP_PASSWORD_VALID ) { $c = new Membership_Credentials(); $c->Save($_POST['password']); Header("Location: ". MEMBERSHIP_DESTINATION); Header("Content-Length: 0"); Header(""); exit; } } // printing the template ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//en"> <html> <head> <title>Получение доступа к сайту</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <META NAME="ROBOTS" CONTENT="NOINDEX"> <META NAME="ROBOTS" CONTENT="NOFOLLOW"> </head> <body> <center> <table cellpadding="0" cellspacing="0" width="500" style="font-family:tahoma;font-weight:bold;font-size:16px;"> <tr> <td align="center" valign="top"><img src="img/sms.jpg" align="left"><br>Отправьте SMS с текстом<br><font color="#FF0000"><?echo $PREFIX; ?></font><br> на номер в вашей стране: </td> </tr> <tr> <td align="center" valign="top"> <table width="500" border="0" cellspacing="4" style="font-family:arial;font-weight:bold;font-size:12px;"> <tr> <td height="1"></td> <td height="1"></td> <td align="center" height="1"><img src="img/clear.gif"></td> <td height="1" bgcolor="#FFFFFF"></td> <td></td> <td></td> <td align="center"><img src="img/clear.gif"></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/ru.gif" width="40" height="24"></td> <td >Россия</td> <td width="90" align="center" ><? echo $ru; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/kz.gif" alt="" width="40" height="24"></td> <td >Казахстан</td> <td width="90" align="center" ><? echo $kz; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/aus.gif" alt="" width="40" height="24"></td> <td >Австрия</td> <td width="90" align="center" ><? echo $au; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/ua.gif" alt="" width="40" height="24"></td> <td >Украина</td> <td width="90" align="center" ><? echo $ua; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/est.gif" alt="" width="40" height="24"></td> <td >Эстония</td> <td width="90" align="center" ><? echo $est; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/kirg.gif" alt="" width="40" height="24"></td> <td >Киргизия</td> <td width="90" align="center" ><? echo $kg; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/be.gif" alt="" width="40" height="24"></td> <td >Бельгия</td> <td width="90" align="center" ><? echo $be; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/la.gif" alt="" width="40" height="24"></td> <td >Латвия</td> <td width="90" align="center" ><? echo $lt; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/br.gif" alt="" width="40" height="24"></td> <td >Великобритания</td> <td width="90" align="center" ><? echo $gb; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/li.gif" alt="" width="40" height="24"></td> <td >Литва</td> <td width="90" align="center" ><? echo $lv; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/cz.gif" alt="" width="40" height="24"></td> <td >Чехия</td> <td width="90" align="center" ><? echo $cz; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/nd.gif" alt="" width="40" height="24"></td> <td >Нидерланды</td> <td width="90" align="center" ><? echo $nl; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/esp.gif" alt="" width="40" height="24"></td> <td >Испания</td> <td width="90" align="center" ><? echo $sp; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/nor.gif" alt="" width="40" height="24"></td> <td >Норвегия</td> <td width="90" align="center" ><? echo $no; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/fin.gif" alt="" width="40" height="24"></td> <td >Финляндия</td> <td width="90" align="center" ><? echo $fi; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/pol.gif" alt="" width="40" height="24"></td> <td >Польша</td> <td width="90" align="center" ><? echo $pl; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/fr.gif" alt="" width="40" height="24"></td> <td >Франция</td> <td width="90" align="center" ><? echo $fr; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/port.gif" alt="" width="40" height="24"></td> <td >Португалия</td> <td width="90" align="center" ><? echo $pr; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/ger.gif" alt="" width="40" height="24"></td> <td >Германия</td> <td width="90" align="center" ><? echo $de; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/swe.gif" alt="" width="40" height="24"></td> <td >Швеция</td> <td width="90" align="center" ><? echo $se; ?></td> </tr> <tr background="img/bgm.png"> <td ><img src="img/flags/hung.gif" alt="" width="40" height="24"></td> <td >Венгрия</td> <td width="90" align="center" ><? echo $hu; ?></td> <td bgcolor="#FFFFFF" > </td> <td ><img src="img/flags/ta.gif" alt="" width="40" height="24"></td> <td >Таджикистан</td> <td width="90" align="center" ><? echo $tj; ?></td> </tr> </table> <p>Полученный код доступа введите в эту форму:</p> <p> <?php if( !$isError ) { ?> <? } elseif( $isError == MEMBERSHIP_PASSWORD_EXPIRED ){ ?><br> <center><b>Срок действия пароля истек</b></center> <? } elseif( $isError == MEMBERSHIP_PASSWORD_INVALID ) { ?> <center><b>Такого пароля нет</b></center> <? } ?> </p> <div style="width:323px;background:#e3e3e3;border:1px;"> <form method="post" action="<?=$_SERVER['REQUEST_URI']?>" > <input type="hidden" name="action" value="login" /> <input type="text" name="password" /> <input type="submit" name="submit" value="Войти" /> </form> </div> <p><a href="http://russianbilling.com/abonent.php" title="SMS-доступ, стоимость"><img src="http://russianbilling.com/buttons/2/black.jpg" border="0"></a></p> </td></tr> </table> </center> </body> </html> config.php Code: <?php /** * Время жизни пароля, в днях. */ define('MEMBERSHIP_PASSWORD_LIFETIME', 30); /** * Страница, на которую попадает пользователь если ввёл правильный пароль */ define('MEMBERSHIP_DESTINATION', "./protected.php"); /** * Длина пароля, в символах */ define('MEMBERSHIP_PASSWORD_LENGTH', 6); /** * Номера телефонов с которого оплата разрешена, через запятую! */ define('MEMBERSHIP_NUMBERS_PAY', '3649,17013,0930399999,9014,7796,79067,9090199,5339,179479,83868,80888,090645045,9915,5014,1645,1171,1874,7117,2322,7910,4565,72170'); readme Code: Спасибо, что воспользовались услугами SMSProxy. Установка скриптов не займет много времени и не потребует от Вас специфических знаний. 1. Распаковать себе на сервер архив Если Вы разместили скрипты по адресу http://ваш_домен/member_zone/, то настройка будет выглядеть следующим образом. 2. Выставить права на запись для директории /db 3. Разместить контент в файле protected.php 4. Изменить параметры своего аккаунта, расположенные в /operators.php (добавить свой префикс и при необходимости изменить номера и тарифы, т.к. по умолчанию указаны максимальные) В файле config.php перечисляются номера, с которых разрешены запросы (чтобы вас не обманывали, отправляя смс на номера меньшей стоимости), время жизни пароля, длина пароля, страница, на которую необходимо направить пользователя после авторизации. 5. Установить раз в сутки cron на запуск файла /x-cron.php, который будет удалять невалидные пароли (Как настроить cron читайте здесь: http://masterhost.ru/support/doc/cron/). Вы также можете удалять пароли вручную, сортируя их по дате. 6. Рекламу с ссылкой http://ваш_домен/member_zone/index.php После ввода пароля на этой странице, пользователь попадет на ваш закрытый раздел. Установка скриптов на сервере законченa. Теперь необходимо настроить Ваш сервис на SMSProxy 1. Создайте новый сервис в Кабинете, в качестве URL пропишите http адрес скрипта http://ваш_домен/member_zone/x-sms.php 2. Протестируйте работу скрипта нажав Тест (не забудьте указать перфиксы) Остается положить контент в папку на сервере, и закрыть к ней доступ, используя htaccess. Пример: RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://ВАШ_ДОМЕН.ru/member_zone/protected.php.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ВАШ_ДОМЕН.ru/member_zone/protected.php.*$ [NC] # Все ваши файлы можно будет скачать ТОЛЬКО со страницы protected.php #RewriteCond %{HTTP_REFERER} !^http://ВАШ_ДОМЕН.ru/member_zone/.*$ [NC] #RewriteCond %{HTTP_REFERER} !^http://www.ВАШ_ДОМЕН.ru/member_zone/.*$ [NC] # Удалите символ перед RewriteCond, чтобы разрешить перемещение по веб-страницам внутри защищенной зоны, и разрешить скачивать контент со всех страниц, лежащих в данной папке RewriteRule /* - [F] Этот файл нужно положить в папку, где лежит контент. В таком случае, никто не сможет открыть ваше видео/картинки, не авторизовавшись. Шаблон закрытой зоны по умолчанию - protected.php, это единственная страница, с которой пользователь может скачать контент, кликнув по ссылке. Файл htaccess можно создать с помощью блокнота, и переименовать полученный TXT-файл в .htaccess Ваш сервис полностью готов к работе. По вопросам и пожелания обращайтесь на support.russianbilling.com История изменений. v 1.2 Новый файл: protected.php Установлена защита на файл в закрытой зоне. Ранее пользователи могли запомнить ссылку закрытой зоны и неавторизовавшись посещать ее. v 1.3 Исправлен баг со временем действия пароля, теперь он задается именно в днях. Внимание! Скрипт предназначен для раздачи паролей и авторизации пользователей. Как именно закрывать прямой доступ к контенту - решать ВАМ. Мы рекомендуем использовать ограничение доступа по рефереру, через .htaccess v 1.4 Добавлена функция проверки номера на который отправляет абонент. Возможность выбора нескольких разрешённых номеров. v 1.5 Изменена страница оплаты и выбор коротких номеров для работы. Вообщем не пойму где генерица ключь для входа. Примерно понял что в папке db но каким файлом не пойму((( Подскажите бестолковому)
$pw = $storage->GeneratePassword($_GET['smsid']); function GeneratePassword($salt) { $hash = md5($salt); return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH); }
Если меняю на 12345 function GeneratePassword('123456') <--- здесь { $hash = md5('123456'); <--- здесь return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH); Выдает ошибки Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/cazinowm/public_html/zone/lib.inc.php on line 155
в тему я не вникал, но судя по этому куску, там определение функции. Вызов происходит отдельно от определения, то, что написал Гарик - вызов функции, т.е. в нужном месте пишешь GeneratePassword('123456'), что возвращает значение, возвращаемое функцией, если тебе это нужно вывести на экран, то добавляешь оператор echo, т.е. получется echo GeneratePassword('123456'). А в определении функции менять ничего не надо. Судя по вопросам ты новичёк, советую почитать Энди Харриса, а потом Полла Хадсона на тему php.
Не можешь правильно подсказать как вписать я как тока не пробывал летят ошибки и все(((( echo GeneratePassword('123456') <--- здесь { $hash = md5('123456'); <--- здесь return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH); заменял как ты написал бесполезно.
Если кто может напишите полным скриптом как я понял все прописываться в x-sms.php Ну как я не прописывал не хочет работать.
может 12345 (5 символов) не рабоатет потому что config.php /** * Длина пароля, в символах */ define('MEMBERSHIP_PASSWORD_LENGTH', 6);
PHP: function GeneratePassword($salt) { $hash = md5($salt); return substr($hash,0,strlen($salt)); } попробуй так......