Php 我遇到了致命错误:上载文件时,允许的内存大小134217728字节已用完
我目前正在开发一个PHP网站,我需要在我的数据库中存储文件。 我正在使用LONGBLOB存储文件,如PDF、PPTX等,。。。 文件上载工作正常,直到出现以下错误:Php 我遇到了致命错误:上载文件时,允许的内存大小134217728字节已用完,php,file,caching,memory,wamp,Php,File,Caching,Memory,Wamp,我目前正在开发一个PHP网站,我需要在我的数据库中存储文件。 我正在使用LONGBLOB存储文件,如PDF、PPTX等,。。。 文件上载工作正常,直到出现以下错误: 致命错误:允许的内存大小134217728字节已用尽 以下是我的功能: public function uploadFile() { // We upload only pdf for now if (isset($_FILES['fichier']['name']) && $_FILES['fich
致命错误:允许的内存大小134217728字节已用尽
以下是我的功能:
public function uploadFile() {
// We upload only pdf for now
if (isset($_FILES['fichier']['name']) && $_FILES['fichier']['type']=="application/pdf"){
$tmp_name = $_FILES['fichier']['tmp_name'];
// Avoid problem with space
$nom = str_replace(' ','_',$_FILES['fichier']['name']);
$taille = $_FILES['fichier']['size'];
$type = $_FILES['fichier']['type'];
$fp = fopen($tmp_name, 'rb');
$content = fread($fp, filesize($tmp_name));
$statement = $this->db->prepare("INSERT INTO document(nomfichier,fichier,typefichier,taillefichier) VALUES (?,?,?,?)");
$statement->bindParam(1, $nom);
$statement->bindParam(2, $content, PDO::PARAM_LOB, $taille);
$statement->bindParam(3, $type);
$statement->bindParam(4, $taille);
$statement->execute();
$statement->closeCursor();
// Redirect
header('Location: documentation');
die('redirect');
编辑:问题来自于在重新生成时选择blob而不是longblob的数据库检查php.ini文件中的upload\u max\u filesize变量
它可能被设置为128M,请尝试将其增加到所需的值。检查
post\u max\u size
&upload\u max\u filesize
post_max_size
必须大于upload_max_filesize
。根据您的要求设置upload\u max\u filesize
。我认为问题存在于以下行:
$content = fread($fp, filesize($tmp_name));
在这里,您试图读取文件的内容,此时,当文件大小较大时,您将耗尽内存
因此,在这种情况下,增加内存限制并不是更好的解决方案。最好是流式传输文件内容,而不是将空洞内容保留在内存中
拆下上述管路,同时更换以下管路:
$statement->bindParam(2, $content, PDO::PARAM_LOB, $taille);
与
PDO::PARAM_LOB
告诉PDO将数据映射为流您可能需要增加内存限制,并检查上载允许的最大文件大小-我无法访问产品环境的php.ini,我该怎么办?如果我不能访问prod env中的文件怎么办?如果您的服务器允许通过.htaccess更改PHP配置,那么您可以在与PHP文件相同的文件夹中创建.htaccess文件,并在该文件中写入:PHP\u value upload\u max\u filesize 256M PHP\u value post\u max\u size 256M我可以问您在哪里找到它吗?谢谢。您需要检查php.ini文件。您也可以在index.php中查看它“phpinfo()”。
$stmt->bindColumn(2, $fp, PDO::PARAM_LOB);