Я разрабатываю PHP-скрипт для загрузки документов .PDF в виде больших двоичных объектов среднего размера в базу данных MySQL через PHP. Скрипт также позволяет пользователям искать файлы и открывать / скачивать их, но я не думаю, что эта часть скрипта имеет отношение к моей проблеме. Сценарий отлично работает с файлами размером менее 2 МБ, но как только я пытаюсь загрузить файл размером более 2 МБ, в столбец содержимого (средний BLOB) ничего не попадает, и нет значения для типа mime. Я уже пробовал увеличить max_packet_size для сервера MySQL до 4 МБ со значения по умолчанию, равного 1 МБ. Думаю, я также обновил php.ini до правильных значений. Я установил upload_max_size на 4 МБ, post_max_size на 4 МБ и memory_limit на 16 МБ. Я действительно не экспериментировал с max_input_time, потому что по умолчанию он равен 60 секундам, что кажется достаточно большим, учитывая, что этот сценарий предназначен для внутреннего приложения в интрасети.
Я также попытался отловить ошибки объекта PDO в моем скрипте с помощью errorInfo () и errorCode (), и оба через 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 МБ, а файла test.pdf - 2,5 МБ.
http://www.imagechicken.com/viewpic.php?p=1255628359017775300&x=png
Я бы использовал теги img, но, увы, я новый пользователь и мне это не разрешено.
Следующее, что я собираюсь найти, - это параметр в Apache, ограничивающий размер файлов. Я новичок в LAMP, поэтому любые советы будут отличными. Спасибо