Некоторые подсказки: расстояние между узлами на одной глубине (например, 2 и 4 или 3 и 8 в вашем примере) является функцией глубины.
Каждая печатная строка состоит из всех узлов с одинаковой глубиной, отпечатанных с самого левого узла до самого правого узла.
Таким образом, вам нужен способ, например, упорядочить ваши узлы в массивы строк по их глубине в порядке их самого левого.
Начиная с корневого узла, поиск по ширине будет посещать узлы в порядке глубины и самого левого.
Интервал между узлами может быть найден путем нахождения максимальной высоты дерева с использованием некоторой постоянной ширины для самых глубоких узлов и удвоения этой ширины для каждой меньшей глубины, так что ширина для любой глубины = (1 + maxdepth - currentdepth) * deepestwidth.
Это число дает напечатанную «горизонтальную ширину» каждого узла на любой конкретной глубине.
Левый узел горизонтально расположен в левой половине его родительской ширины, righ-узел в правой половине. Вы вставляете фиктивные прокладки для любого узла, у которого нет родителей; проще всего сделать это, чтобы все листья были на той же глубине, что и самый глубокий узел, а blank - как их значение. Очевидно, вам также придется компенсировать ширину значений, возможно, используя максимальную ширину глубины, по крайней мере такую же широкую, как напечатанное (десятичное представление, предположительно) его наибольшего оцениваемого узла.
Для обработки сессии правильно смотрите на http://php.net/manual/en/session.configuration.php .
Там Вы найдете эти переменные:
Они управляют вероятностью сборщика "мусора" (GC) выполнения с каждым запросом страницы.
Вы могли установить тех, которые имеют ini_set () в начале Вашего сценария или .htaccess файла, таким образом, Вы получаете уверенность в некоторой степени, они будут удалены когда-то.
Debian/Ubuntu обрабатывает это с cronjob, определенным в/etc/cron.d/php5
# /etc/cron.d/php5: crontab fragment for php5
# This purges session files older than X, where X is defined in seconds
# as the largest value of session.gc_maxlifetime from all your php.ini
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm
, maxlifetime сценарий просто возвращает число минут, сессия должна быть поддержана путем проверки php.ini, это похоже на это
#!/bin/sh -e
max=1440
for ini in /etc/php5/*/php.ini; do
cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
[ -z "$cur" ] && cur=0
[ "$cur" -gt "$max" ] && max=$cur
done
echo $(($max/60))
exit 0
Используйте крон с находкой для удаления файлов, более старых, чем данный порог. Например, для удаления файлов, к которым не получали доступ, по крайней мере, в течение недели.
find .session/ -atime +7 -exec rm {} \;
Мое лучшее предположение было бы то, что Вы находитесь на общем сервере, и файлы сессии смешаны вдоль всех пользователей, таким образом, Вы не можете, ни Вы должны, удалить их. То, что можно сделать, если Вы волнуетесь по поводу масштабирования и/или Вашей пользовательской конфиденциальности сессии, должно переместить сессии в базу данных.
Начинают писать, что Cookie к базе данных и у Вас есть длинный путь к масштабированию Вас приложение через несколько серверов, когда время является назначенным.
, Кроме которого я не волновался бы очень с этими 145 000 файлов.