За последние 24 часа нас посетил 55151 программист и 1615 роботов. Сейчас ищут 1356 программистов ...

str_replace нагрузка

Тема в разделе "PHP для новичков", создана пользователем Mark32, 3 июн 2010.

  1. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    PHP:
    1. $phrase  = "You should eat fruits, vegetables, and fiber every day.";
    2. $healthy = array("fruits", "vegetables", "fiber");
    3. $yummy   = array("pizza", "beer", "ice cream");
    4. $newphrase = str_replace($healthy, $yummy, $phrase);
    5.  
    подскажите сильная нагрузка на сервер будет если переменных в массивах увеличу в 20 раз?
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В таком случае лучше использовать ststr():
    PHP:
    1. <?
    2. $text = strtr('You should eat fruits, vegetables, and fiber every day.', array('pizza' => 'beer'))
    upd: если из контекста не понятно - да, ststr() самая быстрая. :)
     
  3. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    спасибо! типа в данном случае обращение к серверу 1 раз независимо от кол-ва переменных?
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    К какому серверу? Интерпретатор видит эту функцию, ищет её объявление (она объявлена в Си). Выполняет.

    Как-то так. :)
     
  5. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    ok. моя цель это ссылки на сайте быстро переписать, чтобы потом правил mod_rewrite навставлять в htaccess. Кстати вопрос не отходя от темы нагрузки - кол-во mod_rewrite (например 60 штук) - это нормально, или топорное исполнение?
     
  6. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    1. Так ты просто перед загрузкой сайта, получай его содержимое пока оно не вылезло в браузер. Его и меняй. Содержимое можно перехватить через ob_start().

    2. 60 это слишком много. Лучше создай правило направляющее все запросы скрипту. А этот скрипт пусть решает что за что выдавать. :)
     
  7. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Э-э.. я как бы так и собирался сделать. Перед выводом всего контента strtr'ну его и всё готово. Не совсем пониманию зачем его перехватывать через ob_start() - а точнее совсем не понимаю.
     
  8. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не, это как вариант-подсказка (на всякий случай, да :)). Если вывод и так контролируется, то не надо ничем перехватывать. :)
     
  9. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Понятно, всё равно спасибо!!


    например у меня строки:
    #RewriteRule ^myroom/(.*)$ system/index.php?fnc_showuserdata=$1 [L]
    #RewriteRule ^avatar/(.*)$ more.php?editavatar=$1 [L]
    ...... и т.д. с разными в левой и правой частями данными...

    Каким образом можно не указать в htaccess, а перекинуть на скрипт вышеуказанные команды?
     
  10. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Правило
    Код (Text):
    1. RewriteCond %{REQUEST_FILENAME} !-d
    2. RewriteCond %{REQUEST_FILENAME} !-f
    3. RewriteRule ^(.*)$ ?q=$1 [QSA,L]
    перехватит все запросы, кроме тех, что идут к существующим папкам или файлам.

    В скрипте получаем $_GET['q']. Чистим от лишних (по бокам) слешей. Далее разбиваем по слешам и смотрим что есть. В зависимости от данных, перенаправляем куда нужно.

    "Перенаправляем", конечно, не то слово. Мы просто пишем $_GET['fnc_showuserdata'] = 'что-то'. Скрипт ниже это получает, открывает нужную страницу.

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

    Вот.
     
  11. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    а как адрес самого скрипта-обработчика прописать в htaccess?
     
  12. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. тут_скрипт.php?q=$1 [QSA,L]
    А в него - в тут_скрипт.php - уже можно подключать прочие скрипты.
     
  13. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    lexa
    Я кое с чем не согласен, можно поправлю? =)

    Не нужно аппендить строку запроса к скрипту.
    Правило, которого достаточно:

    Код (Text):
    1. RewriteEngine On
    2.  
    3. RewriteBase /
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5.  
    6. RewriteRule .+ filename.php [L]
    Из самого РНР-скрипта можно получить строку в самом полном виде, какой бы она не пришла.
    Не нужно никаких ?q=
     
  14. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Поправляй! :)

    Вопрос удобства, имхо. ^(.*)$ ?q=$1 удобнее мне потому что очевиднее. К тому же, $_GET глобален и его изменения для дальнейшей работы в скрипте кошернее изменений чего-то в $_SERVER.

    P.S. RewriteBase мне сильно не нравиться. :)
     
  15. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    А нормально использовать header('Location: ' . $RedirectTO); для этого??
    Очень инклюдить не хочется
     
  16. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Тогда в mod_rewrite смысла нет.
     
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну, ты, конечно, можешь поставить свой домашний холодильник в супермаркете и ездить туда на метро регулярно.
    Но, я бы рекомендовал сделать include и иметь холодильник дома.
    Исключительно из соображений ресурсоемкости.