WC_Download_Handler::readfile_from_handle
Read an already-open file handle in chunks and echo its content.
Method of the class: WC_Download_Handler{}
No Hooks.
Returns
bool. Success or fail
Usage
$result = WC_Download_Handler::readfile_from_handle( $handle, $start, $length );
- $handle(resource) (required)
- Open file handle, e.g. from
fopen(). - $start(int)
- Byte offset/position of the beginning from which to read from the file.
- $length(int)
- Length of the chunk to be read from the file in bytes, 0 means until the end of file.
WC_Download_Handler::readfile_from_handle() WC Download Handler::readfile from handle code WC 11.1.2
private static function readfile_from_handle( $handle, $start = 0, $length = 0 ) {
if ( ! defined( 'WC_CHUNK_SIZE' ) ) {
define( 'WC_CHUNK_SIZE', 1024 * 1024 );
}
$read_length = (int) WC_CHUNK_SIZE;
if ( $length ) {
$end = $start + $length - 1;
@fseek( $handle, $start ); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
$p = @ftell( $handle ); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
while ( ! @feof( $handle ) && $p <= $end ) { // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
// Don't run past the end of file.
if ( $p + $read_length > $end ) {
$read_length = $end - $p + 1;
}
echo @fread( $handle, $read_length ); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged, WordPress.XSS.EscapeOutput.OutputNotEscaped, WordPress.WP.AlternativeFunctions.file_system_read_fread
$p = @ftell( $handle ); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
if ( ob_get_length() ) {
ob_flush();
flush();
}
}
} else {
while ( ! @feof( $handle ) ) { // @codingStandardsIgnoreLine.
echo @fread( $handle, $read_length ); // @codingStandardsIgnoreLine.
if ( ob_get_length() ) {
ob_flush();
flush();
}
}
}
return @fclose( $handle ); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_read_fclose
}