Just for information and in reply to a previous message left 4 years ago by "salsi at icosaedro dot it" :
Files larger than 2 GiB can be handled on 64-bit Linux systems.
My test in a terminal is as follow (using <?php ;?> tags to colour the results for ease of reading) :
$ php -v
<?php
"
PHP 7.2.24-0ubuntu0.18.04.7 (cli) (built: Oct 7 2020 15:24:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24-0ubuntu0.18.04.7, Copyright (c) 1999-2018, by Zend Technologies
"
;?>
$ date ; dd if=/dev/zero of=/tmp/php_test_huge bs=1024K count=2100 ; date ; ls -l /tmp/php_test_huge
<?php
"
Wed Nov 11 15:35:46 +08 2020
2100+0 records in
2100+0 records out
2202009600 bytes (2.2 GB, 2.1 GiB) copied, 4.79192 s, 460 MB/s
Wed Nov 11 15:35:51 +08 2020
-rw-r--r-- 1 harold harold 2202009600 Nov 11 15:35 /tmp/php_test_huge
"
;?>
$ php -r 'var_dump(lstat("/tmp/php_test_huge"));'
<?php
"
array(26) {
[0]=>
int(2050)
[1]=>
int(19923027)
[2]=>
int(33188)
[3]=>
int(1)
[4]=>
int(1000)
[5]=>
int(1000)
[6]=>
int(0)
[7]=>
int(2202009600)
[8]=>
int(1605079647)
[9]=>
int(1605080149)
[10]=>
int(1605080149)
[11]=>
int(4096)
[12]=>
int(4300808)
["dev"]=>
int(2050)
["ino"]=>
int(19923027)
["mode"]=>
int(33188)
["nlink"]=>
int(1)
["uid"]=>
int(1000)
["gid"]=>
int(1000)
["rdev"]=>
int(0)
["size"]=>
int(2202009600)
["atime"]=>
int(1605079647)
["mtime"]=>
int(1605080149)
["ctime"]=>
int(1605080149)
["blksize"]=>
int(4096)
["blocks"]=>
int(4300808)
}
"
;?>lstat
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
lstat
Референца за `function.lstat.php` со подобрена типографија и навигација.
lstat
(PHP 4, PHP 5, PHP 7, PHP 8)
lstat — Дава информации за датотека или симболичка врска
= NULL
Дава информации за датотека или симболична врска
filename.
Параметри
filename-
Собира статистики за датотеката или симболичната врска именувана со
Вратени вредности
Патека до датотека или симболична врска. stat() Погледнете ја рачната страница за lstat() за информации за структурата на низата што stat() се враќа. Оваа функција е идентична со filename функција, освен што ако
При неуспех, false се враќа.
Errors/Exceptions
Бидејќи типот на податоци integer во PHP е со знакот и многу платформи користат 32-битни integers, некои функции за датотечниот систем може да вратат неочекувани резултати за датотеки поголеми од 2GB. E_WARNING се емитува.
Примери
параметарот е симболична врска, се враќа статусот на симболичната врска, а не статусот на датотеката на која укажува симболичната врска. stat() and lstat()
<?php
symlink('uploads.php', 'uploads');
// Contrast information for uploads.php and uploads
array_diff(stat('uploads'), lstat('uploads'));
?>Горниот пример ќе прикаже нешто слично на:
Пример #1 Споредба на
Array
(
[ino] => 97236376
[mode] => 33188
[size] => 34
[atime] => 1223580003
[mtime] => 1223581848
[ctime] => 1223581848
[blocks] => 8
)
Белешки
Забелешка: Имајте предвид дека резолуцијата на времето може да се разликува од еден датотечен систем до друг. clearstatcache() за повеќе детали.
Резултатите од оваа функција се кеширани. Погледнете some Од PHP 5.0.0, оваа функција може да се користи и со Поддржани протоколи и обвивки URL обвивки. Погледнете stat() за да се утврди кои обвивки поддржуваат
Белешки од корисници 2 забелешки
This function fails and returns FALSE with files larger than 2 GB on Linux 32-bits (PHP 7.1.0-dev):
$ dd if=/dev/zero of=/tmp/huge bs=1048576 count=2050
$ php -r 'var_dump(lstat("/tmp/huge"));'
--> Warning: lstat(): Lstat failed for /tmp/huge in Command line code on line 1
Window not tested. PHP 64-bits not tested.