Avatar billede doomstone-dk- Nybegynder
19. februar 2005 - 19:40 Der er 8 kommentarer og
1 løsning

ereg hjælpe

Jeg har lavet denne funktion
ereg("^([^[:space:]]+)[^=]*=[^\']*\'([^\']+)\'.*$", trim($line), $regs)

$line = "preload        = 'return "1";'"

Hvordan kan det være at jeg ikke får "return "1";" ud i min $regs[2]???
Avatar billede erikjacobsen Ekspert
19. februar 2005 - 19:47 #1
Det er nu det jeg får når jeg tester:

<?
$line = "preload        = 'return \"1\";'";
ereg("^([^[:space:]]+)[^=]*=[^\']*\'([^\']+)\'.*$", trim($line), $regs);
print $regs[2];
?>
Avatar billede jakoba Nybegynder
19. februar 2005 - 19:52 #2
Din streng er ihvertfald ulovlig du har "-tegn inden i en streng omkranset af "-tegn:
  $line = "preload        = 'return \"1\";'";

mvh JakobA

PS: PHP burde give dig en stor fed fejlmelding på sådan en fejl. Hvis du ikke får
  en så vær rar at slå error-reporting til. At have dem slået fra er svarer til at
  feje skidtet ind under gulvtæppet.
Avatar billede doomstone-dk- Nybegynder
19. februar 2005 - 20:10 #3
Den bliver ikke helt loadet på den måde!
Her er hele min funktion!

function install_module($file){
  global $preload;
  $return = "1";
  $preload = "";
 
  if (!file_exists($file)) {
    print("cout not open the install file '$file'");
    exit(1);
  }

  $i = 0;

  $file_array = file($file);
  foreach ($file_array as $line) {
   
    $i++;

    if ($line[0] == ";") {
   
      /* ignore comments */

    } elseif (ereg("^\[([^]]+)\].*$", trim($line), $regs)) {

      $category = strtolower($regs[1]);
   
    } elseif (ereg("^([^[:space:]]+)[^=]*=[^\"]*\"([^\"]+)\".*$", trim($line), $regs)) {
   
      switch($category) {

      case "dir":
    if (strtolower($regs[1]) == "mkdir") {
      //mkdir($regs[2]);
    } else {
      print("setup error 'dir' sketion at line $i");
      exit(1);
    }
    break;

      case "menu":
    if (strtolower($regs[1]) == "addmenu") {
      $add_menu[] = $regs[2];
    } else {
      print("setup error 'dir' sketion at line $i");
      exit(1);
    }
    break;

          case "admin":
    if (strtolower($regs[1]) == "addmenu") {
      $add_amenu[] = $regs[2];
    } else {
      print("setup error 'dir' sketion at line $i");
      exit(1);
    }
    break;

      } // end switch

    } elseif (ereg("^([^[:space:]]+)[^=]*=[^\']*\'([^\']+)\'.*$", trim($line), $regs)) {
        switch($category) {
       
              case "preload":
                if (strtolower($regs[1]) == "preload") {
                    $preload .= $regs[2]."\n";
                } else {
                    print("setup error 'dir' sketion at line $i");
                    exit(1);
                }
    break;
        }
    }// end if

  } // end foreach

  echo $preload;
}

så jeg loader den ved install_module("../modules/user/install.ini");

user/install.ini ser sådan her ud
; making folder
[dir]
mkdir        = "users"

; adding items to the menu
[menu]
addmenu        = "[ifnotlogin]Register|user/register.php"
addmenu        = "[ifnotlogin]Log In|user/login.php"
addmenu        = "[iflogin]Register|user/login.php["
addmenu        = "[iflogin]Profile|user/profile.php"

; adding items to the admin menu
[admin]
addmenu    = "[spacer]USERS"
addmenu    = "Edit users|user.admin.php"

; add to preload
[preload]
preload        = '<?PHP'
preload        = '// User module preload stuff'
preload        = 'function is_login(){'
preload        = '    return "1";'
preload        = '}'
preload        = '?>'
Avatar billede doomstone-dk- Nybegynder
20. februar 2005 - 15:22 #4
Det er denne del af koden er der noget galt med!
elseif (ereg("^([^[:space:]]+)[^=]*=[^\']*\'([^\']+)\'.*$", trim($line), $regs)) {
        switch($category) {
     
              case "preload":
                if (strtolower($regs[1]) == "preload") {
                    $preload .= $regs[2]."\n";
                } else {
                    print("setup error 'dir' sketion at line $i");
                    exit(1);
                }
    break;
        }
    }// end if

og den skal kunne loade dette
[preload]
preload        = '<?PHP'
preload        = '// User module preload stuff'
preload        = 'function is_login(){'
preload        = '    return "1";'
preload        = '}'
preload        = '?>'
Avatar billede erikjacobsen Ekspert
20. februar 2005 - 16:12 #5
Og du har ikke selv fundet ud af hvor ca. problemet er vha testudskrifter?
Nå, men din linie

    } elseif (ereg("^([^[:space:]]+)[^=]*=[^\"]*\"([^\"]+)\".*$", trim($line), $regs)) {

udelukker jo linier, der indeholder "
Prøv at lave den li'som den der virker.
Avatar billede doomstone-dk- Nybegynder
20. februar 2005 - 16:36 #6
Jeg ved ikke rigtig hvordan ereg virker! det en ven som har lavet ereg("^([^[:space:]]+)[^=]*=[^\"]*\"([^\"]+)\".*$", trim($line), $regs) til mig!
men så opdagede jeg at når jeg havede en streng som indeholdte et " at den stoppede ved det andet ", derfor lavede jeg ereg("^([^[:space:]]+)[^=]*=[^\']*\'([^\']+)\'.*$", trim($line), $regs) i håb om at den så skulle virke på en streng som have mellem 2 ' og så at det godt kunne være " inden i den! men det virkede ikke helt :(
Avatar billede erikjacobsen Ekspert
20. februar 2005 - 17:31 #7
Ok - det er ikke dig der har lavet det. Det gør det jo ikke så nemt.
Det kan gøres noget simplere - lad mig se om jeg får tid til det en gang.
Avatar billede doomstone-dk- Nybegynder
24. februar 2005 - 07:41 #8
Jeg har lavet mit script om så det køre med xml filer istedet, og det virker lig som jeg vil have det :)
Ellers tak
Avatar billede erikjacobsen Ekspert
24. februar 2005 - 10:02 #9
Det lyder som en rigtig god idé!
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