У меня есть функция PHP, позволяющая пользователю загружать файлы. (В коде есть несколько пользовательских функций, maybe_redirect
, validate_document
, headers_no_cache
и т. д., но вы поняли имена и то, что они делают точно это не относится к проблеме.)
Когда это выполняется, в качестве даты создания результирующего файла устанавливаются текущие дата и время. Есть ли способ для PHP, чтобы установить этот атрибут для результирующего файла?
Вот функция:
function fetch_file( $file, $force_download = false ) {
$file = maybe_redirect( $file );
if ( $DLfile = validate_document( $file ) ) {
global $pconfig;
$DLfile = htmlspecialchars( $DLfile );
$type = mime_content_type( $DLfile );
$chunksize = ( (int) $pconfig['misc']['download_chunk_size_mb'] ) * (1024 * 1024);
$size = intval( sprintf( "%u", filesize($DLfile) ) );
set_time_limit(300);
headers_no_cache();
header( 'Content-Type: ' . $type );
header( 'Content-Length: ' . $size );
if ( $force_download || $size > $chunksize ) {
header( 'Content-Disposition: attachment; filename="' . basename( $DLfile ) . '"' );
} else {
header( 'Content-Disposition: filename="' . basename( $DLfile ) . '"' );
}
if( $size > $chunksize ) {
// https://stackoverflow.com/a/21936954
header( 'Content-Type: application/octet-stream' );
header( 'Content-Transfer-Encoding: binary' );
$handle = fopen( $DLfile, 'rb' );
while ( ! feof($handle) ) {
echo @fread($handle, $chunksize);
ob_flush();
flush();
}
fclose($handle);
} else {
readfile( $DLfile );
}
exit;
} else {
http404();
}
}
Есть два возможных варианта использования: получить даты из фактического файла на сервере или получить их из базы данных.
Задача ещё не решена.
Других решений пока нет …