disk_total_space
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
disk_total_space — Возвращает общий размер файловой системы или раздела диска
Описание
Функция возвращает общий размер в байтах указанного раздела диска или каталога.
Список параметров
Директория файловой системы или раздел диска.
Возвращаемые значения
Возвращает общий размер в байтах в виде числа с плавающей точкой или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования disk_total_space()
// В Windows:
$ds = disk_total_space ( «C:» );
$ds = disk_total_space ( «D:» );
?>
Примечания
Замечание: Эта функция неприменима для работы с удалёнными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Смотрите также
User Contributed Notes 9 notes
Beware of empty files!
To find the total size of a file/directory you have to differ two situations:
(on Linux/Unix based systems only!?)
you are interested:
1) in the total size of the files in the dir/subdirs
2) what place on the disk your dir/subdirs/files uses
so you have to choose your situation!
hopes this helps to count the used disk place in a right way. 🙂
//This is a more readable way of viewing the returned float
Something that might go well with this function is the ability to list available disks. On Windows, here’s the relevant code:
Warning: This also finds empty disk drives (eg; CD or SMD drives or the more common floppy drive).
Warning2: If you want to find space usage using the info from my function, prepend the disk function with the «@», eg:
PHP 6 has already come to the market but still there are no standard function that can help retrieve directory size as it has to calculate disk space such as disk_total_space. Although we can use system level call such as exec() and system(), it is too risky to enable these function. So we look for an alternate method so as to calculate directory size.
Sol: retrieving directory size using php
disk_free_space
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
disk_free_space — Возвращает размер доступного пространства в каталоге или файловой системе
Описание
Функция возвращает размер свободного пространства в байтах, доступного для использования в указанном каталоге или файловой системе.
Список параметров
Директория или раздел диска.
Если вместо директории будет передано имя файла, то поведение данной функции неизвестно и может отличаться на разных операционных системах и версиях PHP.
Возвращаемые значения
Возвращает количество свободных байт в виде числа с плавающей точкой или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования функции disk_free_space()
// В Windows:
$df_c = disk_free_space ( «C:» );
$df_d = disk_free_space ( «D:» );
?>
Примечания
Замечание: Эта функция неприменима для работы с удалёнными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Смотрите также
User Contributed Notes 8 notes
Transformation is possible WITHOUT using loops:
Nice, but please be aware of the prefixes.
SI specifies a lower case ‘k’ as 1’000 prefix.
It doesn’t make sense to use an upper case ‘K’ as binary prefix,
while the decimal Mega (M and following) prefixes in SI are uppercase.
Furthermore, there are REAL binary prefixes since a few years.
Do it the (newest and recommended) «IEC» way:
KB’s are calculated decimal; power of 10 (1000 bytes each)
KiB’s are calculated binary; power of 2 (1024 bytes each).
The same goes for MB, MiB and so on.
$si_prefix = array( ‘B’, ‘KB’, ‘MB’, ‘GB’, ‘TB’, ‘EB’, ‘ZB’, ‘YB’ );
you are missing the petabyte after terabyte
‘B’, ‘KB’, ‘MB’, ‘GB’, ‘TB’, ‘PB’, ‘EB’, ‘ZB’, ‘YB’
Another easy way to convert bytes to human readable sizes would be this:
On Windows, this also works with distant files, by using their full network path.
Usage of disk_free_space() and disk_total_space() in PHP
I’m not clear on what disk_free_space and disk_total_space are supposed to do.
The documentation says «Returns available space on filesystem or disk partition» and «Returns the total size of a filesystem or disk partition», respectively. Meanwhile, the argument is described, in each case, as «A directory of the filesystem or disk partition.»
So am I able to get the available disk space only for a partition or also for a specific folder?
In other words, is it normal that both parts of this script return the same values?
2 Answers 2
It’s a *nix convention. Let’s say you’ve got a filesystem mounted on /var/www :
disk_free_space(‘/var/www’); will return the same result as disk_free_space(‘/var/www/foobar.com’); because they are the same filesystem and that’s what the function reporting.
What you’re running is likely reporting the disk usage of the entire server, not just your user.
It’s returning the same values because those functions specifically look at the volume free/total capacity respectively.
Not the answer you’re looking for? Browse other questions tagged php diskspace or ask your own question.
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40231
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Easiest way to simulate no free disk space situation?
I need to test my web app in a scenario where there’s no disk space remaining, i.e. I cannot write any more files. But I don’t want to fill my hard drive with junk just to make sure there’s really no space left. What I want is to simulate this situation withing a particular process (actually, a PHP app).
Indeed, temporarily prohibiting disk writes to a process must be enough.
What’s the easiest way to do this? I’m using Mac OS X 10.6.2 with built-in Apache/PHP bundle. Thanks.
Edit: Disk free space check is not going to be reliable since it can change any moment. Many pages are being served simultaneously. There can be enough free space when checking, but none by the moment you actually write something. Also, checking for disk free space will require changing the code everywhere I write a file, which is not what I want 🙂 Finally, this solution is exactly the opposite of what I’m trying to test: how my app will behave when it cannot write any more.
13 Answers 13
When I needed to do this I created a virtual machine with limited space allocated to the virtual disk.
No need to use a prefilled dummy filesystem.
Use disk_free_space() to mock the FileSystem
To simulate, just wrap the function into a FileSystem Class. Then inject it to your class doing the saving as a dependency and check if the drive is full before you do the actual saving. In your UnitTest, just swap out the regular class with the class mocking a full file system and you’re done. This way you don’t have to recreate the full disk drive or keep the drive with your project files all the time whenever you want to rerun your test, e.g.
and to simulate a full FileSystem do
If you want to overload the function to return 0 at all times, you could use the RunKit Pecl extension and do:
As an alternative look into vfsStream:
vfsStream is a stream wrapper for a virtual file system that may be helpful in unit tests to mock the real file system. It can be used with any unit test framework, like PHPUnit or SimpleTest.
Disk free space php
Усекает файл.
Синтаксис:
Вывод содержимого файла с цветовой разметкой.
Имя или путь файла указывается в аргументе. Цвета выделения синтаксиса определяются в файле конфигурации PHP. Возвращает true или false при ошибке.
Например, чтобы заставить сервер Apache при получении запроса с URL, содержащего значение вида «http://имя.сервера/source/путь/к/файлу.php», выводит листинг файла «http://имя.сервера/source/путь/к/файлу.php», сделайте следующее. Добавьте в файл httpd.conf следующий фрагмент:
Создайте в корневом web-каталоге следующий файл с именем source:
Немедленная запись всех изменений в файле.
Синтаксис:
Устанавливает размер буфера.
Синтаксис:
Приведенный код отключает буферизацию для указанного файла, так что теперь все данные, записываемые в файл, немедленно отправляются на диск или в сеть.
Портируемое рекомендательное запирание файлов (PHP 3 >= 3.0.7, PHP 4, PHP 5)
PHP поддерживает портируемый механизм запирания файлов целиком, который имеет рекомендательный характер (это означает, что все обращающиеся к файлу программы должны использовать такой же способ запирания файла, иначе запирание не сработает).
Замечание: flock() является обязательным под Windows.
flock() применяется к handle, который должен быть указателем на открытый файл. Параметр operation может принимать следующие значения:
— Чтобы установить общее запирание (чтение), установите operation в значение LOCK_SH (или 1, в случае версии PHP ниже 4.0.1).
— Чтобы установить эксклюзивное запирание (запись), установите operation в значение LOCK_EX (или 2, в случае версии PHP ниже 4.0.1).
— Чтобы отпереть файл (после общего или эксклюзивного запирания), установите operation в значение LOCK_UN (или 3, в случае версии PHP ниже 4.0.1).
— Если вы не хотите, чтобы flock() блокировал файл при запирании, добавьте LOCK_NB (или 4, при использовании версии PHP ниже 4.0.1) к параметру operation.
flock() позволяет вам реализовывать простую модель чтения/записи, которая может быть использована практически на любой платформе (включая большинство проивзодных от Unix платформ, и даже Windows). Необязательный третий аргумент устанавливается в TRUE, если запирание также блокирует (код ошибки EWOULDBLOCK). Блокировка снимается при помощи этой же функции fclose() (которая также автоматически вызывается при завершении выполнения скрипта).
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Пример использования функции flock()
Замечание: Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать путём открытыя его в режиме записи (используя «w» или «w+» в качестве аргумента функции fopen()).
flock() не будет работать на NFS и многих других сетевых файловых системах. Обратитесь к документации вашей операционной системы для получения дополнительной информации.
В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, вы не можете полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере!
flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать FALSE в этом окружении (это особенно касается пользователей Windows 98).
Обрабатывает конфигурационный файл (PHP 4, PHP 5)
parse_ini_file() загружает ini-файл, указанный в аргументе filename, и возвращает его настройки в виде ассоциативного массива. Установив последний аргумент process_sections в TRUE, вы получаете многомерный массив, который включает как название отдельных настроек, так и секции. По умолчанию process_sections равен FALSE
Эта функция не имеет никакого отношения к файлу php.ini. К моменту выполнения вашего скрипта, он уже обработан. Эта функция может быть использована для загрузки настроек вашего собственного приложения.
Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки («).
Начиная с версии PHP 4.2.1, на поведение этой функции влияет безопасный режим и open_basedir.
Начиная с версии PHP 5.0, эта функция также обрабатывает переводы строк в значениях.
Существует зарезервированные слова, которые вы не можете использовать в качестве ключей в ini-файлах. Такими словами являются следующие: null, yes, no, true и false.
Структура ini-файла похожа на структуру php.ini.
Константы также могут быть обработаны в ini-файле, так что если вы объявите константу в виде значения для ini-файла до вызова parse_ini_file(), она (константа) будет правильно обработана. Таким образом обрабатываются только значения. Например:
Пример использования функции parse_ini_file()
Возвращает объем каталога (PHP 4 >= 4.1.0, PHP 5)
Функция возвращает размер в байтах указанного раздела диска.
Пример использования disk_total_space()
Замечание: Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Псевдоним функции disk_free_space() (PHP 3 >= 3.0.7, PHP 4, PHP 5)
Описание: Эта функция является псевдонимом для фукнции disk_free_space().
Получить размер доступного пространства в каталоге (PHP 4 >= 4.1.0, PHP 5)
Функция возвращает размер свободного пространства в байтах, доступного для использования в указанном разделе диска.
Пример использования функции disk_free_space()
Замечание: Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Очищает кэш состояния файлов (PHP 3, PHP 4, PHP 5)
Когда вы используете функции stat(), lstat() или любую из функций, перечисленных в приведенном ниже списке, PHP кеширует результаты их выполнения для обеспечения большей производительности. Однако, в некоторых случаях вам может потребоваться очистка этого кэша. Например, когда ваш скрипт несколько раз проверяет состояние одного и того же файла, который может быть изменен или удален во время выполнения скрипта.
Обратите внимание, что PHP не кэширует информацию о несуществующих файлах. Так что если вы вызовите file_exists() на несуществующем файле, она будет возвращать FALSE до тех пор, пока вы не создадите этот файл. Если же вы создадите файл, она будет возвращать TRUE даже если затем вы его удалите.
Замечание: Результаты выполнения приведенных ниже функций кешируются PHP, поэтому, если вы не хотите, чтобы информация о файле или каталоге, с которым вы работаете, кешировалась, используйте функцию clearstatcache().
Список функций, результаты выполнения которых кешируются: stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().
