+m2+ ha scritto:
Hai quindi due problemi, uno è che php non ha un modo semplice per fare quanto vuoi (spesso ci si appoggia a comandi Shell del sistema operativo) il secondo è che usi una versione a 32bit e non 64
Ho capito il problema però perché
se aggiungo un gestore per gli errori PHP va comunque in tilt?
<?php
/**
* Return file size (even for file > 2 Gb)
* For file size over PHP_INT_MAX (2 147 483 647), PHP filesize function loops from -PHP_INT_MAX to PHP_INT_MAX.
*
* @param string $path Path of the file
* @return mixed File size or false if error
*/
function realFileSize($path)
{
if (!file_exists($path))
return false;
$size = filesize($path);
if (!($file = fopen($path, 'rb')))
return false;
if ($size >= 0)
{//Check if it really is a small file (< 2 GB)
if (fseek($file, 0, SEEK_END) === 0)
{//It really is a small file
fclose($file);
return $size;
}
}
//Quickly jump the first 2 GB with fseek. After that fseek is not working on 32 bit php (it uses int internally)
$size = PHP_INT_MAX - 1;
if (fseek($file, PHP_INT_MAX - 1) !== 0)
{
fclose($file);
return false;
}
$length = 1024 * 1024;
while (!feof($file))
{//Read the file until end
$read = fread($file, $length);
$size = bcadd($size, $length);
}
$size = bcsub($size, $length);
$size = bcadd($size, strlen($read));
fclose($file);
return $size;
}
function DimensioneFile($bytes) {
if ($bytes >= 1073741824) {$bytes = number_format($bytes / 1073741824, 2) . ' GB';}
elseif ($bytes >= 1048576) {$bytes = number_format($bytes / 1048576, 2) . ' MB';}
elseif ($bytes >= 1024) {$bytes = number_format($bytes / 1024, 2) . ' KB';}
elseif ($bytes > 1) {$bytes = $bytes . ' bytes';}
elseif ($bytes == 1) {$bytes = $bytes . ' byte';}
else {$bytes = '0 bytes od oltre 2GB';}
return $bytes;
}
function realFileSize2($file){
$byte_file = 0;
try {
$byte_file=realFileSize($file);
} catch(Exception $e) {
try {
$byte_file=filesize($file);
} catch(Exception $e) {
$byte_file = 0;
}
}
return $byte_file;
}
?>
<!doctype html>
<html lang="it">
<head><title>Ciao Mondo!</title></head>
<body>
<h1>Ciao Mondo!</h1>
<p>Il file ha dimensione:
<?php echo realFileSize2("ggg.mkv");?>
</p>
<h1>Ciao Mondo!</h1>
<p>Il file ha dimensione:
<?php echo DimensioneFile(realFileSize2("ggg.mkv"));?>
</p>
</body>
</html>
Ottengo una pagina bianca...