Richard87 Skrevet 27. juni 2008 Del Skrevet 27. juni 2008 (endret) Hei, jeg har store problemer med at Apache2 crasher med kun denne feilmeldingen: gd-jpeg error: cannot allocate gdImage struct Jeg kjører apache2 på ubuntu(vps) jeg regner med at feilen er i denne koden(eneste plassen jeg bruker GD) dessuten, det kan se ut som feilen er periodisk, men aner ikke hvor den slutter og virke:S takker for all hjelp, jeg aner ikke hva jeg har gjort galt:S <?php function open_image ($file) { # JPEG: $im = @imagecreatefromjpeg($file); if ($im !== false) { return $im; } # GIF: $im = @imagecreatefromgif($file); if ($im !== false) { return $im; } # PNG: $im = @imagecreatefrompng($file); if ($im !== false) { return $im; } # GD File: $im = @imagecreatefromgd($file); if ($im !== false) { return $im; } # GD2 File: $im = @imagecreatefromgd2($file); if ($im !== false) { return $im; } # WBMP: $im = @imagecreatefromwbmp($file); if ($im !== false) { return $im; } # XBM: $im = @imagecreatefromxbm($file); if ($im !== false) { return $im; } # XPM: $im = @imagecreatefromxpm($file); if ($im !== false) { return $im; } # Try and load from string: $im = @imagecreatefromstring(file_get_contents($file)); if ($im !== false) { return $im; } return false; } $dir = '/home/hagen/Bilder/'; $cDir = $_GET['album']; $file = $_GET['file']; $filename = $dir.$cDir.$file; if (isset($_GET['upload']) and $_GET['upload'] == 1) $filename = '/home/hagen/upload/'.$file; if (isset($_GET['web']) and $_GET['web'] == 1) $filename = '/home/hagen/hagen.vg/'.$file; $ext = substr(strrchr($filename, '.'), 1); $ext = strtolower($ext); header("Pragma: cache"); if ($ext == 'jpg' or $ext == 'png' or $ext == 'jpeg' or $ext == 'gif' or $ext == 'bmp' or $ext == 'thm') { header("Content-type: image/$ext"); $image = open_image($filename); if ($image === false) { die ('Kunne ikke åpne bildet.'); } $desiredwidth = 790; $originalwidth = imagesx($image); $originalheight = imagesy($image); $ratio = $originalwidth / $desiredwidth; $desiredheight = $originalheight / $ratio; $thumb_ratio = $originalheight / 100; $thumb_width = $originalwidth / $thumb_ratio; $thumb_height = 100; $bthumb_width = 150; $bthumb_ratio = $originalwidth / $bthumb_width; $bthumb_height = $originalheight / $bthumb_ratio; if (isset($_GET['size'])) { if ($_GET['size'] == 'full') { if (isset($_GET['tekst'])) { $x = strpos($file, '.'); $tmp_file = $_GET['tekst']; $test_file = $dir.$cDir.'/'.substr($tmp_file, 0, $x+3).'.THM'; if (file_exists($test_file)) $image = open_image($test_file); $text_color = imagecolorallocate($image, 233, 14, 91); imagestring($image, 5, 0,0,$tmp_file, $text_color); imagejpeg($image); } else { imagejpeg($image); } } else if ($_GET['size'] == 'site') { $image_resized = imagecreatetruecolor($desiredwidth, $desiredheight); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $desiredwidth, $desiredheight, $originalwidth, $originalheight); imagejpeg($image_resized); } else if ($_GET['size'] == 'thumb') { $image_resized = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $originalwidth, $originalheight); imagejpeg($image_resized); } else if ($_GET['size'] == 'bigthumb') { $image_resized = imagecreatetruecolor($bthumb_width, $bthumb_height); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $bthumb_width, $bthumb_height, $originalwidth, $originalheight); imagejpeg($image_resized); } else { imagejpeg($image); } } else { readfile($dir.$cDir.$file); } } else if ($ext=='avi' or $ext == 'mov') { if ($_GET['size'] == 'bigthumb') { header("Content-type: image/jpeg"); $image_resized = imagecreatetruecolor(150, 100); $text_color = imagecolorallocate($image_resized, 233, 14, 91); imagestring($image_resized, 5, 5, 5, "Film", $text_color); imagepng($image_resized); imagedestroy($image_resized); }else { $fp = fopen($filename, 'rb'); header("Content-type: video/divx"); if ($ext == 'mov') header("Content-type: video/quicktime"); header("Content-Length: " .(string)(filesize($filename)) ); header('Content-Disposition: attachment; filename="'.$file.'"'); header("Content-Transfer-Encoding: binary\n"); if($fp = fopen($filename, 'rb')){ while( (!feof($fp)) && (connection_status()==0) ){ print(fread($fp, 1024*8)); flush(); } fclose($fp); } return((connection_status()==0) and !connection_aborted()); } } else { //filename is not JPG or AVI header("Content-type: image/png"); readfile('Feil.png'); } ?> [EDIT] gd_info() Array ( [GD Version] => 2.0 or higher [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => 1 [GIF Read Support] => 1 [GIF Create Support] => 1 [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XPM Support] => [XBM Support] => [JIS-mapped Japanese Font Support] => ) Endret 27. juni 2008 av Richard87 Lenke til kommentar
Ernie Skrevet 27. juni 2008 Del Skrevet 27. juni 2008 Det kommer nesten garantert av at bilde ikke er jpeg. I stedet for å ha ørten if-settninger der bør du heller sende med typen slik at du kan åpne korrekt med en gang. Lenke til kommentar
Richard87 Skrevet 27. juni 2008 Forfatter Del Skrevet 27. juni 2008 (endret) Hei, endret funksjonen til dette: function open_image ($file) { $ext = substr(strrchr($file, '.'), 1); $ext = strtolower($ext); switch ($ext) { case 'jpeg': case 'jpg': $im = @imagecreatefromjpeg($file); if ($im !== false) { return $im; } break; case 'gif': $im = @imagecreatefromgif($file); if ($im !== false) { return $im; } break; case 'png': $im = @imagecreatefrompng($file); if ($im !== false) { return $im; } case 'gd': $im = @imagecreatefromgd($file); if ($im !== false) { return $im; } break; case 'gd2': $im = @imagecreatefromgd2($file); if ($im !== false) { return $im; } break; case 'wbmp'; $im = @imagecreatefromwbmp($file); if ($im !== false) { return $im; } break; case 'xbm': $im = @imagecreatefromxbm($file); if ($im !== false) { return $im; } break; case 'xpm': $im = @imagecreatefromxpm($file); if ($im !== false) { return $im; } break; default: $im = @imagecreatefromstring(file_get_contents($file)); if ($im !== false) { return $im; } break; } return false; } men apache crasher enda: gd-jpeg error: cannot allocate gdImage struct gd-jpeg error: cannot allocate gdImage struct gd-jpeg error: cannot allocate gdImage struct [Fri Jun 27 17:59:25 2008] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run? [Fri Jun 27 17:59:25 2008] [notice] Apache/2.0.55 (Ubuntu) PHP/5.1.6 mod_ruby/1.2.6 Ruby/1.8.4(2005-12-24) mod_perl/2.0.2 Perl/v5.8.8 configured -- resuming normal operations Endret 27. juni 2008 av Richard87 Lenke til kommentar
itsmebth Skrevet 27. juni 2008 Del Skrevet 27. juni 2008 Er du sikker på at du imagedestroy'er alle bildene? Det ser ut som du går tom for minne. Lenke til kommentar
Richard87 Skrevet 30. juni 2008 Forfatter Del Skrevet 30. juni 2008 Hagee ikke gjort det, mer er fikset nå.. Men apache crasher fortsatt:S <?php function open_image ($file) { $ext = substr(strrchr($file, '.'), 1); $ext = strtolower($ext); switch ($ext) { case 'jpeg': case 'jpg': $im = @imagecreatefromjpeg($file); if ($im !== false) { return $im; } break; case 'gif': $im = @imagecreatefromgif($file); if ($im !== false) { return $im; } break; case 'png': $im = @imagecreatefrompng($file); if ($im !== false) { return $im; } case 'gd': $im = @imagecreatefromgd($file); if ($im !== false) { return $im; } break; case 'gd2': $im = @imagecreatefromgd2($file); if ($im !== false) { return $im; } break; case 'wbmp'; $im = @imagecreatefromwbmp($file); if ($im !== false) { return $im; } break; case 'xbm': $im = @imagecreatefromxbm($file); if ($im !== false) { return $im; } break; case 'xpm': $im = @imagecreatefromxpm($file); if ($im !== false) { return $im; } break; default: $im = @imagecreatefromstring(file_get_contents($file)); if ($im !== false) { return $im; } break; } return false; } $dir = '/home/hagen/Bilder/'; $cDir = $_GET['album']; $file = $_GET['file']; $filename = $dir.$cDir.$file; if (isset($_GET['upload']) and $_GET['upload'] == 1) $filename = '/home/hagen/upload/'.$file; if (isset($_GET['web']) and $_GET['web'] == 1) $filename = '/home/hagen/hagen.vg/'.$file; $ext = substr(strrchr($filename, '.'), 1); $ext = strtolower($ext); header("Pragma: cache"); if ($ext == 'jpg' or $ext == 'png' or $ext == 'jpeg' or $ext == 'gif' or $ext == 'bmp' or $ext == 'thm') { header("Content-type: image/$ext"); $image = open_image($filename); if ($image === false) { die ('Kunne ikke åpne bildet.'); } $desiredwidth = 790; $originalwidth = imagesx($image); $originalheight = imagesy($image); $ratio = $originalwidth / $desiredwidth; $desiredheight = $originalheight / $ratio; $thumb_ratio = $originalheight / 100; $thumb_width = $originalwidth / $thumb_ratio; $thumb_height = 100; $bthumb_width = 150; $bthumb_ratio = $originalwidth / $bthumb_width; $bthumb_height = $originalheight / $bthumb_ratio; if (isset($_GET['size'])) { if ($_GET['size'] == 'full') { if (isset($_GET['tekst'])) { $x = strpos($file, '.'); $tmp_file = $_GET['tekst']; $test_file = $dir.$cDir.'/'.substr($tmp_file, 0, $x+3).'.THM'; if (file_exists($test_file)) $image = open_image($test_file); $text_color = imagecolorallocate($image, 233, 14, 91); imagestring($image, 5, 0,0,$tmp_file, $text_color); imagejpeg($image); imagedestroy($image); } else { imagejpeg($image); imagedestroy($image); } } else if ($_GET['size'] == 'site') { $image_resized = imagecreatetruecolor($desiredwidth, $desiredheight); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $desiredwidth, $desiredheight, $originalwidth, $originalheight); imagejpeg($image_resized); imagedestroy($image_resized); } else if ($_GET['size'] == 'thumb') { $image_resized = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $originalwidth, $originalheight); imagejpeg($image_resized); imagedestroy($image_resized); } else if ($_GET['size'] == 'bigthumb') { $image_resized = imagecreatetruecolor($bthumb_width, $bthumb_height); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $bthumb_width, $bthumb_height, $originalwidth, $originalheight); imagejpeg($image_resized); imagedestroy($image_resized); } else { imagejpeg($image); imagedestroy($image_resized); } } else { readfile($dir.$cDir.$file); } } else if ($ext=='avi' or $ext == 'mov') { if ($_GET['size'] == 'bigthumb') { header("Content-type: image/jpeg"); $image_resized = imagecreatetruecolor(150, 100); $text_color = imagecolorallocate($image_resized, 233, 14, 91); imagestring($image_resized, 5, 5, 5, "Film", $text_color); imagepng($image_resized); imagedestroy($image_resized); }else { $fp = fopen($filename, 'rb'); header("Content-type: video/divx"); if ($ext == 'mov') header("Content-type: video/quicktime"); header("Content-Length: " .(string)(filesize($filename)) ); header('Content-Disposition: attachment; filename="'.$file.'"'); header("Content-Transfer-Encoding: binary\n"); if($fp = fopen($filename, 'rb')){ while( (!feof($fp)) && (connection_status()==0) ){ print(fread($fp, 1024*8)); flush(); } fclose($fp); } return((connection_status()==0) and !connection_aborted()); } } else { //filename is not JPG or AVI header("Content-type: image/png"); readfile('Feil.png'); } imagedestroy($image); imagedestroy($image_resize); ?> Lenke til kommentar
Ernie Skrevet 30. juni 2008 Del Skrevet 30. juni 2008 (endret) Høyst merkelig problem må jeg si. Feilmeldingen blir generert av at følgende linje gir 0 (linje 333 i gd_jpeg.c i kildekoden for PHP 5.2) im = gdImageCreateTrueColor ((int) cinfo.image_width, (int) cinfo.image_height); Det er vanskelig å se for seg hvordan verdien der skal bli 0 med mindre det er noe overflow e.l. på gang (iallfall ut fra den kildekoden jeg tok en titt på). Sikker på at ikke et av bildene er korrupte e.l.? Det første linjene av gdImageCreateTrueColor ser forøvrig slik ut: gdImagePtr gdImageCreateTrueColor (int sx, int sy) { int i; gdImagePtr im; if (overflow2(sx, sy)) { return NULL; } if (overflow2(sizeof(unsigned char *), sy)) { return NULL; } if (overflow2(sizeof(int), sx)) { return NULL; } Dette er de eneste mulighetene for å få NULL eller 0 siden de resterende linjene i funksjonen bare er tilordninger etc. mot struct-en (im) som da åpenbart ikke kan være NULL (ellers hadde nok programmet krasjet med en helt annen feilmelding). Endret 30. juni 2008 av Ernie Lenke til kommentar
Richard87 Skrevet 30. juni 2008 Forfatter Del Skrevet 30. juni 2008 (endret) takker for 'informativt' svar, men jeg finner ennå ikke ut av feilen:S for litt siden greide jeg og vise alle bildene i en mappe som lagre trøbbel, plutseligt så vil den ikke vise et par bilder, så tar jeg en refresh, og noen bilder kommer fram igjen, før plutselig webserveren crasher med samme feilmelding som tidligere. det virker som det er helt random:S den eneste forandringen jeg gjorde var og fjerne THM filer fra lista over filer som skal bli vist(denne filtypen har altid virket:S) slik er skriptet som viser bildene: <?php function getarea($filename) {; $handle = fopen($filename, "rb"); $header = fread($handle,8192); fclose($handle); $header = substr($header, strpos($header,"\r\n\r\n")+4); return $header; $values = unpack("C*", substr($header, strpos($header, 'avih8') + 40, 6)); return array($values[1] + $values[2]*256, $values[5] + $values[6]*256); } include_once('auth.php'); if (isauthenticated()) { //list bilder/album $dir = '/home/hagen/Bilder/'; $bLoad = false; $cDir = ''; if (isset($_GET['file'])) { $bLoad = true; } if (isset($_GET['album'])) { $cDir = $_GET['album'] . '/'; } if ($bLoad) { // load picture $ext = strtolower(substr(strrchr($_GET['file'], '.'), 1)); if ($ext == 'avi') { $ret = getarea($dir.$cDir.$_GET['file']); //print_r ($ret); $url = 'http://hagen.drachir.no/image.php?album='.$_GET['album'].'&file='.$_GET['file']; print('<embed type="video/divx" src="'.$url.'" pluginspage="http://go.divx.com/plugin/download/" allowscriptaccess="never" width="320" height="260">'); print(' <a href="http://www.divx.com/divx/webplayer/"><img src="http://labs.divx.com/files/dwp-l-l.gif" border="0" /></a>'); print ('<br /><br /><a href="'.'index.php?page=bilder3&start='.$_GET['start'].'&count='.$_GET['count'].'&album='.$_GET['album'].'">Tilbake</a>'); } else if ($ext == 'mov') { $url = 'http://hagen.drachir.no/image.php?album='.$_GET['album'].'&file='.$_GET['file']; ?> <script src="DWConfiguration/ActiveContent/IncludeFiles/AC_ActiveX.js" type="text/javascript"></script> <script src="DWConfiguration/ActiveContent/IncludeFiles/AC_RunActiveContent.js" type="text/javascript"></script> <script type="text/javascript"> AC_AX_RunContent( 'classid','clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B','codebase','http://www.apple.com/qtactivex/qtplugin.cab','height','256','width','320','src','<?php print($url); ?>','autoplay','true','type','video/quicktime','pluginspage','http://www.apple.com/quicktime/download/' ); //end AC code </script><script type="text/javascript"> AC_AX_RunContent( 'classid','clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B','codebase','http://www.apple.com/qtactivex/qtplugin.cab','height','256','width','320','src','<?php print($url); ?>','autoplay','true','type','video/quicktime','pluginspage','http://www.apple.com/quicktime/download/' ); //end AC code </script><noscript><object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="256" width="320"> <param name="src" value="<?php print($url); ?>"> <param name="autoplay" value="true"> <param name="type" value="video/quicktime" height="256" width="320"> <embed src="<?php print($url); ?>" height="256" width="320" autoplay="true" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"> </object></noscript> <?php print ('<br /><br /><a href="'.'index.php?page=bilder3&start='.$_GET['start'].'&count='.$_GET['count'].'&album='.$_GET['album'].'">Tilbake</a>'); } else { $url = 'image.php?album='.$_GET['album'].'&file='.$_GET['file']; print ('<a href="'.$url.'&size=full">Bilde: '.$_GET['album'].$_GET['file'].'<br>'); print ('<img src="'.$url.'&size=site" border=0 /></a>'); print ('<br /><br /><a href="'.'index.php?page=bilder3&start='.$_GET['start'].'&count='.$_GET['count'].'&album='.$_GET['album'].'">Tilbake</a>'); } } else if ($handle = opendir($dir.$cDir)) { $x = 0; $img[0] = $_GET['album']; $link[0] = $_GET['album']; while (false !== ($file = readdir($handle))) { $ext = strtolower(substr(strrchr($file, '.'), 1)); if (is_dir($dir.$file)) { } else { if ($file == '.' or $file=='..') { }else if($ext =='info' or $ext == 'thm' or $ext == 'THM') { } else { $x = $x + 1; $link2 = '<a href="index.php?page=bilder3&album='.$cDir.'&file='.$file.'&start='.$_GET['start'].'&count='.$_GET['count'].'">'; $ext = strtolower(substr(strrchr($file, '.'), 1)); if ($ext == 'avi' or $ext == 'mov') { $img2 = '<img src="image.php?web=1&file=movie.jpg&size=full&tekst='.$file.'&album='.$_GET['album'].'" border=0 /></a>'."\n"; }else { $img2 = '<img src="image.php?album='.$cDir.'&file='.$file.'&size=bigthumb" border=0 /></a>'."\n"; } $link[$x] = $link2; $img[$x] = $img2; $max = $x; } } } closedir($handle); $start = 1; $count = 15; if (isset($_GET['start'])) $start = $_GET['start']; if (isset($_GET['count'])) $count = $_GET['count']; if ($start + $count > $max) { $count = $max - $start; } $nstart = $start + $count; $pstart = $start - $count; $min = 1; $next = '<a href="index.php?page=bilder3&start='.$nstart.'&count='.$count.'&album='.$cDir.'">Vis Neste '.$count.'</a>'; $previus = '<a href="index.php?page=bilder3&start='.$pstart.'&count='.$count.'&album='.$cDir.'">Vis Forrige '.$count.'</a>'; print ('<a href="index.php?page=bilder">Tilbake til Album</a>'); $strStart = '<i>Vis Forrige '.$count.'</i>'; if ($start > 1) $strStart = $previus; $strMid = "Viser bilde $start til og med bilde ".($start+$count - 1)." av totalt $max bilder"; $strLast = '<i>Vis Neste '.$count.'</i>'; if (!($start + $count > $max))$strLast = $next; ?> <table width="800" border="0"> <tr> <td align="left"><?php print($strStart); ?></td> <td align="center"><?php print($strMid); ?></td> <td align="right"><?php print($strLast); ?></td> </tr> </table> <?php for ($y = $start; $y <= $start + $count - 1; $y++) { print($link[$y]); print($img[$y]); } ?> <table width="800" border="0"> <tr> <td align="left"><?php print($strStart); ?></td> <td align="center"><?php print($strMid); ?></td> <td align="right"><?php print($strLast); ?></td> </tr> </table> <?php } else { print('Problemer med og åpne mappen med bilder!'); } }else { print('Please loginn!!!'); } ?> kan det ha noe med minne bruken og gjøre(for lite minne?) Takker for alle svar [EDIT] I ett annet album hra jeg 100vis av bilder, og det er ikke noe problem og vise alle disse bildene i ett galleri på en gang(dessuten, det er et par bilder der som ikke her 100% opplastet, som generer feilmeldingen: 'premature end jpeg file'(ell), men apache krasjer ikke), det er kun det ene galleriet med 10 bilder og 2 filmer som lager problemer.... Endret 30. juni 2008 av Richard87 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå