мне нужна помощь с функцией disk_total_space ..
у меня это в моем коде
<?php
$sql = "select * from users order by id";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) {
?>
Name : <?php echo $row['name']; ?>
Email : <?php echo $row['email']; ?>
Diskspace Available : <?php
$dir = "C:/xampp/htdocs/freehosting/".$row['name'];
disk_total_space($dir);
} ?>
Однако это вернет мне одинаковое дисковое пространство для всех пользователей.
Кто-нибудь может пролить на меня свет?
Благодарность :)






http://us2.php.net/disk_total_space говорит:
"Given a string containing a directory, this function will return the total number of bytes on the corresponding filesystem or disk partition."
Скорее всего, вы видите total_space C:
Альтернативные решения существуют как для Windows, так и для Linux..
Я думаю, что этот метод сообщит вам только информацию о файловой системе или разделе, в котором находится данный каталог. Вы можете попробовать просто обстрелять ду:
$space_used=`du -sh $dir`;
-s суммирует весь каталог, -h возвращает результат в "человеческих" единицах, таких как МБ и ГБ.
Обновлено: извините, я пропустил, что это было на WIndows. Оставлю ответ на случай, если это поможет кому-то в поиске аналогичной проблемы. Для окон попробуйте это предложение в руководстве по PHP
Забавно, что он запускает PHP в Windows, где это не сработает, но если вы используете * nix, где работает большинство PHP, это поможет. linux.die.net/man/1/du
Комментарии к функции на PHP.net, по-видимому, указывают на то, что это дает пространство на диске / разделе, в котором находится $dir, а не размер самого $dir.
Согласно документации для disk_total_space(), возвращаемое значение предназначено для файловая система, в которой находится каталог. Он не учитывает пространство, используемое в каталоге + его подкаталогах.
Вы можете использовать du или более портативное решение:
$total = 0;
foreach (new RecursiveDirectoryIterator($dir) as $entry)
{
if ($entry->isFile())
$total += $entry->getSize();
}
Я думаю, что вам нужно что-то вроде этого:
function foldersize($path) {
$total_size = 0;
$files = scandir($path);
foreach($files as $t) {
if (is_dir(rtrim($path, '/') . '/' . $t)) {
if ($t<>"." && $t<>"..") {
$size = foldersize(rtrim($path, '/') . '/' . $t);
$total_size += $size;
}
} else {
$size = filesize(rtrim($path, '/') . '/' . $t);
$total_size += $size;
}
}
return $total_size;
}
function format_size($size) {
$mod = 1024;
$units = explode(' ','B KB MB GB TB PB');
for ($i = 0; $size > $mod; $i++) {
$size /= $mod;
}
return round($size, 2) . ' ' . $units[$i];
}
$SIZE_LIMIT = 5368709120; // 5 GB
$sql = "select * from users order by id";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) {
$disk_used = foldersize("C:/xampp/htdocs/freehosting/".$row['name']);
$disk_remaining = $SIZE_LIMIT - $disk_used;
print 'Name: ' . $row['name'] . '<br>';
print 'diskspace used: ' . format_size($disk_used) . '<br>';
print 'diskspace left: ' . format_size($disk_remaining) . '<br><hr>';
}
редактировать: изначально в рекурсивной функции была ошибка. Теперь он также должен читать папки внутри исходных папок, папки внутри этих папок и так далее.
du не будет хорошо работать в системе с такими путями к файлам, как C: \ - его нет в Windows.