php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-02-2008, 02:14
nimroder
 Newbie
Links : Onlinestatus : nimroder ist offline
Registriert seit: Feb 2008
Beiträge: 5
nimroder ist zur Zeit noch ein unbeschriebenes Blatt
nimroder eine Nachricht über ICQ schicken
Standard Allowed memory size - Problem

Hallo zusammen,

ich stehe vor einem Problem an dem ich nun bereits einige Tage sitze.

Sinn des Scripts:
Bilderupload für Galerie per ZIP; anschließend die Bilder in Thumbs und verkleinerte Originale manipulieren.

Problem:
Ich bekomme immer "Allowed memory size of 16777216 bytes exhausted (tried to allocate 6000 bytes) " nach einigen Bildern.
Die ersten x Bilder funktionieren einwandfrei und dann ist eben der temporäre Speicher voll..Ich habe schon alle mir bekannten Möglichkeiten um diesen wieder freizugeben ausprobiert -> Fehlanzeige.
Auch der Versuch die Aktionen über eingeforderte Mausklicks des Uploaders auszulagern um die automatische Speicherfreigabe nach Scriptende zu nutzen schafft keine Abhilfe.

Anbei mal der Code:

PHP-Code:
define("FOLDER","../images/gallery/$_GET[galname]/");
    
define("THUMBFOLDER","../images/gallery/$_GET[galname]/thumbs/");
    
    
$galname $_GET['galname'];
    
    
    
    
$dir=openDir(FOLDER);
    
    
    
$handle=opendir (FOLDER);
    
$i 0;
    while (
$datei readdir ($handle)) {
        if(
subStr($datei,-3,3)=="jpg") {
            
$i++;
            
//echo $datei;
        
}
    }
    
closedir($handle); 
    
    
$anzahl $i;
    if (empty(
$anzahl)) $anzahl $_GET['anzahl'];
    echo 
"ANZAHL: ".$anzahl;
    
$handle=opendir (FOLDER);
    
$start $_GET['start'];
    if ((
$start 7)<$anzahl$ende $start+7; else $ende $anzahl;
    
$newstart $start+7;
    echo 
"<br>ENDE: ".$ende;
    
    
$i 1;
    while (
$datei readdir ($handle)) {
        if(
subStr($datei,-3,3)=="jpg") {
            
                if (
$i >= $start && $i <= $ende) {
                     
                
$orig $datei;
                
resize($orig,$datei,100);
                }
            
$i++;
            if (((
$start 7)>=$anzahl) && $i=$anzahl) die ("Alles bearbeitet");
            
$newstart $ende +1
            if (
$i $ende) die (
"<a href=\"uploadpic.php?step=4&start=$newstart&galname=$galname&anzahl=$anzahl\">
Bitte hier klicken um fortzusetzen</a>"
);
    
        }
    
    } 
Dazu noch die Funktion zum Bilder :
PHP-Code:
function resize($orig,$filename,$width)
{

    
$size=getImageSize(FOLDER.$orig);
    
$orig_width=$size[0];
    
$orig_height=$size[1];


    
$src=imageCreateFromJpeg(FOLDER.$orig);
    


   

    if(
$orig_width>$width)
    {
        
$factor=$orig_width/$width;
        echo 
"bild zu groß";
        
$new_height =  ($orig_height/$factor);
        
$new_width = ($orig_width/$factor);
    
    
    } else {
    
$new_width $orig_width;
    
$new_height $orig_height;
    echo 
"bild ok";
    
    }
    

 
    
$dst=imageCreateTrueColor($new_width,$new_height);

    
$buffer=imageCopyResized($dst,$src,0,0,0,0,$new_width,$new_height,$orig_width,$orig_height);
    
$src imagedestroy($src);
    
    
imageJpeg($dst,FOLDER.$filename,85);
    
$test imagedestroy($dst);
    if (
$src==TRUE) echo "PIC WEG"; else echo "ERROR";


Das ganze läuft atm auf xampp unter Vista mit 16MB Limit.


Ich hoff jemand von euch steigt da etwas mehr durch.

Gruß

EDIT:
ein zeilenumbruch spendiert von kropff

Geändert von Kropff (29-02-2008 um 16:54 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 29-02-2008, 08:37
XGremliN
 PHP Senior
Links : Onlinestatus : XGremliN ist offline
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
XGremliN ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sieht ganz so aus, als würden die 16MB nicht ausreichen. da kannst du nichts machen im script. du kannst nur in der php.ini die max_upload_size erhöhen.
__________________
it's not a bug,
it's a feature!
Mit Zitat antworten
  #3 (permalink)  
Alt 29-02-2008, 09:19
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
sieht ganz so aus, als würden die 16MB nicht ausreichen. da kannst du nichts machen im script. du kannst nur in der php.ini die max_upload_size erhöhen.
Hat aber nix damit zu tun. Sondern mehr mit dem maximalen Speicher der gemäss php.ini für ein Script verwendet werden darf. Die von dir genannte Direktive würde afaik keinen Fehler geben, sondern das Bild nach kompletten Upload still und heimlich aus dem Temp Folder löschen
@Topicstarter:
Probier mal die folgenden Dinge
1. Anpassen zur Laufzeit (weiss aber ned ob das wirklich funzt)
PHP-Code:
<?
echo ini_get("memory_limit");
ini_set("memory_limit","32M");
echo 
ini_get("memory_limit");
?>
2. Ändere es direkt in der php.ini
Code:
memory_limit = 32M ;
3. Oder versuche es via .htaccess Datei
Code:
php_value memory_limit 32M
Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #4 (permalink)  
Alt 29-02-2008, 09:21
XGremliN
 PHP Senior
Links : Onlinestatus : XGremliN ist offline
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
XGremliN ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@jahlives
ich meinte ja auch memory_limit. ist echt noch zu früh heute :-) (wie komm ich nur auf max_upload_size???)
__________________
it's not a bug,
it's a feature!
Mit Zitat antworten
  #5 (permalink)  
Alt 29-02-2008, 15:42
nimroder
 Newbie
Links : Onlinestatus : nimroder ist offline
Registriert seit: Feb 2008
Beiträge: 5
nimroder ist zur Zeit noch ein unbeschriebenes Blatt
nimroder eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von jahlives
PHP-Code:
<?
echo ini_get("memory_limit");
ini_set("memory_limit","32M");
echo 
ini_get("memory_limit");
?>
Erstmal Danke für eure Antworten.
Das oben zitierte funktioniert einwandfrei. Aber so einfach kann ich ja nur auf dem xampp das Limit erhöhen. Im produktiven Einsatz dürfte mir diese Lösung somit nicht helfen oder?

Es muss doch eine Möglichkeit geben eine große Anzahl von Bildern auf mehrere Schritte verteilt zu bearbeiten um mit dem memory_limit klar zu kommen (Mein Testzip beträgt lediglich 4MB).

Wo verbraucht das Script denn diesen enormen Speicher? Ich lasse das Zip doch extra vorher entpacken um diesem Problem zu entgehen.

Würde es etwas helfen zwischen 2 PHP-Dateien zu springen während dem Bearbeiten der Bilder?

Gruß
Mit Zitat antworten
  #6 (permalink)  
Alt 29-02-2008, 15:45
Blitzschlag
 Newbie
Links : Onlinestatus : Blitzschlag ist offline
Registriert seit: Jul 2007
Beiträge: 29
Blitzschlag ist zur Zeit noch ein unbeschriebenes Blatt
Standard

php_ini

Da kann man das doch einstellen ich verstehe nicht
warum man immer so vieles versucht.
Der Fehler sagt doch schon alles oder irre ich mich jetzt ????

memory_limit einfach erhöhen in der phpINI

Geändert von Blitzschlag (29-02-2008 um 16:55 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 29-02-2008, 16:16
nimroder
 Newbie
Links : Onlinestatus : nimroder ist offline
Registriert seit: Feb 2008
Beiträge: 5
nimroder ist zur Zeit noch ein unbeschriebenes Blatt
nimroder eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von Blitzschlag
php_ini

Da kann man das doch einstellen ich verstehe nicht warum man immer so vieles versucht. Der Fehler sagt doch schon alles oder irre ich mich jetzt ????

memory_limit einfach erhöhen in der phpINI
Das Problem an der Sache ist, dass du dir zwar auf deinem localhost alles so konfigurieren kannst damit alles so läuft wie du willst,
wenn du das ganze aber nun nicht selbst hostest unterliegst du Beschränkungen vom Hoster.
Und dieser wird dich nicht einfach an der php.ini herumbasteln lassen.
Sollte das doch gehen belehrt mich (siehe mein Post zuvor).

Geändert von nimroder (29-02-2008 um 17:01 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 29-02-2008, 16:27
Blitzschlag
 Newbie
Links : Onlinestatus : Blitzschlag ist offline
Registriert seit: Jul 2007
Beiträge: 29
Blitzschlag ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von nimroder
Das Problem an der Sache ist, dass du dir zwar auf deinem localhost alles so konfigurieren kannst damit alles so läuft wie du willst, wenn du das ganze aber nun nicht selbst hostest unterliegst du Beschränkungen vom Hoster und dieser wird dich nicht einfach an der php.ini herumbasteln lassen.
Ohja das stimmt. Ich sag da aber gleich immer, wenn man sich entscheiden möchte wirklich was zu hosten sollte man sich zuhause Linux installieren erstmal testen und probieren.
Dann damit es nicht so teuer ist einen V-Server anmieten und da hat man ja volle root rechte also meine Meinung ist man sollte sich immer über php hinnaus informieren.
Mit Zitat antworten
  #9 (permalink)  
Alt 29-02-2008, 16:47
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Brich doch mal die lange Zeile gemäß den Regeln um. (Siehe sticky-Thread, den du ja offensichtlich nicht gelesen hast.)
Mit Zitat antworten
  #10 (permalink)  
Alt 29-02-2008, 17:00
nimroder
 Newbie
Links : Onlinestatus : nimroder ist offline
Registriert seit: Feb 2008
Beiträge: 5
nimroder ist zur Zeit noch ein unbeschriebenes Blatt
nimroder eine Nachricht über ICQ schicken
Standard

1. Testen nützt überhaupt nichts wenn du das unter völlig anderen Bedingungen machst.
Wenn du es unter ähnlichen Bedingungen testest musst du eben bei deinem Script nach Fehlern/Verbesserungen suchen wenn es nicht funktioniert wie geplant.
Einfach das Limit zu erhöhen damit es funktioniert ist mit Sicherheit nicht die beste Lösung.

2. Ein VServer sorgt für sehr viel mehr Arbeit als ein normales Webhosting-Angebot.
Abgesehen davon dass er auch im Vergleich teurer ist.
Und ändert nichts daran, dass man das Problem umgeht in dem man die Rahmenbedingungen so lange anpasst bis es funktioniert.

Könnten wir nun bitte zum Thema zurück kommen.
Wenn du über den Sinn von Fehlersuche/Verbesserungen diskutieren willst mach doch bitte einen neuen Thread auf.
In diesem hier geht es eben um genau diese und nicht um eine Diskussion darüber.

Danke


edit:
@ghostgambler
Sorry.
Ich hab übersehen, dass ich am Notebook eine höhere Auflösung habe, lässt sich bei Widescreen auch nur schwer einschätzen.
Sticky wurde sehr wohl zuvor gelesen.

Geändert von nimroder (29-02-2008 um 17:07 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 29-02-2008, 17:06
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hast du mal memory_get_usage() in dein script eingebaut, um den verlauf der speicherausnutzung zu verfolgen?

ich denke nicht, dass es an der anzahl der bilder liegt, sondern an einem mit hoher auflösung/farbtiefe, wo es dann knallt.
Mit Zitat antworten
  #12 (permalink)  
Alt 29-02-2008, 17:41
nimroder
 Newbie
Links : Onlinestatus : nimroder ist offline
Registriert seit: Feb 2008
Beiträge: 5
nimroder ist zur Zeit noch ein unbeschriebenes Blatt
nimroder eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von 3DMax
hast du mal memory_get_usage() in dein script eingebaut, um den verlauf der speicherausnutzung zu verfolgen?

ich denke nicht, dass es an der anzahl der bilder liegt, sondern an einem mit hoher auflösung/farbtiefe, wo es dann knallt.
Danke!
Genau da liegt der Fehler:
Speicher bei Aufruf der Funktion: 137312
Speicher kurz vor dem Fehler: 15182144

Wenn ich dieses Bild aus dem Zip herausnehme läuft das ganze wunderbar, bei einer Speicherverwendung zwischen 130000 und 150000.
Mit Zitat antworten
  #13 (permalink)  
Alt 29-09-2008, 14:52
micel
 Newbie
Links : Onlinestatus : micel ist offline
Registriert seit: Sep 2008
Beiträge: 1
micel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo an alle,

hat mir sehr geholfen.
Ich hatte wohl auch ein Bild mit zu viel entpackter Größe und Farbtiefe.

Viele Grüße

m i c e l
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:06 Uhr.