[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ЧПУ REQUEST_URI
phz
Вот тестирую чпу для сайта. Ссылки в виде: http://site.ru/pro-php. Подскажите как такая система будет работать по производ. если база увел. И хочу услышать как правильнее делают, может какие-то советы.

Код:

PHP
<?php
$url 
preg_replace('#/+#''/''/'.$_SERVER['REQUEST_URI'].'/'); 
$u str_replace("/",""$url);

$u mysql_real_escape_string($u);
$s mysql_query("SELECT title,text FROM `table` WHERE `url` = '".$u."' LIMIT 1");
$set mysql_fetch_array($s);

echo 
"<b>".$set['title']."</b><hr/><br/>".nl2br($set['text']);


Данные в базе:

-------------------------------------------------
| id | title | url | text |
| 1 | про php | pro-php | fdgh |
-------------------------------------------------

.htaccess:
PHP
RewriteEngine On
RewriteCond 
%{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
RewriteRule 
^(.*)$ ./index.






Спустя 13 минут, 9 секунд (15.10.2009 - 11:37) glock18 написал(а):
PHP
$url preg_replace('#/+#''/''/'.$_SERVER['REQUEST_URI'].'/'); 
$u str_replace("/",""$url);

=>
PHP
$u str_replace("/",""$_SERVER['REQUEST_URI']);


PHP
$set mysql_fetch_array($s);
=>

PHP
$set mysql_fetch_array($sMYSQL_ASSOC);


PHP
$u mysql_real_escape_string($u);


=>

PHP
if (get_magic_quotes_gpc) {
  
$u strip_slashes($u);
}
$u mysql_real_escape_string($u);


и если табличка небольшая, то тип memory поставить.

если перечисленные поправки не считать, то нормально smile.gif

Спустя 10 минут, 37 секунд (15.10.2009 - 11:48) phz написал(а):
Спасибо за ошибки, я так понял такое можно делать и пользоваться. Минусов не атк уж и много.

Спустя 15 минут, 3 секунды (15.10.2009 - 12:03) glock18 написал(а):
phz
Пользоваться можно, почему бы и нет.

Спустя 10 минут, 24 секунды (15.10.2009 - 12:14) phz написал(а):
Дорос, раньше не знал как делать. Вчера чёт в голову пришло, получилось.

Спустя 2 часа, 3 минуты, 27 секунд (15.10.2009 - 14:17) phz написал(а):
Сделал для себя тест, в базу данных залил 46 000 записей. id title url text. Все поля одинаковых названий, текстов, url. В одном ряде изменил url на другое. Получилось один уникальный ряд. Везде url = bookphp, и один pro-php.

Делаю в браузере запрос http://site.ru/pro-php и вывод очень быстро. Я пологал что будет очень медленно. Подозрительно как-то, время выдачи 0.68937400.

Я сделал индекс. на url. Может я не так что-то делаю, просто интересно это всё.

Спустя 18 минут (15.10.2009 - 14:35) glock18 написал(а):
Цитата
Делаю в браузере запрос http://site.ru/pro-php и вывод очень быстро. Я пологал что будет очень медленно. Подозрительно как-то, время выдачи 0.68937400.

Я сделал индекс. на url. Может я не так что-то делаю, просто интересно это всё.


для того, что ты показывал, это катастрофически много.

покажи запрос, каким вытаскиваешь из базы, и create table для этой таблицы (show create table <table>).

Спустя 17 минут (15.10.2009 - 14:52) phz написал(а):
Запрос:

PHP
$s mysql_query("SELECT title,text FROM `table` WHERE `url` = '".$u."' LIMIT 1");


Цитата
для того, что ты показывал, это катастрофически много.


всмысле много по времени, то есть это не нормально?

Спустя 58 минут, 28 секунд (15.10.2009 - 15:50) glock18 написал(а):
0.68 на эти 15 строк - много. я не понял, create table то дашь?

Спустя 21 минута, 29 секунд (15.10.2009 - 16:12) phz написал(а):
Вот:

SQL
CREATE TABLE `text` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`)
) ENGINE=MyISAM AUTO_INCREMENT=46090 /*!40101 DEFAULT CHARSET=utf8 */;


Вот ссылка: http://pda.mstihi.dp.ua/php

Спустя 28 минут, 21 секунда (15.10.2009 - 16:40) glock18 написал(а):
вроде все ок. сейчас у себя тест провел: возможно у тебя так долго выполняется запрос, потому что все записи одинаковы по url. Судя по explain, количество рядов будет равно общему количеству записей с этим url. хотя explain показывает предположительное число. Попробуй урлы разные сгенерируй для каждой строки. и попробуй еще раз.

UPD: вспомнил, что у тебя там тянется толстый текст из базы. может из-за него задержка такая.

Спустя 7 минут, 55 секунд (15.10.2009 - 16:48) phz написал(а):
Возможно действительно из-за текста толстого. Пол базы с од. url, а другая половина типа php1 php2 php3.

Объясни пожалуйста как польз. EXPLAIN.

Вот вставляю, и нечего:

$s = mysql_query("EXPLAIN SELECT title,text FROM `table` WHERE `url` = '".$u."' LIMIT 1");

Спустя 46 секунд (15.10.2009 - 16:49) phz написал(а):
Завтра сделаю все урл разными и проверю.

Спустя 3 минуты, 19 секунд (15.10.2009 - 16:52) glock18 написал(а):
phz
ну эта... как минимум explain лучше делать не через php. Хотя и через него можно, но из него ведь и результат надо вывести - это изврат. поставь себе клиент mysql и в нем все это делай (хотя бы phpma)

Спустя 3 минуты, 23 секунды (15.10.2009 - 16:56) phz написал(а):
Спасибо за подсказку. Сегодня вот только набрёл на статью explain и тут вы на форуме упомянули. Вот и спросил, буду пробывать, спасибо. Отпишусь.

Спустя 15 часов, 42 минуты, 19 секунд (16.10.2009 - 08:38) phz написал(а):
Сегодня заново залил базу 35999 записей. Больше почему-то не получатеся. Сделал все разные url:

love_pensi599759975996
love_pensi599759975997
love_pensi599859985998

Хотел поставить потмо индекс на url но mysql начал ругаться:

has exceeded the 'max_updates' resource (current value: 36000)

Вот можно посмотреть http://pda.mstihi.dp.ua/love_pensi599859985998.

Страно, но теперь не могу в phpMyAdmin не изменить поле, не удалить.


Спустя 4 минуты (16.10.2009 - 08:42) phz написал(а):
Хостер прислал письмо только, теперь много прояснилось:

Для того, что б один пользователь не смог израсходовать все ресурсы базы данных установлен лимит на количество запросов, которые он может выполнить за один час. Эти лимиты следующие:
Для SELECT запросов стоит ограничение 72000 запросов в час (более 20 запросов в базу в секунду).
Для UPDATE и INSERT запросов 36000 запросов в час (более 10 запросов в базу данных в секунду).

По статистике этого лимита достигает менее 0,05% пользователей виртуального хостинга, причем половина из них вызвано зацикливанием скриптов. При достижении лимита база данных MySQL выдает сообщение User has exceeded the 'max_' resource (current value: *). После этого сообщения база данных не будет принимать соединения до конца часа. В начале каждого часа счетчики запросов сбрасываются в нулевое значение.

Спустя 2 минуты, 35 секунд (16.10.2009 - 08:45) glock18 написал(а):
Цитата
That particular error will clear itself (read as reset) in about an hour I believe, however if you run into it often you should consider upgrading to premium or perhaps fine tune your site to not run so many queries where possible.


отсюда: http://byet.net/showthread.php?t=9655

UPD: да, все верно.

Спустя 5 минут, 15 секунд (16.10.2009 - 08:50) phz написал(а):
Вообще вроде всё хорошо, буду делать на сайте такое чпу.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.