Avatar billede ezzer Nybegynder
06. juni 2005 - 22:23 Der er 13 kommentarer og
1 løsning

søg efter et stykke tekst i en string!

Hejsa.. jeg har lavet et script som opretter thumbnails af nogen billeder i en mappe.. scriptet er lidt automatiseret, men nok om det... jeg leder så efter en funktion til at tjekke om ordet "thumb_" indgår i det filnavn man er ved at konvertere til et thumb.. da den skal undlade alle de billeder der hedder det.. har prøvet med et par forskellige ting og sager, men kan ikk få noget af det til at virke...
Avatar billede nielle Nybegynder
06. juni 2005 - 22:38 #1
<?php
$fileName = "thumb_BlahBlah.jpeg";
$pattern = "/thumb_/";

if (preg_match($pattern, $fileName))
    echo $fileName . " er allerede et thumbnail.";
else
    echo $fileName . " er ikke et thumbnail.";
?>
Avatar billede nielle Nybegynder
06. juni 2005 - 22:39 #2
Hvis du er sikker på at "thumb_" står helt i starten, så bør $pattern rettes til:

$pattern = "/^thumb_/";
Avatar billede hmortensen Nybegynder
06. juni 2005 - 23:11 #3
Burde nok bruge strpos() her, da den vil være hurtigere.

if (strpos($streng, "thumb_") !== false)
{
  //Har thumb_
} else {
  //Har ikke
}
Avatar billede nielle Nybegynder
06. juni 2005 - 23:16 #4
Mon vi virkelig snakker om mange-mange tusinde filer her? Hastighed er næppe et issue.
Avatar billede ezzer Nybegynder
07. juni 2005 - 06:33 #5
hehe der er aldrig mere end en 80 filer max... og de thumbs den laver fylder ikk mer end 5 - 7 kb.. så det ikk det vilde.. men tak for svarene, må desværre på arbejde nu.. men tjekker det lige når jeg kommer hjem ;) ha en god dag
Avatar billede Slettet bruger
07. juni 2005 - 09:11 #6
Hvis ezzer kommer med dette spørgsmål, tyder det på at han måske ikke er så vant til at programmere php (no offence). Og derfor er måske ikke så godt hvis han skal til at skrive reg exp's.

- Jeg vil mene at strstr er det rigtige i dette tilfælde

if(strstr($pattern, $fil))
  {
  // Er thumb
  }
else
  {
  // Er ikke thumb
  }
Avatar billede hmortensen Nybegynder
07. juni 2005 - 09:15 #7
Fra php.net/strstr
Note: If you only want to determine if a particular needle occurs within haystack, use the faster and less memory intensive function strpos() instead.
Avatar billede ezzer Nybegynder
07. juni 2005 - 16:17 #8
hmm.. kan slet ikk få det til at virke... har prøvet alle jeres forslag, men i kan lige se min kode..

while($vis_til < $antal_filer) {
if($antal_filer > $vis_til) {
$i = $files[$vis_til];
       
    // lav thumbs
        //filnavnet på det billede der gemmes, i den nye størrelse
        $filnavn = $fest_mappe . $i;
        $nyt_filnavn = $fest_mappe . "thumb_" . $i;
       
       
        $pattern = "/thumb_/";

        if (preg_match($pattern, $i)) {
        }
        else {
        echo $filnavn ." - ". $nyt_filnavn . "<br>";   
              //Find højde og bredde på billede
                $size = getimagesize($filnavn);
                $width = $size[0];
                $height = $size[1];
           
                if($height > $maxhojde){
                  $newheight = $height / ( $height / $maxhojde);
                  $newwidth = $width / ( $height / $maxhojde);
                }
                if($newwidth > $maxbrede){
                  $newheight = $newheight / ( $newwidth / $maxhojde);
                  $newwidth = $newwidth / ( $newwidth / $maxhojde);
                }
           
                //lav et nyt billede
                $image = imagecreatetruecolor($newwidth, $newheight);
           
                $white = ImageColorAllocate($image,255,0,255);
                ImageFilledRectangle($image,0,0,$newwidth,$newheight,$white);
           
                //åben det originale billede
                $src = imagecreatefromjpeg($filnavn);
           
                //gem billede
                imagecopyresampled($image, $src, 0,0,0,0, $newwidth, $newheight, $width, $height);
                ImageJPEG($image, $nyt_filnavn, 100);
                ImageDestroy($image);
                //CHMOD: chmod($nyt_filnavn, 0777);
               
                // FLEX filerne i db!!!
                $res = mysql_query("INSERT INTO fest_billeder (fest_id,navn)". "VALUES ('$fest_id', '$i')");
        }
   
    // klargør script til at starte forfra
    $vis_til++;
}
}
Avatar billede nielle Nybegynder
07. juni 2005 - 18:25 #9
Jeg har lavet nogle mindre rettelser til din kode, men ellers ser den rimelig sund ud:

$vis_til = 0;
while ($vis_til < $antal_filer)
{
    $i = $files[$vis_til];

    // Lav thumbs
    // filnavnet på det billede der gemmes, i den nye størrelse
    $filnavn = $fest_mappe . $i;
    $nyt_filnavn = $fest_mappe . "thumb_" . $i;
       
        $pattern = "/thumb_/";

        if (!preg_match($pattern, $i))
    {
        echo $filnavn . " - " . $nyt_filnavn . "<br>";

        // Find højde og bredde på billede
        $size = getimagesize($filnavn);
        $width = $size[0];
        $height = $size[1];

        $newheight = $height;
        $newwidth = $width;

        // HVOR bliver $maxhojde og $maxbrede sat til noget?????

        if ($height > $maxhojde)
        {
            $newheight = $height / ($height / $maxhojde);
            $newwidth = $width / ($height / $maxhojde);
        }

        if ($newwidth > $maxbrede)
        {
            $newheight = $newheight / ($newwidth / $maxbrede);
            $newwidth = $newwidth / ($newwidth / $maxbrede);
        }

        // Lav et nyt billede
        $image = imagecreatetruecolor($newwidth, $newheight);

        $white = ImageColorAllocate($image, 255, 0, 255);
        ImageFilledRectangle($image, 0, 0, $newwidth, $newheight, $white);
           
        // Åben det originale billede
        $src = imagecreatefromjpeg($filnavn);

        // Gem billede
        imagecopyresampled($image, $src, 0,0,0,0, $newwidth, $newheight, $width, $height);
        ImageJPEG($image, $nyt_filnavn, 100);
        ImageDestroy($image);
        // CHMOD: chmod($nyt_filnavn, 0777);
               
        // FLEX filerne i db!!!
        $res = mysql_query("INSERT INTO fest_billeder (fest_id, navn)". "VALUES ('$fest_id', '$i')");
    }

    // Klargør script til at starte forfra
    $vis_til++;
}

- PÅNÆR: Hvor bliver dine variable $maxhojde og $maxbrede sat til noget? Hvis de ikke bliver sat, er de 0 og det giver dig en fatal division-med-0 fejl.
Avatar billede ezzer Nybegynder
07. juni 2005 - 19:27 #10
hehe jah er de :) lidt længere oppe.. tænke der ikke var nogen grund til at definere dem mer end een gang.. :p derfor jeg holdte dem før while :)
Avatar billede ezzer Nybegynder
07. juni 2005 - 19:35 #11
wicez.. mange tak for feedback, men når jeg fx prøver at køre din kode du kan se hva jeg har lavet den som og så kan du se mit output fra browseren..

--php---
    //tjek om "thumb_" indgår i billedets navn!
    $pattern = "thumb_";
    if(strstr($pattern, $i)) {
    echo "billedet: ". $i ." er et thumb<br>";
    } else {
    echo "billedet: ". $i ." har fået et thumb nu!<br>";
    }

output fra hp:
billedet: thumb_IMG_0001.jpg har fået et thumb nu!
billedet: IMG_0001.jpg har fået et thumb nu!
billedet: IMG_0002.jpg har fået et thumb nu!
billedet: IMG_0003.jpg har fået et thumb nu!
billedet: IMG_0004.jpg har fået et thumb nu!
billedet: IMG_0005.jpg har fået et thumb nu!
billedet: IMG_0006.jpg har fået et thumb nu!
billedet: thumb_IMG_0002.jpg har fået et thumb nu!
billedet: thumb_IMG_0003.jpg har fået et thumb nu!
billedet: thumb_IMG_0004.jpg har fået et thumb nu!
billedet: thumb_IMG_0005.jpg har fået et thumb nu!
billedet: thumb_IMG_0006.jpg har fået et thumb nu!

altså.. den skriver jo det samme til dem allesammen, ser ikke forskel på thumb og sådan
Avatar billede ezzer Nybegynder
07. juni 2005 - 19:56 #12
hmortensen > har rodet med dit og har endelig fået det til at virke ;) smid et svar så får du dine points :P tak til jer allesammen for den gode respons =)
Avatar billede nielle Nybegynder
07. juni 2005 - 19:58 #13
De to argumenter i strstr skal da i hvert fald byttes om:

if (strstr($i, $pattern))
{
    echo "billedet: ". $i ." er et thumb<br>";
}
else
{
    echo "billedet: ". $i ." har fået et thumb nu!<br>";
}
Avatar billede hmortensen Nybegynder
22. juni 2005 - 21:46 #14
Det var så lidt.
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