Сервис скрытия ссылок , нужна помощь

Статус
В этой теме нельзя размещать новые ответы.
  • Заблокирован
  • #11
Вот это и смущает, что может пойти большая нагрузка.
В связи с этим и интересуюсь, как это все правильно и оптимизированно сделать.
1. Сразу большая нагрузка ниоткуда не возьмется. Может статься, что она не случится вообще. Не надо бояться этой абстрактной, но такой страшной "большой нагрузки".

2. Даже если она вдруг случится, ничего страшного. Из РОВД не выедет ОМОН, приставы не заставят продать квартиру. Просто хостер предупредит о том, что мол надо бы подкинуть еще бабла или оптимизировать скрипты. В крайнем случае, временно приостановят действие аккаунта. Чуешь, сколько "если бы"?

Вывод: (не только для этого скрипта, но и вообще) проблемы надо решать по мере их поступления. Потому что решать неслучившиеся проблемы можно бесконечно.

Сюда form.php будут передоваться данные с формы .

И чувствуется такой немой вопрос... "а чо дальше?"
Ок, давай устроим интерактивные курсы по php для начинающих :)

Первое задание: написать алгоритм работы программы.
Типа
1. Пользователь вводит в форму адрес, который нужно спрятать и отправляет форму на сервер.

2. Скрипт принимает этот (длинный) адрес адрес и шифрует его, делая из него короткий.

3. ...

Кстати, что это за форма такая странная? Колись, хоть один учебник по PHP вообще читал дальше вступления? :)
 
:) Читал, только сложно дается.:(
 
делается через редирект, в базу заносишь в любом виде закодированный id ссылки, если он постоянный и по нему же обращаешься
 
form.php:
PHP:
<?php

$link = ( isset( $_POST['link'] ) ? $_POST['link'] : '' );

if ( $link ) {
	$link = trim( $link ); // у кого нет мэджик квотс, тот вставляет слэши самостоятельно
	$q = mysql_query( "insert into linkz (link) values ('{$link}') ");
	
	if ( $q ) {
		$leeched = 'http://example.com/' . mysql_insert_id( $q );  // example.com - твой сайт
		echo "Вот твоя мега ссылко &mdash; <a href='{$leeched}'>{$leeched}</a>"; // ну вывод сам облагораживай )
	} else {
		// ошибка
	}
	
} else {
	// ошибка
}

?>

leech.php:
PHP:
<?php

$leeched = ( isset( $_GET['l'] ) ? (int) $_GET['l'] : '' );

if ( $leeched ) {
	
	$q = mysql_query( "select link from linkz where id = '{$leeched}' limit 1" );
	
	if ( $q && mysql_num_rows( $q ) ) {
		
		$rez = mysql_result( $q, 0 ); // не менять, самый быстрый вариант
		header("Location: $rez"); // ну и перенаправление тоже поменяй.. 
		
	} else {
		// такой ссылки нет
	}
	
} else {
	// баг, так как либо нет ссылки, либо это подстава
}

?>

.htaccess:
Код:
RewriteEngine On
RewriteRule ^/([0-9]+)$ leech.php?l=$1 [L]

Таблица linkz:
CREATE TABLE `linkz` (
`id` MEDIUMINT( 6 ) NOT NULL ,
`link` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM



Всё, прыгаем от счаться.. Что тут сложного? оО
пс. жду спасибо ;)
 
Неплохо, только какие нафиг magic_quotes, нужен mysql_real_escape_string или хотяб mysql_escape_string (если грузить вторым запросом сервер не хочется) перед заносом в базу.
Несколько улучшений по form.php в соотв. строках

PHP:
$link = isset( $_POST['link'] ? trim($_POST['link']) : '' );
Чтобы не было пустых урлов.

PHP:
$q = mysql_query( "insert into linkz (link) values ('.mysql_real_escape_string($link).') ");
Безопасное занесение в бд.

PHP:
echo 'Вот твоя мега ссылко &mdash; <a href=".htmspecialchars($leeched).'">'.htmspecialchars($leeched).'</a>';
Для защиты от XSS

leech.php
PHP:
$leeched =  isset( $_GET['l'] ) ? (int) $_GET['l'] : 0; // суроггатные поля в мускуле обычно начинаются с 1, так что ничего не выберет
Тут mysql_escape_(real)_string можно не применять ибо все равно $leeched приведет к инту.
 
anarki, ты не прав..

PHP:
$link = isset( $_POST['link'] ? trim($_POST['link']) : '' );

это ты не заметил?
PHP:
$link = trim( $link ); // у кого нет мэджик квотс, тот вставляет слэши самостоятельно


далее.
PHP:
$q = mysql_query( "insert into linkz (link) values ('.mysql_real_escape_string($link).') ");

эта хрень вообще не сработает, т.к. кавычки не те. И, кстати, читай ман.
magic_quotes_gpc boolean
Sets the magic_quotes state for GPC (Get/Post/Cookie) operations. When magic_quotes are on, all ' (single-quote), " (double quote), \ (backslash) and NUL's are escaped with a backslash automatically.

Note: If the magic_quotes_sybase directive is also ON it will completely override magic_quotes_gpc. Having both directives enabled means only single quotes are escaped as ''. Double quotes, backslashes and NUL's will remain untouched and unescaped.

See also get_magic_quotes_gpc()

и последнее.
PHP:
$leeched =  isset( $_GET['l'] ) ? (int) $_GET['l'] : 0; // суроггатные поля в мускуле обычно начинаются с 1, так что ничего не выберет

бред в чистом виде, снова ты не заметил -
PHP:
if ( $leeched ) {
 
Я хоть и писал пост ближе к ночи, однако могу обосновать свои замечания.
Первый trim стоит там(выше условия) потому, что строка с пробелами не есть false.
Код:
anarki:~/develsite/public_html/nulled$ php -r 'var_dump((bool)"  ");'
bool(true)
В твоем варианте юзер вобъет строку с пробелами, и условие первое выполнится(в if'e true). Дальше пойдет запрос в mysql, вставится пустой(!) линк(даже не линк, а пустая строка), потому что ты его обрезал, через trim. Ошибки никакой не будет.

Далее насчет кавычек, это просто опечатко. Например сделать так:
PHP:
$q = mysql_query('insert into linkz (link) values ("'.mysql_real_escape_string($link).'") ');
Насчет magic_quotes можешь сам сходить почитать - Для просмотра ссылки Войди или Зарегистрируйся

Последнее($leeched) только для ясности, чтобы не забывать что оно типа int, так что не бред.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху