我正在开发一个 PHP 脚本,用于通过 PHP 将 .PDF 文档作为中等 BLOB 上传到 MySQL 数据库中。该脚本还允许用户搜索文件并打开/下载它们,但我认为该脚本的一部分与我的问题无关。该脚本适用于小于 2 MB 的文件,但一旦我尝试上传大于 2 MB 的文件,我的内容(中 BLOB)列中就不会出现任何内容,并且 mime 类型没有值。我已经尝试将 MySQL 服务器的 max_packet_size 从默认值 1 MB 增加到 4 MB。我认为我还将 php.ini 更新为正确的值。我将 upload_max_size 设置为 4MB,post_max_size 设置为 4 MB,memory_limit 设置为 16 MB。不过,我还没有真正尝试过 max_input_time,因为它默认为 60 秒,考虑到该脚本用于 Intranet 上的内部应用程序,这似乎已经足够了。
我还尝试使用 errorInfo() 和 errorCode() 捕获脚本中 PDO 对象的错误,并且两者都通过 0(无错误)。
这是我的脚本的上传部分:
if ($key == 'upload')
{
set_time_limit(0);
$_SESSION['upload'] = $value;
if ($_FILES['userfile']['name'])
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$docType = $_POST['docType'];
$netKey = $_POST['netKey'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
$_SESSION['filetype'] = $fileType;
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
$sqlCheck = "SELECT id, name, documentType, networkKey FROM upload WHERE active='1'";
foreach ($dbh->query($sqlCheck) as $row)
{
if (($row['name'] == $fileName) && ($row[networkKey] == $netKey) && ($row['documentType'] == $docType))
{
$_SESSION['updateRow'] = $row['id'];
}
}
if ($_SESSION['updateRow'])
{
$deactivateDuplicate = "UPDATE upload SET active = 0, modifiedBy = '".strtoupper($_SERVER['REMOTE_USER'])."', modifiedDate = Now() WHERE id = '".$_SESSION['updateRow']."' AND active ='1'";
$dbh->query($deactivateDuplicate);
$_SESSION['sql'] = "SELECT id, name, documentType, type, size, networkKey, modifiedBy, modifiedDate, active FROM upload WHERE active = '1'";
$_SESSION['uploadSearch'] = 1;
$_SESSION['updateRow'] = 0;
}
$values = "'".$fileName."','".$docType."','".$fileType."','".$content."','".$fileSize."','".$netKey."','".strtoupper($_SERVER['REMOTE_USER'])."', Now(), 1";
$sqlUpload = "INSERT INTO upload (name, documentType, type, content, size, networkKey, modifiedBy, modifiedDate, active) VALUES (".$values.")";
$dbh->query($sqlUpload);
$_SESSION['sql'] = "SELECT id, name, documentType, type, size, networkKey, modifiedBy, modifiedDate, active FROM upload WHERE active = '1'";
$_SESSION['uploadSearch'] = 1;
}
}
这是应用程序的前端,显示较小的文件可以工作,而较大的文件则不能。文件sample.pdf 小于1 MB,文件test.pdf 为2.5 MB。
我本来会使用 img 标签,但可惜我是新用户,不允许。
接下来我要寻找的是 Apache 中限制文件大小的设置。我是 LAMP 新手,所以任何建议都会很棒。
谢谢