3.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo

Ich bastle gerade eine kleine Fotowebseite. Um die Seite zu testen habe ich etwa 300 Bilder per FTP hochgeladen und diese dann durch ein PHP Script kopiert, in der Größe angepasst und in die DB eintragen lassen. Fehlermeldungen gab es keine.
Nach Ausführen desselben komme ich nicht mehr auf meine Webseite. Nix. Nadda. Kein Bit PHP wird ausgeführt. FTP, HTML und die Datenbankadministration funktionieren.
Der Support von One.com war so freundlich mir nicht zu verraten warum das so ist. Die schreiben es müsse "ein Konfigurationsfehler" sein. Ob bei mir oder bei denen schreiben sie nicht.
Was ist Falsch an dem Script? Besonders wenn es sich 300 mal hinternander aufruft?

<?php


$name = "admin";
$idanfang = 1;
$idende = 313;

$datumload = time();
$betrachtet = 1;
$status = "1";

$bildid = $_GET['id'];
if($bildid == ""){$bildid = $idanfang;}

########mit datenbank verbinden#######

$connectdb = "connectdb.php";
include $connectdb;



$abfrage = "SELECT * FROM uploadtemp where id='".$bildid."'";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_array($ergebnis))

{
$bildname = $row['bildname'];

}


echo $bildname;

########### kopieren von nach ###########

$filename1 = $bildname;
$filename = "masse/" . $filename1 . ".jpg";
$filename2 = "bigpic/" . $filename1 . ".jpg";

####max größe ###

$width = 1000;
$height = 1000;

list($width_orig, $height_orig) = getimagesize($filename);

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}

##### Resample #######

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

### Output ####

imagejpeg($image_p, $filename2, 100);

#####DB eintrag######

$intemp = "INSERT INTO bilder (namemd5,besitzer,datumload,status,betrachtet) VALUES ('$bildname','$name','$datumload','$status','$betrachtet')";
$schreibe = mysql_query($intemp);

#####neu laden #######


if($bildid < $idende){
$bildid++;
?>
<script type="text/javascript">
<!--
setTimeout("self.location.href='step2.php?id=<?php echo $bildid; ?>'",1000);
//-->
</script>
<?php

}else{echo "<br><br>ende erreicht";}

?>

7 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Auf Anhieb kann ich keine Fehler im Skript erkennen.
Nach Ausführen desselben komme ich nicht mehr auf meine Webseite. Nix. Nadda. Kein Bit PHP wird ausgeführt.
Hast du für diese Erkenntnis dieses gezeigte Skript aufgerufen oder auch mal andere? Ins Blaue geschossen rate ich ganz keck, dass das JavaScript nicht zieht.

Liegen denn wie erwartet im Ordner bigpic/ Dateien? Warum hast du das ganze vorher nicht mal lokal mit z.B. XAMPP ausprobiert?
0 Punkte
Beantwortet von
Ich habe, wie immer, vorher mit Xampp getestet. Dort lief es problemlos. Das Script ist auch auf dem One Server bis zum Schluss durchgelaufen (incl. Javascript). Danach(!) ging nichts mehr. Für diese Erkenntnis habe die index.php aufgerufen und einige Andere.
Im Ordner bigpic liegen keine Dateien, die sollen erst dort hin.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wenn keine Dateien im Ordner existieren, ist das Skript auch nie bis zum Ende durchgelaufen (sonst hätte es ja mindestens eine erzeugt).

Und bei dir lokal hat das Skript brav alle über 300 Bilder erzeugt? Es gibt nirgends überprüfende Ausgaben - gerade $ratio_orig, $width_orig und $height_orig sind gefährliche Kunden, die bei falschen Werten alles weitere sprengen können. Genauso wären Überprüfungen nicht schlecht, ob dein zusammengebastelter Dateiname überhaupt auch existiert.

Warum der Server aber nun generell schlappmacht weiß ich nicht... theoretisch müsste das ja auch weitere One.com-Kunden betreffen...
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
bei 1000 x 1000 Pixeln braucht ein Truecolor-Bild mindestens 3x1000x1000 = ~ 3MB Speicherplatz. Da du weder $image_p noch $image nach dem Skalier- und Schreibvorgang wieder freigibst, wird in der Schleife immer mehr Speicher"müll" angesammelt (resourcen werden nur beim Beenden des Scripts automatisch freigegeben); bei 300 Bildern kommst du da schon auf 300 x 3 MB, kein Wunder daß der Server da nicht mitspielt. Normalerweise darf ein Script zur Laufzeit nicht mehr als 32 MB belegen und nicht mehr als 30 Sekunden laufen, das ist glaube ich die Standardeinstellung von PHP.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
- vergiss meinen Kommentar, mir ist erst im Nachhinein aufgefallen, daß du ja nicht mit einer schleife arbeitest, sondern das Script sich selbst immer wieder aufrufen läßt.
0 Punkte
Beantwortet von
vielen Dank für die Infos.

Nach einigem Testen habe ich festgestellt das wohl die Datenbank nicht mehr will. Ein PHP Script ohne DB Aufruf wird ausgeführt. Sobald ein DB Aufruf dabei ist kommt die o.g. leere Seite.
Der Support konnte mir auch nicht helfen. Ich werd wohl noch mal von Null aus anfangen und mich langsam vortasten bis sich das Mimosenteil von DB endlich mal zu einer Fehlermeldung herablässt
:-(
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
ein
error_reporting(E_ALL);
am Anfang des Scripts kann beim Debuggen helfen.
...