---
title: "Tömma PHP-minnet"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/191023-tömma-php-minnet"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Mycodez"
published: "2013-01-04T15:39:36.000Z"
updated: "2013-01-23T12:04:15.000Z"
replies: 19
views: 2032
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/191023-tömma-php-minnet"
---

# Tömma PHP-minnet

## #1 — Mycodez, 2013-01-04T15:39Z

Tjena.
 
Jag har en fråga, som lyder hur går man till väga att tömma PHP-minnet? För jag har ett PHPskript, generare lite mail och php ut av mailen, men nu har jag problem med minnet efter jag kört mitt skript skarpt ett tag för se hur det fungerar i längden. Men jag har kontaktat min Binero om vad det skulle var att minnet tar slut, och dem misstänker det med, så nu undrar jag då hur går jag till väga att för att tömma minnet i PHP, under tiden skriptet körs? Är detta möjlig och hur ska det kodas?

MVH 
Robin K, 

PS: Snabba svar är mycket taksamt

Permalänk: https://www.webforum.nu/p/191023

## #2 — prplxr, 2013-01-04T15:45Z

Sätt ob_start() högst upp i filen och ob_flush() där du vill "tömma".

Permalänk: https://www.webforum.nu/p/2307104

## #3 — Mycodez, 2013-01-04T16:07Z

okej jag gjorde det nu och jag får fortaradne detta meddelande upp: 

OK
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Min kod jag kör ser ut så här:

```php
<?php //require 'init.php'; 
ob_start();
require('fpdf.php');
require 'PDF.php';
require('mailFunc.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GAL</title>
<link href="css/demo.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php

$srv = 'xxx';
$user = 'xxx;
$pass = 'xxx;

$pfdRootDir = 'pdf';
$pdfd = scandir($pfdRootDir);
unset($pdfd[0],$pdfd[1]);

$conn = imap_open($srv, $user, $pass);
$boxes = imap_getmailboxes($conn, $srv, '*');
if (is_array($boxes)) {
    foreach ($boxes as $key => $val) {
        $nc = imap_open($val->name, $user, $pass);
        $name = utf8_encode(mb_convert_encoding( $val->name, "ISO_8859-1", "UTF7-IMAP"));
        $name = str_replace("å","a",$name);
        $name = str_replace("ä","a",$name);
        $name = str_replace("ö","o",$name);
        $name = str_replace("Å","A",$name);
        $name = str_replace("Ä","A",$name);
        $name = str_replace("Ö","O",$name);
        $name = end(explode('}', $name));
        $name = strtolower($name);
        $check = explode('/', $name);
        
        if(in_array('loggbok', $check)){
            $emails = imap_search($nc,'ALL');
            if($emails){
               // echo '<b>('.count($emails).') Mails ( '.$val->name.' )</b><br/>';
                rsort($emails);
                if(in_array($check[1], $pdfd)){
                    //echo "Map exist<br/>";
                }else{
                    mkdir($pfdRootDir.'/'.$check[1]);
                    //echo "Map Created<br/>";
                }
                $name = preg_replace('/\s+/', '', $check[2]);
                $pdfDir = $pfdRootDir.'/'.$check[1];
                if (file_exists($pdfDir.'/'. $name.'-V1.pdf')) {
                    $VerNr = 1;
                    while(file_exists($pdfDir.'/'. $name.'-V'.$VerNr.'.pdf')){
                        $VerNr++;
                    }
                     $pdfFullPath = $pdfDir.'/'.$name.'-V'.$VerNr.'.pdf';
                }else{
                    $pdfFullPath = $pdfDir.'/'.$name.'-V1.pdf'; 
                }
                $pdf = new PDF();
                $pdf->AliasNbPages();
                $pdf->AddPage();
                $pdf->SetFont('Times','',12);
                foreach ($emails as $email_id) {
                    $head = getHeaders($nc, $email_id);  // Get Header Info Return Array Of Headers **Key Are (subject,to,toOth,toNameOth,from,fromName)
                    $pdf->Cell(0,5,'Subjects :: '.utf8_encode(mb_convert_encoding($head['subject'], "ISO_8859-1", "UTF7-IMAP")),0,1);
                    $pdf->Cell(0,5,'TO :: '.$head['to'],0,1);
                    $pdf->Cell(0,5,'To Other :: '.$head['toOth'],0,1);
                    $pdf->Cell(0,5,'ToName Other :: '.$head['toNameOth'],0,1);
                    $pdf->Cell(0,5,'From :: '.$head['from'],0,1);
                    $pdf->Cell(0,5,'FromName :: '.$head['fromName'],0,1);
                    $pdf->Ln(5);
                    $pdf->Cell(0,5,'Message:',0,1);
                    $pdf->WriteHTML(getBody($nc, $email_id));
                    $str = GetAttech($nc, $email_id,"./"); // Get attached File from Mail Return name of file in comma separated string  args. (mailid, Path to store file)
                    $ar = explode(",",$str);
                    if(count($ar)){
                        foreach($ar as $key=>$value){
                            $pdf->Ln(5);
                            $pdf->Cell(0,5,'Bilagor:',0,1);
                             $value = str_replace(" ","-",$value);
                             $ext = strtoupper(end(explode('.',$value)));
                             ($value=="")?"":$URL = 'http://mailtest.robinkardell.com/se/'.$value;
                             if($ext == 'JPEG' ||$ext == 'JPG'|| $ext == 'PNG' || $ext == 'GIF'){
                               ($value=="")?"":$pdf->Image($URL,null,null,null,null,$ext);
                               ($value=="")?"":$pdf->Cell(0,5,'Atteched File :: '.$value,0,1);  
                             }else{
                                ($value=="")?"":$pdf->Cell(0,5,'Atteched File :: '.$value,0,1);
                             }
                        }
                        $pdf->Cell(0,5,'------------------------------------------',0,1);
                       }
                   }
                $pdf->Output($pdfFullPath, 'F');
            }
        }
        ob_flush();
        imap_close($nc);
    }    
}
imap_close($conn);
?>
</body>
</html>
```

Permalänk: https://www.webforum.nu/p/2307105

## #4 — drew, 2013-01-04T22:39Z

"The server encountered an internal error or misconfiguration and was unable to complete your request." brukar det inte stå när minnet är slut.

Permalänk: https://www.webforum.nu/p/2307111

## #5 — Mycodez, 2013-01-06T10:12Z

okej men vad kan det vara då?

Permalänk: https://www.webforum.nu/p/2307136

## #6 — drew, 2013-01-06T11:28Z

Något fel i din .htaccess fil, kanske det vanligaste felet. Eller så är det fel i din apache config.

Permalänk: https://www.webforum.nu/p/2307139

## #7 — b242569, 2013-01-06T11:38Z

Det kan vara så att du har glömt ' någonstans. I koden visas

$srv = 'xxx'; 
$user = 'xxx; 
$pass = 'xxx; 

Om det hela tiden står 'xxx' med ' både före och direkt efter torde det kunna bli annorlunda.

Permalänk: https://www.webforum.nu/p/2307141

## #8 — drew, 2013-01-06T11:41Z

Det skulle resultera i en blanksida (om servern inte visar fel) och inte felkonfigurering.

Permalänk: https://www.webforum.nu/p/2307143

## #9 — b242569, 2013-01-06T11:47Z

Men högst upp 

require('fpdf.php'); 
require 'PDF.php'; 
require('mailFunc.php'); 

'PDF.php' står inte inom parentes som de övriga require.

Permalänk: https://www.webforum.nu/p/2307144

## #10 — Mycodez, 2013-01-06T12:12Z

detta med 
$srv = 'xxx'; 
$user = 'xxx; 
$pass = 'xxx; 

det var en miss av mig när jag dolde den verkliga, texten som står där, så jag råkade visst få med en enkelfunt där men så e det inte när skriptet kör skarpt. 

men jag kan dock inte ändra min .htaccess fil eller apache configen, för detta skript körs och ligger hos Binero, och som jag vet kan jag inte ändra min inställningar där eller kan man det? i så fall hur?

Permalänk: https://www.webforum.nu/p/2307146

## #11 — drew, 2013-01-06T14:52Z

> **[b242569 skrev:](https://www.webforum.nu/p/1557695)**
>
> require 'PDF.php'; 
> 'PDF.php' står inte inom parentes som de övriga require.

Det spelar ingen roll. Det behöver inte stå inom parenteser.

Permalänk: https://www.webforum.nu/p/2307152

## #12 — Mycodez, 2013-01-11T23:25Z

Jag har kollat lite med fel meddelande 
**OK
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.**

More information about this error may be available in the server error log.

kan det vara pga denna varning jag inte sätt tidigare, (har visst haft att jag inte ska vissa error på). 

varningen lyder
**Warning: Invalid argument supplied for foreach() in /storage/content/28/165928/mailtest.robinkardell.com/public_html/se/mailFunc.php on line 87** 

rad 87 är: 
**foreach($struckture-\>parts as $key =\> $value)**

och koden är:

```php
function GetAttech($connect,$mid,$path) // Get Atteced File from Mail
{
    $struckture = imap_fetchstructure($connect,$mid);
    $ar="";
    foreach($struckture->parts as $key => $value)
    {
        $enc=$struckture->parts[$key]->encoding;
        if($struckture->parts[$key]->ifdparameters)
        {
            $name=$struckture->parts[$key]->dparameters[0]->value;
            $name = str_replace(" ","-",$name);
            $message = imap_fetchbody($connect,$mid,$key+1);
            if ($enc == 0)
                $message = imap_8bit($message);
            if ($enc == 1)
                $message = imap_8bit ($message);
            if ($enc == 2)
                $message = imap_binary ($message);
            if ($enc == 3)
                $message = imap_base64 ($message);
            if ($enc == 4)
                $message = quoted_printable_decode($message);
            if ($enc == 5)
                $message = $message;
            $fp=fopen($path.$name,"w");
            fwrite($fp,$message);
            fclose($fp);
            $ar=$ar.$name.",";
        }
    }
    $ar=substr($ar,0,(strlen($ar)-1));
    return $ar;
}
```

Permalänk: https://www.webforum.nu/p/2307290

## #13 — drew, 2013-01-12T15:13Z

Du har imap_open() någonstans innan den där funktionen anropas?

Permalänk: https://www.webforum.nu/p/2307294

## #14 — Mycodez, 2013-01-12T15:21Z

Ja, först kör jag en imap_open för öppna så jag får till gång till mapp strukturen som finns i mailen. sen gör jag en imap_open för varje ny mapp för att kunna läsa ens mapps understruktur, sen kolla om en mapp innehåller titeln loggbok för att sen kunna läsa alla mail som finns i den mappen men sen stänger jag av alla imap open med imap_close, 
och denna funktion anropas när man läser in mailen, i huvud funktionen. 
men har ingen IMAP_open någonstans i den filen det anropet finns.

Permalänk: https://www.webforum.nu/p/2307296

## #15 — Mycodez, 2013-01-12T19:32Z

jag har nu googlat runt och kollat lite och fått tips om vad som kan var fel 

jag ändra mitt funktion till detta 

```php
function GetAttech($connect,$mid,$path) // Get Atteced File from Mail
{
    $struckture = imap_fetchstructure($connect,$mid);
    $ar="";
    if(is_array($struckture)){
        foreach($struckture->$parts as $key => $value)
        {
            $enc=$struckture->parts[$key]->encoding;
            if($struckture->parts[$key]->ifdparameters)
            {
                $name=$struckture->parts[$key]->dparameters[0]->value;
                $name = str_replace(" ","-",$name);
                $message = imap_fetchbody($connect,$mid,$key+1);
                if ($enc == 0)
                    $message = imap_8bit($message);
                if ($enc == 1)
                    $message = imap_8bit ($message);
                if ($enc == 2)
                    $message = imap_binary ($message);
                if ($enc == 3)
                    $message = imap_base64 ($message);
                if ($enc == 4)
                    $message = quoted_printable_decode($message);
                if ($enc == 5)
                    $message = $message;
                $fp=fopen($path.$name,"w");
                fwrite($fp,$message);
                fclose($fp);
                $ar=$ar.$name.",";
            }
        }
    }
    $ar=substr($ar,0,(strlen($ar)-1));
    return $ar;
}
```

men nu får jag detta i stället 
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

vad kan var fel? för jag vet inte riktigt vad som händer just nu kan jag ärligt säga nu :OO

Permalänk: https://www.webforum.nu/p/2307299

## #16 — prplxr, 2013-01-14T08:36Z

Titta i loggboken och ge oss felmeddelandet därifrån. Det där hjälper oss inte mycket. Alternativt så på felmeddelandevisning och kopiera på den vägen.

Permalänk: https://www.webforum.nu/p/2307315

## #17 — Mycodez, 2013-01-15T18:06Z

Jag får inget error i min loggbok :/

Permalänk: https://www.webforum.nu/p/2307338

## #18 — drew, 2013-01-16T22:17Z

"The server encountered an internal error or misconfiguration" brukar alltid ge något i loggen. Jag tror aldrig jag stött på att det inte skulle finnas något i loggen, vad jag kan komma ihåg.

Titta i Apache loggen både den vanliga *access.log* och *error.log*. På \*nix är dom i */var/log/apache2/* förutsatt att det är Apache 2 du använder.

Permalänk: https://www.webforum.nu/p/2307372

## #19 — Mycodez, 2013-01-18T13:03Z

tack ska kolla upp det. :)

Permalänk: https://www.webforum.nu/p/2307405

## #20 — Mycodez, 2013-01-23T12:04Z

ingen av filerna innehåller text ser jag :)

Permalänk: https://www.webforum.nu/p/2307525

---

Tråden på webben: https://www.webforum.nu/amne/php/191023-tömma-php-minnet
