2017-05-16 13 views
2

現在、私はPHPウェブサイトを開発しており、データベースにファイルを保存する必要があります。 は、私はこのエラーを取得するまで、ファイルのアップロードが正常に動作して ...などPDF、PPTX、などのファイルを保存するためにLONGBLOBを使用しています: Fatal error: Allowed memory size of 134217728 bytes exhausted私は致命的なエラーが発生しました:ファイルをアップロードするときに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'); 

編集:問題は、再生時にlongblobの代わりにblobを選択したデータベースに由来します。

+0

ストリームとしてデータをマッピングするためにPDOを伝えますメモリの上限をチェックし、最大値を確認します。あなたのアップロードのファイルサイズを許可しました - http://stackoverflow.com/q/2184513/80836 – Andreas

+0

prod envのphp.iniにアクセスできません。どうすればいいですか? – Kryze

答えて

0

php.iniファイルのupload_max_filesize変数を確認してください。

128Mに設定されている可能性があります。希望の値に上げてみてください。

+0

私はprod envのファイルにアクセスできない場合はどうすればいいですか? – Kryze

+0

サーバーは、.htaccessファイル経由PHPの設定の変更を可能にし、あなたのPHPファイルとして、そのファイルの書き込みに同じフォルダに.htaccessファイルを作成することができた場合:ここで、iはできる はphp_value upload_max_filesizeで256M はphp_value post_max_sizeの256M – Varun

0

チェックpost_max_size & upload_max_filesizepost_max_sizeupload_max_filesizeより大きくする必要があります。あなたの要件に応じてupload_max_filesizeを設定してください。

+0

私はあなたを求めることができますそれを見つける?ありがとう – Kryze

+0

php.iniファイルを確認する必要があります。あなたはindex.phpにも 'phpinfo()'を見ることができます。 –

0

は、私はこの問題は、以下の行に存在すると思う:あなたはファイルサイズが大きいときにメモリ不足になります。この時点では、ファイルの内容を読み取ろうとしている

$content = fread($fp, filesize($tmp_name)); 

こちら。

このように、メモリの制限を増やすことは、この場合、より良い解決策ではありません。ホールコンテンツをメモリに保存するのではなく、ファイルコンテンツをストリーミングする方がよいでしょう。

も交換してください、次の行、上記の行を削除します。

$stmt->bindColumn(2, $fp, PDO::PARAM_LOB); 

PDO::PARAM_LOB

$statement->bindParam(2, $content, PDO::PARAM_LOB, $taille); 

は、あなたが増加する場合があります

関連する問題