Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: tinyurl для вашего сайта
Форумы портала PHP.SU » Разное » Прочее » tinyurl для вашего сайта

Страниц (1): [1]
 

1. valenok - 17 Февраля, 2009 - 01:05:10 - перейти к сообщению
Чем занимается сервис tinyurl.com я рассказывать не стану.
но своеобразный аналог можно получить припомощи следующего скрипта
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. mysql_connect('localhost','user','pass');
  4.  
  5. $mainlink = "http://".$_SERVER['SERVER_NAME'].dirname($_SERVER['PHP_SELF']);
  6. // http:// mysite.ru / dir / tiny
  7.  
  8.  
  9. if(  isset($_POST['create']) && preg_match("#^http://([a-z0-9]+\.)?[a-z0-9-_\.]+\.[a-z]{2,4}#i",$_POST['create'])  ):
  10.  $link = mysql_escape_string($_POST['create']);
  11.  $q = mysql_query("SELECT `tiny` FROM `tinyurl` WHERE `link`='".$link."'");
  12.  if(mysql_num_rows($q)==1) die("Your url: <a href='".mysql_result($q,0,0)."'>".$_SERVER['SERVER_NAME']."/".mysql_result($q,0,0)."</a>");
  13.  
  14.  $q=1;
  15.  $arr = Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
  16.  
  17. while($q!=0)
  18. {
  19.  $tiny = $arr[rand(0,10)].$arr[rand(0,10)].$arr[rand(0,10)].$arr[rand(0,10)].$arr[rand(0,10)];
  20.  $q = mysql_num_rows(mysql_query("SELECT `visits` FROM `tinyurl` WHERE `tiny`='".$tiny."'"));
  21. }
  22.  
  23. mysql_query("INSERT INTO `tinyurl` VALUES('".$tiny."','".$link."','0')");
  24. echo "your url: <a href='".$mainlink.$tiny."'>".$mainlink.$tiny."</a>";
  25.  
  26. endIf;
  27.  
  28.  
  29. if( isset($_GET['url']) && preg_match("/^([a-z]){5}$/",$_GET['url']) ):
  30.        
  31.  $_GET['url'] = mysql_escape_string($_GET['url']);
  32.  
  33.  $q = mysql_query("SELECT `link` FROM `tinyurl` WHERE `tiny`='".$_GET['url']."'");
  34.  if(mysql_num_rows($q)!=1) die('404. No such file found.');
  35.  
  36.  mysql_query("UPDATE `tinyurl` SET `visits`=`visits`+1 WHERE `tiny`='".$_GET['url']."'");
  37.  header("Location: ".mysql_result($q,0,0));
  38.  die(0);
  39.  
  40. ENDIF;
  41.  
  42. ?>
  43. <form method='post'>
  44. <input type='text' name='create' size='100' />
  45. <input type='submit' />
  46. </form>


Цитата:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Options +FollowSymlinks
RewriteRule ^(.*)$ tinyurl.php?url=$1 [L,QSA]


Базы данных у меня не осталось, и алгоритм я бы тоже предложил бы вам пока не использовать.
В среду если будет время немножко исправлю и выложе стукруту таблицы.
2. valenok - 02 Марта, 2009 - 14:26:45 - перейти к сообщению
Цитата:
CREATE TABLE IF NOT EXISTS `tinyurl` (
`tiny` varchar(5) NOT NULL,
`link` varchar(255) NOT NULL,
`visits` smallint(6) NOT NULL,
KEY `tiny` (`tiny`)
) ENGINE=MyISAM;


--

Скрипт выложен в ознакомительных целях. Не рекомендую использовать на производственных машинах
в таком виде, без оптимизации.
3. Вездеход - 02 Марта, 2009 - 15:03:53 - перейти к сообщению
valenok пишет:
Не рекомендую использовать на производственных машинах
в таком виде, без оптимизации.

я сам код не смотрел особо, но всеже - в чем проблема то будет? ))
4. valenok - 02 Марта, 2009 - 16:08:44 - перейти к сообщению
в генерации короткой ссылки
Она генерируется случайно, а потом проверяется есть ли в базе, таким образом
цикл иногда совершает кучу лишних повторений.
Можно к примеру перейти на шестнадцетиричную систему исчисления и иметь ссылки и шести
символов в соответсвии с id определенной ссылки.

 

Powered by ExBB FM 1.0 RC1