Avatar billede mcardle Nybegynder
14. maj 2010 - 00:47 Der er 3 kommentarer og
1 løsning

Nogen der har oplevet noget lignende med ImageMagick

Hej Eksperter.

Jeg har et script, hvor jeg laver nogle thumbnail og noget omdøbning af filnavne og det virker sådan set også fint, lige bortset fra, hvis jeg sætter min header() på i bunden.

Den går fint derhen, hvor den skal og sætter alting ind i db'en, men den sletter det billede jeg lige har genereret med ImageMagick.

Jeg synes det er meget mærkeligt.

KODE
<?php
    session_start();
    require_once("../../includes/inc.config.php");
    require_once("../../classes/class.advSql.php");
    $sql = new DB_Mysql(MYSQL_USER, MYSQL_PASS, MYSQL_HOST, MYSQL_DATABASE);
    $sql->connect();
   
    $action = mysql_escape_string($_GET["action"]);
    $newsHeader = $_POST["news_header"];
    $newsTeaser = $_POST["news_teaser"];
    $newsPicture = $_FILES["news_picture"];
    $newsArticle = $_POST["news_article"];
    $newsCategoryId = $_POST["news_cat_select"];
   
    function makeThumbnail($path, $filename, $new_width, $new_height){
        $staticThumbFolder = $_SERVER["DOCUMENT_ROOT"]."gfx/images/article";
        $staticExtension = ".jpg";
       
        list($old_width, $old_height) = getimagesize($path."/".$filename);
        $sizes = calculateNewSizes($old_width, $old_height, $new_width, $new_height);
       
        $raw_filename = getRawFilename($filename);
        $str = "convert ".$path."/".$filename." -size ".$old_width."x".$old_height." -resize ".$sizes[0]."x".$sizes[1]." ".$staticThumbFolder."/".strtolower($raw_filename).$staticExtension;

        exec($str);
       
        $filenameInfos = getFilePathArray($staticThumbFolder."/".strtolower($raw_filename).$staticExtension);
       
        $info[0] = $filenameInfos[0];
        $info[1] = $filenameInfos[1];
        $info[2] = $sizes[0];
        $info[3] = $sizes[1];
        return $info;
    }
   
    function getRawFilename($filename){
        $pos = strpos($filename, ".");
        return substr($filename, 0, $pos);
    }
       
    function getFilePathArray($fileString){
        $split = explode("/", $fileString);
        $info[1] = end($split);
        unset($split[count($split)-1]);
        $info[0] = implode("/",$split);

        return $info;
    }
   
    function stripStaticPrefix($filepath){
        return substr($filepath, 20, strlen($filepath));
    }
   
    function calculateNewSizes($old_width, $old_height, $new_width, $new_height){
        if($old_width > $old_height){
            $ratio = $old_height/$old_width;
           
            $x[0] = $new_width;
            $x[1] = round($new_height*$ratio);
        }
        elseif($old_width < $old_height){
            $ratio = $old_width/$old_height;
           
            $x[0] = round($new_width*$ratio);
            $x[1] = $new_height;
        }
        else{
            $x[0] = $new_width;
            $x[1] = $new_height;
        }
       
        return $x;
    }
   
    if($action == "save_news"){
       
        // Create teaser, if not applied
        if($newsTeaser == ""){
            $newsTeaser = substr($newsArticle, 0, 100)."...";
        }
       
        // Temp path and name for the picture uploaded
        $tmp_dist = $_SERVER["DOCUMENT_ROOT"]."admin/gfx/tmp/".$newsPicture["name"];
       
        // Upload temp picture to temp dir
        if(!move_uploaded_file($newsPicture["tmp_name"], $tmp_dist)){
            die("Ikke uploadet");
        }
       
        // Split path and filename to array
        $pathFile = getFilePathArray($tmp_dist);
       
        // Make thumbnail from uploaded file
        $info = makeThumbnail($pathFile[0], $pathFile[1], 250, 250);
       
        // Set the time of the news
        $newsTime = time();
       
        // Insert file into DB
        $insertFile = mysql_query("
            INSERT INTO
                t_file(
                      c_filename,
                      c_path,
                      c_width,
                      c_height
                )
                VALUES(
                      '".$info[1]."',
                      '".stripStaticPrefix($info[0])."',
                      '".$info[2]."',
                      '".$info[3]."'
                )
        ");

        // Get fileid
        $newsFileId = mysql_insert_id();
       
        // Insert news, with fileid
        $insertNews = mysql_query("
            INSERT INTO
                t_news(
                      c_createdate,
                      c_header,
                      c_teaser,
                      c_article,
                      c_file_id
                )
                VALUES(
                      '".mysql_escape_string($newsTime)."',
                      '".mysql_escape_string($newsHeader)."',
                      '".mysql_escape_string($newsTeaser)."',
                      '".mysql_escape_string($newsArticle)."',
                      '".mysql_escape_string($newsFileId)."'
              )"
        );
       
        // Get newsid
        $newsArticleId = mysql_insert_id();
       
        // Insert category, with newsid
        $insertCategoryId = mysql_query("
            INSERT INTO
                t_news_category_crossfield(
                            c_news_id,
                            c_news_category_id
                )
                VALUES(
                        '".mysql_escape_string($newsArticleId)."',
                        '".mysql_escape_string($newsCategoryId)."'
                )"
        );
       
        // Delete temppicture
        @unlink($tmp_dist);
    }
   
    // Redirect to "insert news" page
    //header("location: ../news.php");
?>

Koden er jo meget straightforward, så jeg kan ikke lige se, hvad der skulle være i vejen.
Avatar billede mcardle Nybegynder
14. maj 2010 - 01:38 #1
UPDATE:

Jeg kan heller ikke sætte et javascript i bunden med en window.location.href, så sletter den også billedet.
Avatar billede htx98i17 Professor
14. maj 2010 - 08:13 #2
Nu kan jeg ikke lige gennemskue classer eller om ovenstående kode udskriver billedet til browseren. Men hvis den gør skal den kode være i en fil for sig selv og så skal du kalde den med almindeligt img tag.
Avatar billede mcardle Nybegynder
14. maj 2010 - 23:04 #3
For det første så er der ikke noget klasse over min ImageMagick og så outputter den heller ikke noget til browseren, den kopiere et billede fra et sted til et andet, samtidigt med at den skalere det :o)

Det virker, hvis jeg ikke redirect'er siden tilbage til, hvor jeg kom fra, men, hvis jeg gør, så sletter den billedet fra den mappe der er kopieret til.


// mcardle
Avatar billede mcardle Nybegynder
22. maj 2010 - 00:33 #4
Det ser ikke ud til det bliver besvaret...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester