За последние 24 часа нас посетил 18651 программист и 1663 робота. Сейчас ищут 920 программистов ...

Управление корневой директорией

Тема в разделе "Прочие вопросы по PHP", создана пользователем kostyl, 15 авг 2009.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    TheShock
    ну я к примеру
    флоппик
    ну его нафиг
    я вообще от всех сатов избавился, сразу проблем убавилось в разы
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  3. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    пример не подходит, потому что это противоречит всей идее.
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    короче я хотел сказать, что может возникнуть такая ситуация, когда идея упадёт
     
  5. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    да не моожет быть такой ситуации :)
     
  6. kostyl

    kostyl Guest

    короче всё нормально, у каждого свой оправданные подход, только почему константы в юникоде зло я так и не понял, ну даже если не зло то почему так думали?
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Потому что считается, что
    PHP:
    1. <?php
    2. define('MYSQL_FN', '/core/includes/function/db/interface/mysql/');
    3. include(MYSQL_FN.'mysql_pdo.inc');
    4. include(MYSQL_FN.'mysql.inc');
    5. include(MYSQL_FN.'mysqli.inc');
    6. include(MYSQL_FN.'mysql_4.x.inc');
    7. include(MYSQL_FN.'mysql_3.x.inc');
    будет работать намного медленнее, чем те же самые инклюды без констант (т.е. без длиных путей, include_path задается вручную когда надо).
     
  8. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    [vs], неправильно считается:

    PHP:
    1. <?php
    2.  
    3. echo __FILE__ . "\n"; // /home/shock/Test/Of/Long/Path/Include/Is/Here/test.php
    4. define ('PATH', dirname(__FILE__) . "/");
    5.  
    6. function generateFiles ($count) {
    7.     while ($count--) {
    8.         file_put_contents (PATH . "files/file$count.php", '<?php ?>');
    9.     }
    10. }
    11. // generateFiles(500);
    12.  
    13. $start = microtime (1);
    14. for ($i = 500; $i--;) {
    15.     /**
    16.      * 0.029134
    17.      * 0.029419
    18.      * 0.029977
    19.      */ // require_once PATH . "files/file$i.php";
    20.     /**
    21.      * 0.032143
    22.      * 0.031413
    23.      * 0.032290
    24.      */ // require_once "files/file$i.php";
    25. }
    26.  
    27. echo number_format(microtime(1) - $start, 6);
    28.  
    29. ?>
    0,08853 с констрантой против 0,095846 без константы. То есть инклуд с константой на ~8% быстрее, чем инклуд с помощью set_include_path
    Обрати внимание — путь достаточно длинен (строка 3)
     
  9. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    TheShock
    У тебя в коде инклюд происходит не по include_path, а по текущей директории, где находится файл + files/
    Замени
    PHP:
    1. <?
    2. require_once "files/file$i.php"
    3. ?>
    на
    PHP:
    1. <?
    2. require_once get_include_path()."files/file$i.php";
    3. ?>
    и потом глянь на время выполнения =)
     
  10. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    теперь. ради интереса, влияет ли вообще на скорость инклудинга длина пути (тот же самый код):

    PHP:
    1. <?php
    2.  
    3. echo __FILE__; // /home/shock/test.php
    4.  /* ... */
    5.     /**
    6.      * 0.023011
    7.      * 0.023272
    8.      * 0.022740
    9.      */ require_once PATH . "files/file$i.php";
    10.     /**
    11.      * 0.024137
    12.      * 0.023736
    13.      * 0.023796
    14.      */ require_once "files/file$i.php";
    15.     /**
    16.      * 0.023705
    17.      * 0.023940
    18.      * 0.023781
    19.      */ require_once get_include_path() . "files/file$i.php";
    20.  
    21.  /* ... */
    22.  
    23. ?>
    видно, что влияет и значительно (время выполнения уменьшилось где-то на 30%)
    Время — 0,069023 против 0,071669. Разница уменьшилась до 4%. Но все-равно — с константой быстрее. Возможно, это время затрачиваемое на вызов функции get_include_path(), вместо того, чтобы просто взять из памяти значение константы.
     
  11. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Apple, добавил в последний тест.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    TheShock
    я давно перестал доверять твоим тестам
    PHP:
    1. <?php
    2.  
    3.  echo __FILE__ . "\n";
    4.  define ('PATH', dirname(__FILE__) . "/");
    5.  
    6.  function generateFiles ($count) {
    7.      while ($count--) {
    8.          file_put_contents (PATH . "files/file$count.php", '<?php ?>');
    9.      }
    10.  }
    11.  //generateFiles(500);
    12.  
    13.  $start = microtime (1);
    14.  for ($i = 500; $i--;) {
    15.      /*
    16.        0.201839
    17.        0.202342
    18.        0.199974
    19.      */
    20.      // require_once PATH . "files/file$i.php";
    21.      /*
    22.        0.106267
    23.        0.135211
    24.        0.132182
    25.      */
    26.      // require_once "files/file$i.php";
    27.  }
    28.  
    29.  echo number_format(microtime(1) - $start, 6);
    30.  
    31.  ?>
     
  13. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    даже ежу понятно что инклюд более длинного пути, не может быть быстрее инклюда короткого
     
  14. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    глупость какая. ты не можешь рассуждать, как там все устроено, не изучив детально исходники. я практически уверен, что он все-равно подставляет include_path и идет по пути той же длины(разница только в том, будет ли вызвана функция, или нет).

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

    Важно, чтобы тесты запускались сначала для одного варианта, а потом — для другого, иначе будет лаг, искажающий результат.
     
  15. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    тебе видео снять?
    так и делал
    у меня в интуитивной памяти сохранилось что при инклюде_пасе lstat вызывается один раз
    хотя я в этом дейстивительно "null", тем не менее, тесты выше
    возможно дело в разных настройках сервера

    пусть кто-нибудь ещё затестит
    Зы. А у тебя я помню другие тесты тоже "глючили"
     
  16. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Не помню, какую ты ось юзаешь, но это вполне могут быть ньюансы винды. хостятся с реальными проектами все-равно все на никсах :) ну и. плюс, я юзаю php 5.3

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

    для каждого инклуда оно вызывается один раз в любом случае :)
    хотел попредполагать, но потом подумал, что я не могу рассуждать о способе взаимодействия php с файловой системой, т.к. не имею знаний об этом :)

    пускай еще пару человек потестит (желательно, на разных системах) и уже тогда посмотрим, какая статистика получится. И еще, желательно, выдать не по три результата, раз такая пьянка, а, хотя-бы, по семь.
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  18. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
  19. kostyl

    kostyl Guest

    Ну хватит вам доказывать, лучше бы разобрались в чем действительное отличие, серваков или еще че там, настройки мож какие...
     
  20. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    кстати, может, отличие в том, что ты юзаешь Denwer с его виртуальными дисками и при обращении к файлу ты обращается не к файловой системе, а к Денверу, который уже обращается к виртуальной системе. А с set_include_path Денвер, может работает лучше. Проверь еще в консоли без всяких прокладок. Ибо Денвер на серваках не юзают.
     
  21. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    затестил, результат тот же, даже серв. не запускал
     
  22. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    +1. Всё правильно.
    Какие точечки? Архитектуру правильно надо строить.
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    http://www.php.ru/forum/viewtopic.php?t=17769
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну конечно, как будто все обязаны пускать весь поток через один файл, не надо.
     
  25. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ну да. неправильно настроенный include path работает на 30% медленнее, чем правильно-настроенный, потому что include path парсит пути и по-очереди их подключает, из-за чего может быть задержка. Про сравнение с константой там речи нет.