| |
|
|
| | Вот вижу на сайтах для мобилок: после того, как пользователь отослал платную СМС, для него формируется уникальная ссылка на скачивание. Как это делается? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 16:42)
| | | Думаю, генерируется ссылка на скрипт, которому в GET-параметрах передается каким-то образом имя нужного файла. Этот скрипт загружает файл в память сервера и отдает пользователю, снабдив соответствующими заголовками. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 16:42)
| | | а что именно интересует? как ссылка формируется или что-то другое?
ссылку можно генерить например из следующей строки
номер_телефона_дата_время_id_картинки_id_заказа
таким образом из строки типа
79091234567_30-07-2007-20:23:51-34234-342340
используя встроенные функции php или mysql для получения контрольной суммы формируем уникальный ключ, который можно использовать в дальнейшей работе
<?php
$str = "79091234567_30-07-2007-20:23:51-34234-342340";
print ("\nSHA1: " . md5($str) . "\n");
print ("MD5: " . sha1($str) . "\n");
?>
|
для MySQL:
SELECT (MD5('79091234567_30-07-2007-20:23:51-34234-342340'))
SELECT (SHA1('79091234567_30-07-2007-20:23:51-34234-342340')); | |
| |
|
|
| |
|
|
| |
для: Unreal
(30.07.2007 в 20:34)
| | | Ну хорошо: такой ключ, как вы показали, можно сформировать. А как его привязать к файлу, предназначенному для скачивания? Ведь если пользователь поймёт, в какой директории этот файл лежит, он может попытаться качать напрямую из этой директории бесплатно? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 22:04)
| | | а имя-то он как узнает? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 22:04)
| | | А как его привязать к файлу, предназначенному для скачивания?
Создаете таблицу минимум с двумя полями - ключ и имя файла. Запрашиваете страницу с ключем. В базе проверяется есть ли такой ключ. Если нет, то надо сообщить, что нету такого. Если есть, то узнать, что это за тип файла (тогда таблицу желательно расширить) и послать заголовок Content-type. После, допустим, функцией readfile() посылаете файл пользователю и можно удалять запись с текущим ключем. Хотя это несколько жестоко. Лучше будет дать, например, сутки на скачивание, а после ссылка с ключем будет недействительна. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 16:42)
| | | Вы можете обрабатывать SMS-запросы собственным сервисом.
Вашему сервису по http-протоколу будут передаваться данные запроса, абонент получит ответ, выданный Вашим сервисом.
В POST-запросе передаются:
num - сервисный номер
operator - название оператора
phone - номер телефона без 3 цифр
abonent - уникальный идентификатор абонента или полный номер телефона
text - текст SMS.
Ответ от Вашего сервиса должен быть в кодировке UTF-8, может содержать символы латинского и русского алфавита, цифры, а также, символы: ;:,.?/!#$*()-_=+@
Другие символы будут заменены на пробелы.
Если в ответе нет символов кириллицы - максимальная длина ответа равна 160 символам, с кириллицей - 71.
Если ответ превышает максимальную длину, он обрезается.
Пример обработчика на PHP:
<?php
error_reporting(0);
$num=intval($_POST['num']);
$operator=rawurldecode($_POST['operator']);
$phone=rawurldecode($_POST['phone']);
$text=rawurldecode($_POST['text']);
$abonent=rawurldecode($_POST['abonent']);
/*
...обрабатываем данные (тут можно и ссылку сгенерить)
$result=...
*/
if (iconv_strlen($result,'utf-8')>160) $result=iconv_substr($result,0,160,'utf-8');
print $result;
?> | |
| |
|
|
| |
|
|
| |
для: disable
(30.07.2007 в 21:52)
| | | $operator=rawurldecode($_POST['operator']);
$phone=rawurldecode($_POST['phone']);
$text=rawurldecode($_POST['text']);
$abonent=rawurldecode($_POST['abonent']);
rawurldecode() писать не надо. | |
| |
|
|
| |
|
|
| |
для: Unkind
(30.07.2007 в 22:23)
| | | это просто из jep'овского примера | |
| |
|
|
| |
|
|
| |
для: Disable
(30.07.2007 в 22:26)
| | | Где видел? | |
| |
|
|
| |
|
|
| |
для: Unkind
(30.07.2007 в 22:48)
| | | тут
http://download.jep.ru/0/11/help/18/ | |
| |
|
|
| |
|
|
| |
для: Disable
(30.07.2007 в 23:15)
| | | Ну и неверно. Интерпретатор автоматически декодирует эти шестнадцатеричные представления некоторых символов. | |
| |
|
|
| |
|
|
| |
для: Unkind
(30.07.2007 в 23:30)
| | | вопрос не об этом :) | |
| |
|
|
| |
|
|
| |
для: Disable
(30.07.2007 в 23:38)
| | | "Если есть, то узнать, что это за тип файла (тогда таблицу желательно расширить) " - не пойму: для чего нужно расширять таблицу из-за типа файла? Ведь тип можно узнать скриптом из его названия, если он в базе записан сразу с расширением... | |
| |
|
|
| |
|
|
| |
для: coloboc66
(29.08.2007 в 14:17)
| | | Если заранее известны типы файлов, которые будут загружаться, то это, конечно, лишнее. | |
| |
|
|
| |
|
|
| |
для: Unkind
(29.08.2007 в 15:29)
| | | Ну вот я сделал уникальный ключ и отдаю такую ссылку:
http://somehost.com/wap/download.php?key=089f12dbab854eb9d1ef2a42b60926bd
Это правильно? Ничего, что она такая длинная? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(29.08.2007 в 16:57)
| | | Судить о правильности надо по коду, а не по ссылке. | |
| |
|
|
| |
|
|
| |
для: Unkind
(29.08.2007 в 17:16)
| | | Ну вот такой я думаю, алгоритм:
Мой скрипт получает от оператора в ГЕТ-переменной текст SMS с id картинки. Этот текст я дополняю, шифрую в md5 и полученный ключ кладу в таблицу orders. В соседнюю ячейку кладу незашифрованный id картинки и в тексте ответной смс отправляю такую ссылку, где ГЕТ-параметром и является упомянутый ключ. Пользователь переходит по данной ссылке и РНР-скрипт опять берёт значение ГЕТ-параметра, сравнивает его с имеющимся в БД в таблице orders. Если есть такой, то достаёт из таблицы соответствующий ему id картинки. Потом по этому id определяет имя и путь к файлу. Ход мысли у меня правильный?!
Ну и остаётся сформировать заголовок и как-то отдать файл на скачивание - вот это я ещё не знаю как делать.
А про длину ссылки я спрашиваю потому, что не знаю, как пользователь сотового реально её набирает из полученного смс. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(29.08.2007 в 17:35)
| | | Что то я не совсем понял... Вы по мд5 достаете нужный файл? Так ведь мд5 не всегда уникальный. Рано или поздно он совпадет с другим. Или я не так понял? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(29.08.2007 в 16:57)
| | | Ну, юзер же её не наизусть учить собрался=) у большинства мобилок ссылка выделяется целиком и юзеру остается только нажать на "зелененькую". | |
| |
|
|
| |
|
|
| |
для: Гончий пёс
(29.08.2007 в 17:20)
| | | Так у меня ссылка на файл *.php А вап-броузер будет обрабатывать файл с таким расширением? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(01.10.2007 в 14:14)
| | | +) заголовки то ты отправляешь ваповские, или нет? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(01.10.2007 в 14:14)
| | | Браузеры вообще не смотрят на расширение. | |
| |
|
|
| |
|
|
| |
для: Unkind
(01.10.2007 в 14:48)
| | | Что-то я запутался: что во что нужно включать - код РНР в файл *.wml или код wml в файл *.php ?
Или всё вообще не так делается? Я хочу загрузить в вап-броузер страничку с названиями категорий клипов, а эти названия брать с помощью РНР из текстового файла, лежащего на сервере. Каков сам принцип совместной работы wml и php ?! | |
| |
|
|
| |
|
|
| |
для: coloboc66
(01.10.2007 в 15:27)
| | | Да то же самое, что и с HTML.
Отправляются соответствующие заголовки, формируется WML-код и отправляется клиенту. Какой URI значения не имеет. В HTTP вообще нет никаких файлов.
Файл - определенное кол-во информации, имеющее имя и хранящееся в постоянной памяти. HTTP-документы - не файлы. | |
| |
|
|
| |
|
|
| |
для: Unkind
(01.10.2007 в 17:45)
| | | Ну как вап-броузеру всё-равно расширение? Просто я тестирую в Опере, а не в мобилке, но думаю, что эти броузеры работают аналогично, хотя могу ошибаться.
Вот файл index.php
<?
echo "<?xml version=1.0 encoding=UTF-8?><!DOCTYPE wml PUBLIC -//WAPFORUM//DTD WML 1.2//EN http://www.wapforum.org/DTD/wml12.dtd><wml><head><meta http-equiv=Cache-Control content=no-cache forua=true/></head><card id=index title=Главная страница>";
?>
<p align="center">
<a href=show_cat1.php>Категория1</a><br/>
<a href=show_cat1.php>Категория1</a><br/>
<a href=show_cat1.php>Категория1</a><br/>
</p>
</card></wml>
|
Он броузером читается правильно.
А вот файл index.wml
?xml version=1.0 encoding=UTF-8?>
<!DOCTYPE wml PUBLIC -//WAPFORUM//DTD WML 1.2//EN http://www.wapforum.org/DTD/wml12.dtd>
<wml>
<head>
<meta http-equiv=Cache-Control content=no-cache forua=true/></head>
<card id=index title=Главная страница>
<p align="center">
<?
echo "<a href=show_cat1.php>Категория1</a><br/><a href=show_cat1.php>Категория1</a><br/><a href=show_cat1.php>Категория1</a><br/>";
?>
</p>
</card></wml>
|
Броузер выдают ошибку XML-документа. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(02.10.2007 в 09:51)
| | | надо было еще заголовок послать
<?php
header("Content-type: text/vnd.wap.wml");
echo '<?xml version="1.0"?>';
echo "\r\n";
echo '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">';
echo "\r\n";
echo '<wml>';
?>
|
| |
| |
|
|
| |
|
|
| |
для: zavragnov
(02.10.2007 в 10:21)
| | | to zavragnow:
Так в вашем примере этому файлу можно присвоить расширение *.wml ? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(02.10.2007 в 10:33)
| | | с помощью modRewrite
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule index.wml /index.php
|
| |
| |
|
|
| |
|
|
| |
для: coloboc66
(02.10.2007 в 09:51)
| | | Ну как вап-броузеру всё-равно расширение?
Всё равно! Забудьте про расширение. В Вашем примере много ошибок, связанных с тем, что Вы не берете значения атрибутов в кавычки.
Писать "<a href=show_cat1.php>Категория1</a>" нельзя.
Нужно писать
<a href="show_cat1.php">Категория1</a>
|
Тоже самое с другими тегами. | |
| |
|
|
| |
|
|
| |
для: Unkind
(02.10.2007 в 15:11)
| | | Ну вот тут нет ошибок, кажется, всё-равно РНР-код не работает.:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<head>
<meta http-equiv="Cache-Control" content="no-cache" forua="true"/></head>
<card id="index" title="Главная страница">
<p align="center">
<?php
header("Content-type: text/vnd.wap.wml"); //тут не знаю - надо-ли?
echo '<a href="show_cat1.php">Категория1</a><br/><a href="show_cat2.php">Категория2</a><br/><a href="show_cat3.php">Категория3</a><br/>';
?>
</p>
</card>
</wml>
|
| |
| |
|
|
| |
|
|
| |
для: coloboc66
(02.10.2007 в 15:49)
| | | Надо отправлять заголовки ДО вывода тела документа. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(02.10.2007 в 15:49)
| | | Заголовки надо посылать первыми, а уже потом все остальное выводить в браузер, либо использовать буферизацию вывода, если нет возможности послать их первыми!
<?php
header("Content-type: text/vnd.wap.wml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<head>
<meta http-equiv="Cache-Control" content="no-cache" forua="true"/></head>
<card id="index" title="Главная страница">
<p align="center">
<?php
echo '<a href="show_cat1.php">Категория1</a><br/><a href="show_cat2.php">Категория2</a><br/><a href="show_cat3.php">Категория3</a><br/>';
?>
</p>
</card>
</wml>
|
| |
| |
|
|
| |
|
|
| |
для: zavragnov
(03.10.2007 в 10:46)
| | | Я ничего не понимаю: ваш вышеприведенный код, zavragnov, не работает, если его сохранить как index.wml, но работает, если его сохранить как index.php. Вы писали, что нужно использовать RewriteRule Проверил - на самом деле так. В то же время Unkind упорно утверждает, что браузер расширение не интересует. Уважаемый Unkind, приведите пожалуйста пример файла *.wml со вставленным в него РНР-кодом. Я уже два дня мучаюсь, и никак не добьюсь правды с этим вопросом. А вопрос такой: как встроить код РНР в файл с расширением *.wml ? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(30.07.2007 в 16:42)
| | | У меня на сайте стоит такая штука.
Вопрос уникальности ссылки я решил очень просто: пароль, входящий в состав ссылки, действует только один раз. То есть после входа по этому паролю он вычеркивается из списка действующих паролей. | |
| |
|
|
| |
|
|
| |
для: Владимир55
(02.10.2007 в 00:28)
| | | Да - извиняюсь перед всеми, всё получается так, как ВЫ и писали. Просто я, дурак, пользовался для написания скриптов в UTF-8 Блокнотом от Виндовс. Этого делать нельзя, оказывается.... Попутный вопрос - как лучше писать под UTF-8, что использовать? И смогут ли русскоязычные посетители сайта без проблем пользоваться моими скриптами в такой кодировке? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(06.10.2007 в 22:28)
| | | Вот на такую ссылку Опера реагирует нормально:
<a href="http://somehost.com/wap/download.php?itemid=000001">Скачать</a>
А симулятор вап-броузера даёт ошибку 413 (слишком длинный запрос). Почему? | |
| |
|
|