Проверить свободное место у пользователя на хостинге

Я хочу проверить свободное место, оставшееся на моем сервере (используя услугу хостинга). Однако я не хочу знать размер целого диска, на котором случайно находится мой аккаунт. Я только хочу знать, что я использовал 456 МБ из 1 ГБ купленного места.

Я пытался использовать код из этого ответа (Свободное пространство учетной записи хостинга), позвольте мне привести его :

$free = disk_free_space("/");
$total = disk_total_space("/");
$percent = ($free/$total) * 100;
echo $percent;

Однако есть проблема. Сначала это дало мне целое свободное место на реальном устройстве. У меня на хостинге 1 ГБ места, и это решение говорит мне, что у меня свободно 202 ГБ. Кстати, я действительно не понимаю, почему этот вопрос был закрыт. Может быть, это было неясно, но проблема существует, и принятый ответ, на мой взгляд, немного неверен.

Я имею в виду решение, использующее exec() и функцию bash, но возникает вопрос: Возможно ли это с использованием только PHP без использования exec()? exec() иногда блокируется, и его следует избегать из-за для решения проблем с проверкой кода. Конечно, например mysqldump() нужно запускать с exec(), но это одно из немногих исключений.

Возможная идея: я думал о суммировании всех файлов, которые есть у меня на сервере, и в каком-то файле config.php вписываю пространство учетной записи вручную. Это решает проблему, но не "хорошим" способом. Особенно, если кто-то купит еще 1 Гб, и забудет про конфиг "постоянный".


person Jacek Kowalewski    schedule 17.04.2014    source источник
comment
Я сомневаюсь, что в системе, в которой работает ваш размещенный материал, есть какая-либо информация, которая действительно знает о вашем лимите. Такое ограничение обычно применяется только на метауровне, либо на уровне виртуализации, либо даже на уровне учета. Поэтому нет возможности действительно спросить систему о вашем доступном пространстве. Вы можете подсчитать и суммировать размеры файлов, но это будет неточно. Наиболее многообещающим подходом было бы использование утилиты du cli, но на самом деле вам потребуется разрешение на выполнение, которое обычно недоступно в дешевой размещенной среде.   -  person arkascha    schedule 17.04.2014
comment
Ваше хостинговое пространство будет состоять из ваших приложений, электронных писем, баз данных и так далее. Я сомневаюсь, что вы получите пространство своих баз данных из-за ограниченного доступа. Но чтобы получить общее представление, вы можете запустить приведенный выше код в своем домашнем каталоге. т.е. /дом/ваше имя пользователя   -  person Jay Bhatt    schedule 17.04.2014
comment
Спасибо за информацию, это было действительно полезно. Я думал, что это невозможно, но мне нужно было подтверждение. Вы должны сделать ответ своими мыслями. Если ни у кого нет другой идеи, я ее одобрю :). Спасибо еще раз!   -  person Jacek Kowalewski    schedule 17.04.2014
comment
@ Джей, вау. Никогда не думал проверять /home/myname. Я думал, что это даст те же результаты, и даже не проверял. Какой я глупый! Я попробую, и напишу, если это работает :).   -  person Jacek Kowalewski    schedule 17.04.2014
comment
@Jacek Я добавил это как ответ, чтобы помочь другим.   -  person Jay Bhatt    schedule 17.04.2014
comment
Хорошо, отлично, я подожду немного и приму это, если нет других мыслей. @ Джей, те же результаты. 200 ГБ бесплатно, что невозможно.   -  person Jacek Kowalewski    schedule 17.04.2014
comment
Попробуйте disk_total_space(/home/username/) - disk_free_space(/home/username/) Что это вам даст?   -  person Jay Bhatt    schedule 17.04.2014
comment
@Jay, спасибо за помощь. Я просмотрел документацию по php, и disk_free_space возвращает реальное свободное пространство на диске устройства. Спасибо за ваше время, и если у вас есть минутка, пожалуйста, проверьте решение Fariz. Идея действительно хороша! BR   -  person Jacek Kowalewski    schedule 17.04.2014


Ответы (1)


Если веб-хостинг использует cPanel, вы можете использовать API cPanel для вызова функций getFreeSpace() и getSpaceUsed().

function getFreeSpace()
{
    $freeSpace = $this->parseIndex('Disk space available', 'float');
    return ($freeSpace == 0) ? 'Unlimited' : floatval($freeSpace);
}

Просто мои 2 копейки

API cPanel: URL-адрес cPanel

Обновление:

Я наткнулся в Интернете и нашел этот php-скрипт (извлеченный из плагина cms). Итак, это скрипт, который я тестировал на своем веб-хостинге:

Скрипт дискового пространства

<?php



// SETTINGS - START

// PUT YOUR CPANEL HOSTING USERNAME HERE:
    $username = "username";

// PUT YOUR CPANEL HOSTING USERNAME HERE:
    $password = "password";

// MODIFY THIS PATH TO REFLECT YOUR DOMAIN, REPLACING "DOMAIN-NAME" AND "YOUR-CPANEL-USERNAME":
    $query ="http://cpanel.yoursite.com:2082/xml-api/cpanel?user=USERNAME&cpanel_xmlapi_module=StatsBar&cpanel_xmlapi_func=stat&display=diskusage";

// SETTINGS - END


    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($curl, CURLOPT_HEADER,0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl, CURLOPT_USERPWD, $username.":".$password);
    curl_setopt($curl, CURLOPT_URL, $query);
    $result = curl_exec($curl);
    curl_close($curl); 

    $xml = simpleXML_load_string($result);

    $df = $xml->data[0]->_count; // used MB
    $ds = $xml->data[0]->_max; // max MB
    $du = $ds - $df; // free MB
    if ($ds > 0) $perc = number_format(100 * $du / $ds, 2); else $perc = 0;
    $color = '#e87d7d';
    if ($perc > 50) $color = '#e8cf7d';
    if ($perc > 70) $color = '#ace97c';
    echo '<li style="font-weight:bold;padding:5px 15px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;background-color:#182227;margin-left:13px;color:#afc5cf;">'
        .'Free disk space'
        .'<div style="border:1px solid #ccc;width:100%;margin:2px 5px 2px 0;padding:1px">'
        .'<div style="width:'.$perc.'%;background-color:'.$color.';height:6px"></div></div>'
        .$du.' of '.$ds.' MB free'.'</li>';

?>

Исходный скрипт: http://get-simple.info/extend/plugin/free-disk-space-cpanel/317/

person Fariz Luqman    schedule 17.04.2014
comment
Хорошо, этот ответ действительно полезен! Никогда не думал об API. Подожду, может есть еще идеи, если нет, то приму. Даже если хостинг не использует cPanel, обычно он использует что-то с API. Отличная идея, спасибо :), +1. - person Jacek Kowalewski; 17.04.2014
comment
ВОТ ЭТО ДА! Больше нечего сказать :). Спасибо за вашу помощь! :). - person Jacek Kowalewski; 17.04.2014
comment
@Jacek Я просто предполагаю, что вы, должно быть, используете веб-хостинг на основе cPanel. Не просто cPanel, а cPanel премиум-класса (если вы понимаете, о чем я). Этот метод лучше всего работает с хостингом с поддержкой curl. Рад помочь! - p/s я веб-хостинг :) - person Fariz Luqman; 17.04.2014
comment
Хорошо, спасибо за информацию :). Я немного разбираюсь в cPanel, но у меня сегодня весь вечер, чтобы его изучить. Я очень ценю помощь! - person Jacek Kowalewski; 18.04.2014