Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Abbruch ohne Meldung [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Abbruch ohne Meldung


 
sprint
15-06-2006, 19:54 
 
Dieses Script soll aus einer Tabelle sich die Ordner raussuchen und darin zu allen Bildern ein Thumbnail erstellen. Es funktioniert auch, allerdings bricht es nach kurzer Zeit ohne Fehlermeldung ab. Bei 300 - 400kB Bildern nach etwa 6 Bildern, bei Bildgrößen von ca. 100kB nach etwa 15 Bildern.
Auch ein error_reporting(E_ALL) brachte keinen Hinweis.

function resizeImage($imgname, $pfad){
$quality = 85;
$maxb = 200;
$maxh = 200;
$bildpfad = $pfad.'/'.$imgname;
$bild = imagecreatefromjpeg($bildpfad);
$alt_breite = imagesx($bild);
$alt_hoehe = imagesy($bild);
if ($alt_breite <= $alt_hoehe){
$neu_hoehe = $maxh;
$neu_breite = round(($neu_hoehe / $alt_hoehe) * $alt_breite);
if ($neu_breite > $maxb){
$faktor = $neu_breite / $maxb;
$neu_breite = $maxb;
$neu_hoehe = $neu_hoehe * $faktor;
}
}else{
$neu_breite = $maxb;
$neu_hoehe = round(($neu_breite / $alt_breite) * $alt_hoehe);
if ($neu_hoehe > $maxh){
$faktor = $neu_hoehe / $maxh;
$neu_hoehe = $maxh;
$neu_breite = $neu_breite * $faktor;
}
}
$breite_of = $neu_breite - 14;
$hoehe_of = $neu_hoehe - 14;
$file_name_dest = "$pfad/thumbs/$imgname";
$thumb = imagecreatetruecolor($neu_breite, $neu_hoehe);
$farbe_body=imagecolorallocate($thumb,255,255,255);
imagefill($thumb,0,0,$farbe_body);
imageantialias($thumb, TRUE);
imagecopyresampled($thumb, $bild, 7, 7, 0, 0, $breite_of, $hoehe_of, $alt_breite, $alt_hoehe);
imagejpeg($thumb,$file_name_dest, $quality);
imagedestroy($thumb);
return TRUE;
}

...

while($zeile=mysql_fetch_array($erg)){
$ordner = $zeile[ordner];
$pfad = "files/".$ordner;
mkdir("files/$ordner/thumbs", 0777);
if ($handle = @opendir($pfad)){
while ($file = readdir($handle)){
if (is_file($pfad.'/'.$file)){
$ret = resizeImage($file, $pfad);
if (!$ret)
exit ('Das Vorschaubild konnte nicht erstellt werden!');
}
}
closedir($handle);
}
}


Hat jemand eine Idee, woran es liegt bzw. was geändert werden muß? Danke schonmal im Voraus.

 
Shurakai
15-06-2006, 20:37 
 
Setz doch mal ganz unten ne Testausgabe hin. Vielleicht läuft das Script ja auch einfach durch - dann hast du irgendwo einen Logikfehler gemacht.

 
sprint
15-06-2006, 21:18 
 
Es gibt fast nichts, was ich nicht schon ausgeben ließ. Es war aber nichts dabei, was mir irgendwie verdächtig erschienen wäre. Ich hab die Ausgaben hier zur besseren Übersicht nur rausgenommen.

Das einzige was ich dabei rausfinden konnte war, daß nicht immer an der selben Stelle abgebrochen wird. Mal ist nach dem imageantialias Schluß, mal wird noch ein Dateiname geholt, aber dann die Funktion nicht mehr aufgerufen.

 
sprint
15-06-2006, 22:05 
 
Da die Seite, für die das Script ist, schon existiert und bisher die Vorschaubilder immer online erzeugt wurden, habe ich das Ganze jetzt mal abgewandelt. Bisher ist die Routine, die hier in eine Funktion verpackt wurde, als separate Datei aufgerufen worden. Ich habe das nun insoweit abgewandelt, als daß die Funktion nicht mehr aufgerufen wird sondern statt dessen diese externe Datei in ein <img> verpackt die Bilder erzeugt und es nicht an den Browser zurückgibt sondern in das separate Verzeichnis schreibt. Und so funktioniert es!!! :confused:

Damit hat sich das Problem an sich zwar gelöst, aber es wäre trotzdem interessant zu wissen, warum es als Funktion nicht klappt.

 
Wurzel
16-06-2006, 00:42 
 
Original geschrieben von sprint
aber es wäre trotzdem interessant zu wissen, warum es als Funktion nicht klappt. max_execution_time mal geprüft?

 
sprint
16-06-2006, 00:53 
 
Original geschrieben von Wurzel
max_execution_time mal geprüft?

Ja, hatte ich auch schon dran gedacht. Liegt aber wie üblich bei 30 Sekunden. Der Abbruch kommt aber sehr viel früher, nach ca. 10 - 15 Sec.

 
hhcm
16-06-2006, 09:51 
 
Siehst du durch error_reporting(E_ALL) denn überhaupt irgendwelche fehler?

Teste einfach mal und schreib nen echo $abcdef; in den Code.

Ich habe bei mehreren Windows Apache versionen gemerkt das die display_errors direktive auf false steht und somit gar keine fehler angezeigt werden (trotz E_ALL)

 
sprint
16-06-2006, 10:07 
 
Original geschrieben von hhcm
Siehst du durch error_reporting(E_ALL) denn überhaupt irgendwelche fehler?

Teste einfach mal und schreib nen echo $abcdef; in den Code.

Ich habe bei mehreren Windows Apache versionen gemerkt das die display_errors direktive auf false steht und somit gar keine fehler angezeigt werden (trotz E_ALL)

Es werden schon Fehler ausgegeben, sind aber alles nur "Notice: Use of undefined constant ...", kein einziger Error oder Warning.
Das kann es aber auch nicht sein, da ja wie gesagt die identische Routine, in eine externe Datei verpackt, einwandfrei durchläuft. Es müßte also eher an der Verwendung als Function liegen.

 
E.T.
16-06-2006, 12:38 
 
Was ist damit?
if ($handle = @opendir($pfad))

 
sprint
16-06-2006, 13:52 
 
Original geschrieben von E.T.
Was ist damit?
if ($handle = @opendir($pfad))

Ist zum auslesen eines Verzeichnisses per PHP. Hat aber auch nichts mit dem Problem zu tun, da dieser Teil immer unverändert bleibt und auch die funktionierende Lösung mit der externen Routine so arbeitet.

 
hhcm
16-06-2006, 14:00 
 
Er meint sicher das böse --> @ <-- Unsauberes Programmieren nennt sich sowas :)

 
sprint
16-06-2006, 15:04 
 
Original geschrieben von hhcm
Er meint sicher das böse --> @ <-- Unsauberes Programmieren nennt sich sowas :)
Hab das so aus einem fertigen Script übernommen und nie Gedanken drüber gemacht.

 
hhcm
16-06-2006, 15:57 
 
Schmeiss es mal raus.

Fehlerunterdrückung ist bei suche nach Fehlern irgendwie :goth:

 
sprint
17-06-2006, 02:20 
 
Original geschrieben von hhcm
Schmeiss es mal raus.

Hab es probiert, hat aber wie vermutet keine neuen Erkenntnisse gebracht. Kann ja auch nicht sein, da diese Stelle ja beim Abbruch schon weit zurück liegt. (Ich prüfe ja auch nicht die Haustür, wenn die Klotür im 10. Stock klemmt. ;) ) Und um es noch mal zu wiederholen, dieses Script in zwei Teile zerlegt, funktioniert einwandfrei! Es muß also mMn an der Funktion liegen.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:53 Uhr.