Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отбьютифаить код, Можно ли сделать красивее? 
:(
    Опции темы
champion
Дата 25.10.2011, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Такой код
Код

$referer = addslashes($_SERVER["HTTP_REFERER"]);  
if ( substr($referer, 0, 7) !== "http://" ) {
        $referer = "http://" . $referer;
}
$referer = parse_url($referer);
$referer = $referer["host"];

Можно ли как-то переписать его красивее?

Это сообщение отредактировал(а) champion - 25.10.2011, 08:56


--------------------
user posted image
PM MAIL   Вверх
ksnk
Дата 25.10.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Если от реферера требуется только хост, то не имеет большого смысла делать ему addslashes.
Вероятно, проще будет выковырять хост с помощью регулярки, так как кроме http бывают еще и https.
Код

~(?:https?://|)([^/]+)*.?~i

примерно такой...




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
patap
Дата 25.10.2011, 09:41 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



вот еще интересная функция parse_url есть, тоже может быть уместной


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
champion
Дата 25.10.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Цитата(ksnk @  25.10.2011,  09:35 Найти цитируемый пост)
Если от реферера требуется только хост, то не имеет большого смысла делать ему addslashes.

реферер заносится в БД, на всякий случай фильтрую

Да, у самого была мысль сделать регулярку, практически такая же
 
Код

/^(?:https?\:\/\/)?([^\/]+).*/


По скорости (parse_url и preg_replace) работают по разному, сейчас как раз выяснил, что parse_url не много, но быстрее регулярки
P>S> перед : слеш разве не ставится?

Это сообщение отредактировал(а) champion - 25.10.2011, 10:17


--------------------
user posted image
PM MAIL   Вверх
ksnk
Дата 25.10.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(champion @  25.10.2011,  10:15 Найти цитируемый пост)
 перед : слеш разве не ставится?

В этом случае работает и так, хотя preg_quote ':' слешит.
Цитата(champion @  25.10.2011,  10:15 Найти цитируемый пост)
parse_url не много, но быстрее регулярки

Не удивительно. Однако parse_url не корректно работает с адресами без http:// , так что в процедуру вычисления скорости нужно включить еще механизм "дописывания" протокола к неполному урлу  smile 

Это сообщение отредактировал(а) ksnk - 25.10.2011, 10:42


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
champion
Дата 25.10.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Так и сделал.

Тем не менее быстрее чем preg_replace. 

Это сообщение отредактировал(а) champion - 25.10.2011, 11:47


--------------------
user posted image
PM MAIL   Вверх
Absinthe
Дата 25.10.2011, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Однако parse_url не корректно работает с адресами без http:// 
 Где это?

Код

var_dump(parse_url("/1/2?p=3#4"));


Цитата

array
  'path' => string '/1/2' (length=4)
  'query' => string 'p=3' (length=3)
  'fragment' => string '4' (length=1)


Все нормально.
PM MAIL   Вверх
bars80080
Дата 25.10.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Absinthe @  25.10.2011,  13:42 Найти цитируемый пост)
Все нормально. 

а хост где?

Код

$s = parse_url("site.com/1/2?p=3#4");
dump($s);



Код

Array[3]
   path => "site.com/1/2"
   query => "p=3"
   fragment => "4"


Код

$s = parse_url("http://site.com/1/2?p=3#4");
dump($s);


Код

Array[5]
   scheme => "http"
   host => "site.com"
   path => "/1/2"
   query => "p=3"
   fragment => "4"

PM MAIL WWW   Вверх
Absinthe
Дата 25.10.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



bars80080, ну все правильно же, разве нет?

site.com/1/2?p=3#4 - это то же самое, что и current-scheme://current-host/site.com/1/2?p=3#4

Это сообщение отредактировал(а) Absinthe - 25.10.2011, 17:28
PM MAIL   Вверх
ksnk
Дата 25.10.2011, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Absinthe, parse_url работает ПРАВИЛЬНО с точки зрения структуры url, но не КОРРЕКТНО с точки зрения решаемой задачи.
Простой юзер, когда видит в тексте строчку site.com/1/2 искренне верит, что она ведет на site.com, а совсем даже не на current-host. А юзеров обманывать нельзя   smile



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bars80080
Дата 25.10.2011, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



именно, с точки зрения чоловека не правильно. потому и приходится делать ручной (чоловеческий) разбор.
PM MAIL WWW   Вверх
Absinthe
Дата 25.10.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

но не КОРРЕКТНО с точки зрения решаемой задачи.
 Ну так в решаемой задаче и нет URL. Я просто заступился за функцию, которая парсит URL.

Цитата

именно, с точки зрения чоловека не правильно. потому и приходится делать ручной (чоловеческий) разбор.
 С точки зрения человека функция на 100% права, если что. Просто ты не понимаешь разницы между "адресом сайта при каком-то разборе пользовательских данных" и URL.
PM MAIL   Вверх
ksnk
Дата 25.10.2011, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Absinthe @  25.10.2011,  18:55 Найти цитируемый пост)
 С точки зрения человека функция на 100% права, если что. Просто ты не понимаешь разницы между "адресом сайта при каком-то разборе пользовательских данных" и URL.

Возможно, окажется полезно посмотреть таки на задачу, решаемую топикстартером, и потом уже делать выводы? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bars80080
Дата 25.10.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Absinthe @  25.10.2011,  18:55 Найти цитируемый пост)
С точки зрения человека функция на 100% права, если что. Просто ты не понимаешь разницы между "адресом сайта при каком-то разборе пользовательских данных" и URL. 

ай-яй-яй, зачем же вот так просто и переход на личности. быть злым - очень плохо, можно невзначай умереть. и здесь я совершенно не шучу, видел одного человека, которого съела злоба через неопределённое врачами заболевание.
даже если показалось что-то плохое в словах собеседника - надо стараться выглядывать хорошее

а вот там я немного пошутил, указывая, что под специфическую задачу приходится собирать своё решение. причём специфика задачи происходит от самого человека. не желал бы - и обошёлся бы стандартными средствами

и я знаю, что есть URL
PM MAIL WWW   Вверх
Absinthe
Дата 25.10.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Возможно, окажется полезно посмотреть таки на задачу, решаемую топикстартером, и потом уже делать выводы? 
 Так ведь я не топикстартеру отвечал, а тебе. Я сказал лишь, что с АДРЕСАМИ(URL) они работают правильно.

Цитата

и я знаю, что есть URL
 Ну тогда и с точки зрения человека оно правильно работает с URL, не так ли?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0845 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.