dba*_*ugh 5 php mysql apache blob
我正在开发一个 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。我没有
我还尝试使用 errorInfo() 和 errorCode() 并通过 0(无错误)从脚本中的 PDO 对象中捕获错误。
这是我的脚本的上传部分:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是应用程序的前端,显示较小的文件有效,而较大的文件无效。文件 sample.pdf 小于 1 MB,文件 test.pdf 为 2.5 MB。
http://www.imagechicken.com/viewpic.php?p=1255628359017775300&x=png
我会使用 img 标签,但可惜我是新用户,不允许使用。
接下来我要寻找的是 Apache 中限制文件大小的设置。我是 LAMP 的新手,所以任何提示都会很棒。谢谢
我实际上解决了这个问题。我更改了 php.ini 和 my.cnf 中推荐的所有值,但我还需要更改 PDO 的设置。
我更改了:PDO::MYSQL_ATTR_MAX_BUFFER_SIZE(整数)最大缓冲区大小。默认为 1 MiB。
必须在创建 PDO 对象时设置此项才能工作。现在一切都很好。