Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我遇到了致命错误:上载文件时,允许的内存大小134217728字节已用完_Php_File_Caching_Memory_Wamp - Fatal编程技术网

Php 我遇到了致命错误:上载文件时,允许的内存大小134217728字节已用完

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

我目前正在开发一个PHP网站,我需要在我的数据库中存储文件。 我正在使用LONGBLOB存储文件,如PDF、PPTX等,。。。 文件上载工作正常,直到出现以下错误:
致命错误:允许的内存大小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);