Vandaag moest ik voor een klant een file upload size limit probleem oplossen. Het leek een eenvoudige opdracht maar het heeft me best wat tijd gekost.
Soms lijkt een probleem eenvoudig totdat je je erin verdiept. Een klant ondervond het probleem dat via de WordPress mediatheek tijdens een uploaden van een bestand slechts maximum 1 MB
Even de php.ini
settings bekijken. Oeps, de upload_max_filesize
staat ingesteld op 100M
, dat zou voldoende moeten zijn.
Okay, misschien is er een filter die de maximum file upload size limit overschrijft. Met een handige tool zoals Query Monitor kon ik al snel besluiten dat er geen filter hook aanwezig was die de wp_handle_upload_prefilter
overschreef.
Waar zit het probleem dan?
Dan is het tijd om in de WordPress code te duiken. Hieronder vind je de core check_upload_size WordPress functie. Aangezien de WordPress site een multisite betrof blijkt er een site setting “Max upload file size” waarbij de admin gebruikers de maximum upload file size kunnen instellen. Deze optie wordt bewaard in de databank in de wp_options
tabel met de key fileupload_maxk
.
function check_upload_size( $file ) {
if ( get_site_option( 'upload_space_check_disabled' ) ) {
return $file;
}
if ( $file['error'] > 0 ) { // There's already an error.
return $file;
}
if ( defined( 'WP_IMPORTING' ) ) {
return $file;
}
$space_left = get_upload_space_available();
$file_size = filesize( $file['tmp_name'] );
if ( $space_left < $file_size ) {
/* translators: %s: Required disk space in kilobytes. */
$file['error'] = sprintf( __( 'Not enough space to upload. %s KB needed.' ), number_format( ( $file_size - $space_left ) / KB_IN_BYTES ) );
}
if ( $file_size > ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) {
/* translators: %s: Maximum allowed file size in kilobytes. */
$file['error'] = sprintf( __( 'This file is too big. Files must be less than %s KB in size.' ), get_site_option( 'fileupload_maxk', 1500 ) );
}
if ( upload_is_user_over_quota( false ) ) {
$file['error'] = __( 'You have used your space quota. Please delete files before uploading.' );
}
if ( $file['error'] > 0 && ! isset( $_POST['html-upload'] ) && ! wp_doing_ajax() ) {
wp_die( $file['error'] . ' <a href="javascript:history.go(-1)">' . __( 'Back' ) . '</a>' );
}
return $file;
}
PHPDe WordPress multisite settings kan je beheren via volgende link: {je_website_url}/wp-admin/network/settings.php
.
Hopelijk heb je er wat aan en heb ik je wat tijd kunnen besparen.