Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 830 → Rev 831

/trunk/client/phorum/bibliotheque/phorum/include/admin/sanity_checks/upload_limits.php
New file
0,0 → 1,164
<?php
 
////////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2006 Phorum Development Team //
// http://www.phorum.org //
// //
// This program is free software. You can redistribute it and/or modify //
// it under the terms of either the current Phorum License (viewable at //
// phorum.org) or the Phorum License that was distributed with this file //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
// //
// You should have received a copy of the Phorum License //
// along with this program. //
////////////////////////////////////////////////////////////////////////////////
 
// Check if the Phorum file uploading settings match the
// limits that are imposed by the system.
 
// TODO (document in faq / documentation)
// The upload size can be limited by Apache's LimitRequestBody directive,
// but we cannot check that one from PHP.
 
require_once('./include/format_functions.php'); // For phorum_filesize()
 
$phorum_check = "File uploading (personal files and attachments)";
 
function phorum_check_upload_limits() {
$PHORUM = $GLOBALS["PHORUM"];
 
// Keep track if uploads are used.
$upload_used = false;
 
// Get the maximum file upload size for PHP.
$php_max_upload = phorum_php_max_upload();
 
// Get the maximum packet size for the database.
// For determining the maximum allowed upload size,
// we have to take packet overhead into account.
$max_packetsize = phorum_db_maxpacketsize();
if ($max_packetsize == NULL) {
$db_max_upload = $php_max_upload;
} else {
$db_max_upload = phorum_db_maxpacketsize() * 0.6;
}
 
// Check limits for file uploading in personal profile.
if ($PHORUM["file_uploads"] && $PHORUM["max_file_size"]) {
$upload_used = true;
$res = phorum_single_check_upload_limits(
$PHORUM["max_file_size"]*1024,
"the Max File Size option for user file uploads " .
"(in their profile)",
$php_max_upload, $db_max_upload
);
if ($res != NULL) return $res;
}
 
// Check limits for attachment uploading in forums.
$forums = phorum_db_get_forums();
foreach ($forums as $id => $forum) {
if ($forum["max_attachments"] > 0 && $forum["max_attachment_size"]) {
$upload_used = true;
$res = phorum_single_check_upload_limits(
$forum["max_attachment_size"]*1024,
"the Max File Size option for uploading attachments
in the forum \"{$forum['name']}\"",
$php_max_upload, $db_max_upload
);
}
}
 
// No upload functionality found so far? Then we're done.
if (! $upload_used) return array(PHORUM_SANITY_OK, NULL);
 
// Check if the upload temp directory can be written.
$tmpdir = get_cfg_var('upload_tmp_dir');
if (!empty($tmpdir)) {
$fp = @fopen("$tmpdir/sanity_checks_dummy_uploadtmpfile", "w");
if (! $fp) return array(
PHORUM_SANITY_CRIT,
"The system is unable to write files
to PHP's upload tmpdir \"".htmlspecialchars($tmpdir)."\".
The system error was:<br/><br/>".
htmlspecialchars($php_errormsg).".",
"Change the upload_tmp_dir setting in your php.ini file
or give your webserver more permissions for the current
upload directory."
);
}
fclose($fp);
unlink("$tmpdir/sanity_checks_dummy_uploadtmpfile");
 
return array(PHORUM_SANITY_OK, NULL);
}
 
// ========================================================================
// Helper functions
// ========================================================================
 
// We have to check multiple upload limits. Using this function,
// we do not have to rebuild all error messages over and over
// again.
function phorum_single_check_upload_limits ($howmuch, $what, $maxphp, $maxdb)
{
// Check PHP limits.
if (!empty($maxphp) && $howmuch > $maxphp) return array(
PHORUM_SANITY_WARN,
"You have configured ".htmlspecialchars($what)." to ".
phorum_filesize($howmuch).". Your PHP installation only
supports ".phorum_filesize($maxphp).". Your users might
have problems with uploading their files because of this.",
"Raise the options post_max_size and upload_max_filesize in your
php.ini file to match the Max File Size option or lower this
configuration option for your forums."
);
 
// Check database limits.
if (!empty($maxdb) && $howmuch > $maxdb) return array(
PHORUM_SANITY_WARN,
"You have configured ".htmlspecialchars($what)." to ".
phorum_filesize($howmuch).". Your database only supports ".
phorum_filesize($maxdb).". Your users might have problems with
uploading their files because of this.",
"Configure your database to allow larger packets or lower the
Max File Size configuration option for your forums."
);
 
return NULL;
}
 
function phorum_php_max_upload()
{
// Determine the PHP system upload limit. The limit for
// maximum upload filesize is not the only thing we
// have to look at. We should also take the maximum
// POST size in account.
$pms = phorum_phpcfgsize2bytes(get_cfg_var('post_max_size'));
$umf = phorum_phpcfgsize2bytes(get_cfg_var('upload_max_filesize'));
$limit = ($umf > $pms ? $pms : $umf);
 
return $limit;
}
 
// Convert the size parameters that can be used in the
// PHP ini-file (e.g. 1024, 10k, 8M) to a number of bytes.
function phorum_phpcfgsize2bytes($val) {
$val = trim($val);
$last = strtolower($val{strlen($val)-1});
switch($last) {
// The 'G' modifier is available since PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
?>