Avatar billede venchil Nybegynder
05. februar 2006 - 17:54 Der er 18 kommentarer og
1 løsning

Load side med fopen & fread og kør preg_match på den

Jeg har følgende kode, i min PHP-fil:

    $dest = "style.css";
    $handle = fopen($dest, "r");
    $filecontent = fread($handle, filesize($dest));

    $str = str_replace("\n", "", $filecontent);
    preg_match("/(.*)\{(.*)\}/i", $str, $variabel);

    echo "<pre>";
    print_r($variabel);
    echo "</pre>";

Og style.css indeholder:

    .list_heading {
        width: 100%;
        font-weight: bold;
    }

    .list {
        width: 100%;
    }

Effekten skulle gerne være, at style.css kommer ind i variablen $filecontent, og derefter bliver bearbejdet med     preg_match("/(.*)\{(.*)\}/i", $str, $variabel);

Men det virker ikke.... Output bliver:

Array
(
    [0] => .list_heading {    width: 100%;    font-weight: bold;}.list {    width: 100%;}
    [1] => .list_heading {    width: 100%;    font-weight: bold;}.list
    [2] =>     width: 100%;
)

Og det er ikke det resultat jeg gerne vil have. Resultatet skulle nogenlunde se sådan ud:

Array
(
    [0] => .list_heading
    [1] => width: 100%;font-weight: bold;
    [2] => .list
    [3] => width: 100%;
)

Er der nogen eksperter herinde, som kan hjælpe mig? :D
Avatar billede jakobdo Ekspert
05. februar 2006 - 19:16 #1
Istedet for din måde at læse en side på, hvorfor bruger du så ikke file_get_content() ?
Avatar billede jakobdo Ekspert
05. februar 2006 - 19:23 #2
Prøv at test:
$file = "style.css";
$content = file_get_content($file);
if(preg_match_all('/(\\..+?})/s', $content,$matches))
{
  echo "<pre>";
  print_r($matches);
  echo "</pre>";
}
Avatar billede venchil Nybegynder
06. februar 2006 - 16:06 #3
<?php

$file = "style.css";
$content = file_get_content($file);
if(preg_match_all('/(\\..+?})/s', $content,$matches))
{
  echo "<pre>";
  print_r($matches);
  echo "</pre>";
}

?>

Giver tom side :(... Er der noget jeg har overset?
Avatar billede jakobdo Ekspert
06. februar 2006 - 16:32 #4
Prøv at print $content og se om det i det hele taget indeholder noget?
Avatar billede venchil Nybegynder
06. februar 2006 - 16:36 #5
Det gør den ikke... Men den ligger i samme lib som style.css...
Avatar billede jakobdo Ekspert
06. februar 2006 - 16:58 #6
Der mangler et S på file_get_contents
Avatar billede venchil Nybegynder
06. februar 2006 - 18:18 #7
Så... Nu blev det hele bedre... Men det returnerer:

Array
(
    [0] => Array
        (
            [0] => .list_heading {
    width: 100%;
    font-weight: bold;
}
            [1] => .list {
    width: 100%;
}
        )

    [1] => Array
        (
            [0] => .list_heading {
    width: 100%;
    font-weight: bold;
}
            [1] => .list {
    width: 100%;
}
        )

)

Men det hele gentages to gange, og med forkert "opsætning" :(
Avatar billede jakobdo Ekspert
06. februar 2006 - 18:43 #8
Nope, du skal nemlig bruge: $matches[1][0] og $matches[1][1]

Hvad mener du med forkert opsætning?
Avatar billede venchil Nybegynder
06. februar 2006 - 19:00 #9
[0] => .list_heading {
      width: 100%;
      font-weight: bold;

Det skulle jo være

[0] => .list_heading {
[1] => width: 100%;font-weight: bold;
Avatar billede jakobdo Ekspert
06. februar 2006 - 19:02 #10
Prøv at ret: '/(\\..+?})/s'
til: '/(\\..+?{)(.+)?}/s'
Altså i preg_match_all();
Avatar billede venchil Nybegynder
06. februar 2006 - 19:28 #11
Array
(
    [0] => Array
        (
            [0] => .list_heading {
    width: 100%;
    font-weight: bold;
}

.list {
    width: 100%;
}
        )

    [1] => Array
        (
            [0] => .list_heading {
        )

    [2] => Array
        (
            [0] =>
    width: 100%;
    font-weight: bold;
}

.list {
    width: 100%;

        )

)

Hva gir det???
Avatar billede jakobdo Ekspert
06. februar 2006 - 20:53 #12
Prøv at se koden her: http://www.codebreaker.dk/exp/685539.php
Du skal bare bruge: $matches[1][0] og [2][0] til den første!
og $matches[1][1] og [2][1] til den nummer 2!
Osv...
Avatar billede venchil Nybegynder
08. februar 2006 - 15:02 #13
OK!

Til sidst kan jeg ikke helt forstå hvorfor:

<?php

$file = "style.css";
$content = file_get_contents($file);
preg_match_all('/(\\..+?{)(.+)?}/s', $content,$matches)

    echo $matches[1][0];
    echo "<hr>";
    echo $matches[2][0];

?>

Ikke virker... Håber selvfølgelig du kan spotte problemet, men under alle omstændigheder må du meget gerne lægge et svar.
Avatar billede jakobdo Ekspert
08. februar 2006 - 15:14 #14
Prøv lige at forklar helt præcist hvad du ønsker som resultat, så skal jeg prøve igen.
Avatar billede venchil Nybegynder
08. februar 2006 - 15:27 #15
Jeg tror ikke det er selve kodens struktur der er noget galt med, der er bare en fejl, for jeg får tom side når jeg tester ovenstående kode.
Avatar billede jakobdo Ekspert
08. februar 2006 - 15:57 #16
Prøv her:

<?php

$file = "style.css";
$content = file_get_contents($file);
preg_match_all('/(\\..+?{)(.+?)}/s', $content,$matches);

echo $matches[1][0];
echo "<hr>";
echo $matches[2][0];

?>
Avatar billede venchil Nybegynder
08. februar 2006 - 16:02 #17
Så virker det :)... Mange tak... Du må gerne lægge et svar :)
Avatar billede jakobdo Ekspert
08. februar 2006 - 16:06 #18
Svar!
Avatar billede jakobdo Ekspert
08. februar 2006 - 18:37 #19
Takker for point!
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