вопрос: как программно узнать размер доступного дискового пространства на хостинге

123 4
stealthy
На сайте с 15.06.2006
Offline
69
2731

Нужно на виртуальном хостинге узнать из CGI скрипта (Perl/PHP/etc) размер свободного дискового пространства из доступной, отведенной хостером квоты.

df - как правило к ней нет доступа.

statvfs - выдает информацию по всему разделу винта

Какие решения?

Twilight CMS (http://www.twl.ru): есть Free версия, очень проста и удобна в использовании. Консультирую по любым вопросам. Новый спорт - практическая стрельба (http://nikit.in) - не для офисного планктона.
Andreyka
На сайте с 19.02.2005
Offline
822
#1
stealthy:
Нужно на виртуальном хостинге узнать из CGI скрипта (Perl/PHP/etc) размер свободного дискового пространства из доступной, отведенной хостером квоты.

df - как правило к ней нет доступа.
statvfs - выдает информацию по всему разделу винта

Какие решения?

exec(repquota)

Не стоит плодить сущности без необходимости
M
На сайте с 03.03.2004
Offline
43
#2

Курить мануалы

<?php

disk_free_space();

?>

Дневник БоГа (http://www.seriousrevenue.com/). Лента SEO форумов (http://www.seriousrevenue.com/scripts/rubot/). Статистика денег (http://www.seriousrevenue.com/scripts/rate/).
stealthy
На сайте с 15.06.2006
Offline
69
#3

Покурил мануалы (я не PHPшник, поэтому не знал, что есть прикладные функции специально для этого дела). disk_free_space хоть убейся веником на всех хостингах рапортует какую-то ересь, похожую на количество доступного места на винте в целом. Уж больно большие цифры (Гигабайты) там получаются. При этом от пути, который я ей передаю результат не зависит. Примерно то же самое выдает statvfs.

repquota по всем признакам запускается нормально, но на выходе - пусто. Может ей какие права нужны специальные, есть опыт её использования на виртуальных хостингах?

K
На сайте с 12.07.2006
Offline
295
Kpd
#4

stealthy, можно рекурсивно пройтись по всем папкам, просуммировать размеры и вычесть полученное число из квоты. Будет гарантированно работать на любом хостинге, но результат с погрешностью (чем больше мелких файлов, тем больше погрешность). Если не програмер, то утром поищу код функции обхода каталогов.

stealthy
На сайте с 15.06.2006
Offline
69
#5

kpd, программер. Предложенный вариант не годится, поскольку он требует:

а) знать квоту клиента для хостинга, что в условиях отчуждаемого программного продукта нереально.

б) уйму времени на рекурсивный обход.

Идея проста - если места не осталось, то производить какие-то действия (блокировать запись, оповещать пользователя и т.п.). Если я при каждом действии буду обход директорий устраивать... Сами понимаете не выход.

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

В общем, скорее нужно поставить вопрос так: как реализуются квоты на хостингах, какими средствами? Ведь в /etc/passwd в поле квот для пользователей одни нули. Проверял на мастерхосте, из чего попутно выяснил давно интересующую меня вещь - на одной машине размещено ~500 сайтов. А я думал что 1000-2000, ненамного ошибся, в общем. Не суть, короче если квоты на пространство хранятся где-то в системных ресурсах - значит останется понять можно получить к ним доступ в рамках стандартных для хостинга прав. Или это реализуется каким-то внешним софтом, тогда вероятно это никак не получается.

Иногда жалеешь что не юниксоид.

AN
На сайте с 05.06.2004
Offline
243
#6

А задать этот вопрос хостеру?

Размещу ваши баннеры на посещаемых сайтах. Места еще есть! Возможен безнал. (/ru/forum/324945) Нужны копирайтеры/рерайтеры - медики. Пишите в личку. (/ru/forum/676932)
K
На сайте с 12.07.2006
Offline
295
Kpd
#7
stealthy:
а) знать квоту клиента для хостинга, что в условиях отчуждаемого программного продукта нереально.

На мастерхосте (и у большинства других хостинг-провайдеров) дисковая квота указана в тарифном плане. Нереально спросить у клиента на каком тарифном плане он сидит? :)

stealthy:
б) уйму времени на рекурсивный обход.

Если размер всех файлов > 500 метров и выполнять обход раз в минуту, то тормоза обязательно будут, но зачем вам такие извращения? :) Пусть скрипт обхода записывает результат в текстовый файл (или в базу) и выполняется раз в несколько часов, никаких тормозов не будет (реализовал эту схему на одном из мастерхостских сайтов).

Кстати, на мастерхосте база данных также учитывается в дисковой квоте, не забудьте и её посчитать (если она существенная).

ОФФТОП. Во всех нормальных универах програмерам уже на первом/втором курсе объясняют что такое рекурсивные функции и для решения каких задач их можно эффективно использовать.

stealthy
На сайте с 15.06.2006
Offline
69
#8

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

Кроме того хостер - это админы. А тут вопрос чисто программерский. Вероятнее всего не ответят.

kpd, невозможно спрашивать у клиента на каком он тарифном плане, как правило они этого не знают. А если через 3 года они переедут? А ты уже к сайту отношения не имеешь? Учить их прописывать где то в конфигах квоту и составлять на это документацию, которую или не прочтут или забудут? В конце концов можно просто ошибиться при записи значения куда-то. Это не подход, необходимо все делать автоматически, чтобы пользователь установил и занимался своим бизнесом, сапоги там по интернету продавал...

Кстати, сколько времени выполняется Ваш скрипт, который на Мастерхосте, есть тайминг?

Размер файлов совокупный на подсчет занимаемого места влиять никак не будет. Будет влиять их количество, немного влиять будет еще глубина директорий. Можно, конечно считать раз в час, но:

а) не везде есть cron, а веб-скрипту раз в час выполняться не всегда удастся.

б) раз в час это ОЧЕНЬ неоперативно, нужно актуально понимать сколько места доступного есть.

СУБД мы не используем, поэтому считать их нет смысла, ну а если на то дело пошло на многих хостингах в квоту включена еще и почта, которая, кстати, никак на файловой системе не видна. Так что посчитать её предложенным способом вообще невозможно, разве только сразу вычитать из квоты лимит на почту, который тоже где-то там внутри задается.

Оффтоп не совсем понял. Где нужно рекурсия используется нами и очень эффективно, в частности парсеры все у нас с рекурсиями. Так что если Вы подумали что мы её избегаем как "сложного" программерского приема - это не так. В данном случае этот подход по сути своей очень экстенсивный и имеет ограничения, так что нужно искать другое, инженерно правильное и элегантное решение. Ведь при копировании по FTP система рано или поздно выдает тебе сообщение об ошибке записи, значит FTP сервер знает о квоте от системы. Значит её можно получить (очевидно). Вопрос есть ли у веб скрипта на это права.

В общем, продолжаем эксперименты.

-EX-
На сайте с 07.07.2006
Offline
180
#9

stealthy, эту информацию можно брать из файлов в аккаунте на хостинге... На моем хостинге, например, есть папка ".cpanel-datastore"... Там есть несколько файлов и в одном из них это прописано... Как добраться к файлу придумайте сами... ;)

С уважением, Андрей aka EX
K
На сайте с 12.07.2006
Offline
295
Kpd
#10
stealthy:
Понятно, что гуру сидят в каждой приличной конторе, только до них дойти нельзя, на звонки и письма сажают тех, кто помоложе.

Неучи есть везде, но к техподдержке мастерхоста это относится в наименьшей степени :)

stealthy:
Кроме того хостер - это админы. А тут вопрос чисто программерский. Вероятнее всего не ответят.

Если это хоть как-то может повредить безопасности сервера, то не ответят наверняка, и правильно сделают. Мало ли какие бредовые мысли пришли в голову программеру :)

stealthy:
невозможно спрашивать у клиента на каком он тарифном плане, как правило они этого не знают.

Спроси в техподдержке, это они наверняка знают и подскажут.

stealthy:
А если через 3 года они переедут?

Переезд это вообще отдельная песня. Каждый хостинг-провайдер предоставляет свой набор ресурсов (исходя из своих соображений безопасности и эффективности), поэтому перевести перевести сложный сайт от одного провайдера к другому без доработок практически нереально.

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

А зачем это пользователю вообще знать? Если превысит квоту (дополнительное пространство на мастерхосте ему автоматически выделят), то получит об этом письмо (а ещё до превышения квоты получит гору писем о том что место заканчивается).

stealthy:
Кстати, сколько времени выполняется Ваш скрипт, который на Мастерхосте, есть тайминг?

ХЗ. В лимит 30 укладывается :). Завтра точно посмотрю.

stealthy:
Размер файлов совокупный на подсчет занимаемого места влиять никак не будет.

А про размер кластера не забыли? Сколько места займут 1024 файла размером 1 байт каждый?

stealthy:
б) раз в час это ОЧЕНЬ неоперативно, нужно актуально понимать сколько места доступного есть.

Если очень нужно оперативно всё знать, то лучше посоветоваться с техподдежржкой.

stealthy:
СУБД мы не используем, поэтому считать их нет смысла, ну а если на то дело пошло на многих хостингах в квоту включена еще и почта, которая, кстати, никак на файловой системе не видна.

А где в файловой системе найти базу данных? Я считаю её средствами MySQL. С почтой не сталкивался, но наверняка и её можно посчитать через какой-нибудь интерфейс для работы с почтой.

stealthy:
В данном случае этот подход по сути своей очень экстенсивный и имеет ограничения, так что нужно искать другое, инженерно правильное и элегантное решение.

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

stealthy:
Ведь при копировании по FTP система рано или поздно выдает тебе сообщение об ошибке записи

Ни разу не было таких проблем из-за дисковой квоты :) Из-за сбоев в Инете бывают разрывы, а чтобы такое...

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий