Доступность URL-адреса из базы данных MySQL с использованием Php
Вопрос
Я пытаюсь создать систему регистрации, которая позволит пользователям отправлять URL-адреса своих веб-сайтов.Теперь, когда пользователь вводит URL-адрес, он проверяет в базе данных, существует ли он уже, и отклоняет его, если он существует.
Однако моя проблема связана с этим:
Если http://www.example.com
есть в базе данных и я ввожу http://example.com
, это считается другим URL-адресом с точки зрения проверки и разрешает отправку.
Есть ли правильный способ справиться с этим, помимо получения всех записей, удаления www
если присутствует, а затем сравнивать?(Что является ужасно неэффективным способом сделать это!)
Примечание :Добавление тега Laravel на случай, если у него есть какие-либо вспомогательные функции (я использую установку laravel-4).
РЕДАКТИРОВАТЬ :Это моя текущая логика проверки:
$exists_url = DB::table("user_urls")
->where('site_url', 'like', $siteurl)
->get();
if($exists_url)
{
return Redirect::to('submiturl')->withErrors('Site already exists!');
}
РЕДАКТИРОВАТЬ 2:Один из способов — взять данный URL-адрес http://www.example.com
, а затем выполните поиск в базе данных http://www.example.com
, www.example.com
, http://example.com
и example.com
.Однако я пытаюсь найти более эффективный способ сделать это!
Решение
Я думаю, что прежде чем реализовывать решение, вам следует более тщательно абстрактно конкретизировать свою политику.Существует множество частей URL-адреса, которые могут быть эквивалентными, а могут и не быть эквивалентными.Хотите ли вы рассматривать протоколы как эквивалентные? https://foo.com против http://foo.com.Некоторые поддомены могут быть псевдонимами, некоторые — нет. http://www.foo.com против http://foo.com, или http://site1.foo.com против http://foo.com.А как насчет пути URL? http://foo.com против http://foo.com/index.php.Я бы не стал тратить ваше время на написание функции сравнения, пока вы полностью не продумали свою политику.Удачи!
ОБНОВЛЯТЬ:
Что-то вроде этого, возможно:
$ignore_subdomains = array('www','web','site');
$domain_parts = explode('.',$siteurl);
$subdomain = strtolower(array_shift($domain_parts));
$siteurl = (in_array($subdomain,$ignore_subdomains)) ? implode('.',$domain_parts) : $siteurl;
//now run your DB comparison query
Другие советы
Вы можете проверить перед отправкой данных в базу данных с помощью PHP.Ниже приведен небольшой пример.Очевидно, вы можете сделать его более продвинутым по своему вкусу.
<?php
$test = "http://www.google.com";
$testa = "http://google.com";
if (str_replace("www.","",str_replace("http://","",$testa)) == str_replace("www.","",str_replace("http://","",$test))) {
echo "same";
}
else {
echo "different";
}
?>
Ниже приведен пример замены MySQL.В этом примере URL-адрес — это поле базы данных.
SELECT * FROM `urls` WHERE REPLACE(url, "http://www","") = "google.com" OR REPLACE(url,"http://","") = "google.com"
Еще раз, это очень просто, просто для вашего лучшего понимания.
Если вам понадобится дополнительная помощь, пожалуйста, дайте мне знать.