Avatar billede noob2003 Nybegynder
23. april 2006 - 13:50 Der er 18 kommentarer og
1 løsning

rette tekst i fil til dns record

hvordan kan jeg i en fil

jeg skal ha den til følgende
hvor jeg sender filnavn input til eks. ret.php?filnavn=domain.dk.dns

ret.php skal indholde følgende.

filnavn c:\dir\dir\$filnavn
den skal rette
MX    10 mail

til
MX    10 mail
TXT    "v=spf1 a mx ptr ~all"

kan ikke bare indsætte (TXT    "v=spf1 a mx ptr ~all") i bunden af filen da dns server ikke kan læse det.
Avatar billede duejensen Nybegynder
23. april 2006 - 14:24 #1
Øh, ikke forstået.

Du siger du skal rette
MX    10 mail

til
MX    10 mail
TXT    "v=spf1 a mx ptr ~all"

men ikke bare indsætte TXT    "v=spf1 a mx ptr ~all" i bunden af filen.

Der er vist noget der ikke hænger sammen ?
Avatar billede noob2003 Nybegynder
23. april 2006 - 14:34 #2
jeps den vil ikke læse det når det står i bunden af filen.
Desværre for så var det ikke noget problem, så det skal stå lige under
MX    10 mail
Avatar billede duejensen Nybegynder
23. april 2006 - 14:38 #3
Er det spørgsmålet om at indsætte linieskift de rigtige steder ?
Avatar billede duejensen Nybegynder
23. april 2006 - 14:46 #4
Ups, nu forstår jeg.
Den originale fil indeholder mere end blot
MX    10 mail

der kan være andre linier før, og andre linier efter.
Min fejl, det burde jeg have gættet fra starten
Avatar billede noob2003 Nybegynder
23. april 2006 - 14:57 #5
jeps det er en orginal dns fil der skal indsættes i
Avatar billede duejensen Nybegynder
23. april 2006 - 14:57 #6
Løsningsforslag:

<?php

  $linie1="MX    10 mail";
  $linie2="TXT    \"v=spf1 a mx ptr ~all\"";


  $fh_org = fopen ($filnavn,"r");
  $fh_new = fopen ($filnavn . "_NEW","w");

  if ($fh_org) {
  while (!feof($fh_org)) {
      $linie = fgets($fh_org, 4096);
      fwrite($fh_new,$linie);
      // Did we find linie1 ?
      if (strcmp($linie,$linie1) {
          fwrite($fh_new,$linie2 . "\n");
      }
  }
  fclose($fh_new);
  fclose($fh_org);
  unlink($filnavn);
  rename($filnavn . "_NEW",$filnavn);
  }
?>

NB: Koden er ikke fejlsikret
Avatar billede noob2003 Nybegynder
23. april 2006 - 18:40 #7
kikker på det i aften/nat
Avatar billede noob2003 Nybegynder
26. april 2006 - 08:57 #8
Parse error: syntax error, unexpected '{' in opretspf.php on line 15
Avatar billede duejensen Nybegynder
26. april 2006 - 09:01 #9
Ja, der mangler en slutparantes i linien

  if (strcmp($linie,$linie1) {

-
Der skal stå :

  if (strcmp($linie,$linie1)) {
Avatar billede noob2003 Nybegynder
26. april 2006 - 09:16 #10
det var ikke et heldig resultat.

TXT    "v=spf1 a mx ptr ~all"
@        IN SOA    ns1.domain.dk. hostmaster.domain.dk. (
TXT    "v=spf1 a mx ptr ~all"
                2006041801    ; Serial number
TXT    "v=spf1 a mx ptr ~all"
                3600          ; Refresh
TXT    "v=spf1 a mx ptr ~all"
                600          ; Retry
TXT    "v=spf1 a mx ptr ~all"
                86400        ; Expire
TXT    "v=spf1 a mx ptr ~all"
                3600        )  ; Minimum TTL
TXT    "v=spf1 a mx ptr ~all"
        NS    ns1.frb-internet.dk.
TXT    "v=spf1 a mx ptr ~all"
        NS    ns2.frb-internet.dk.
TXT    "v=spf1 a mx ptr ~all"
        A    10.0.0.2
TXT    "v=spf1 a mx ptr ~all"
        MX    10 mail
TXT    "v=spf1 a mx ptr ~all"
        ftp        CNAME    2006.dk.
TXT    "v=spf1 a mx ptr ~all"
mail.2006.dk.        A    10.0.0.3
TXT    "v=spf1 a mx ptr ~all"
www        CNAME    2006.dk.
TXT    "v=spf1 a mx ptr ~all"
TXT    "v=spf1 a mx ptr ~all"
Avatar billede duejensen Nybegynder
26. april 2006 - 09:26 #11
Ja, jeg sagde jo at koden ikke var fejlsikret -

Skurken er samme linie - der manglede ikke bare en parantes, men også en !


Prøv med

  if (!strcmp($linie,$linie1)) {
Avatar billede noob2003 Nybegynder
26. april 2006 - 09:52 #12
den fil jeg testede på så sådan her ud

;$; Updated with Simple DNS Plus record editor 14 Apr 2006 11:55:24
; Zone created with Simple DNS Webadmin Zone Wizard at 2006-04-13 15:24:23

@        IN SOA    ns1.domain. hostmaster.domain.dk. (
                2006041401    ; Serial number
                3600          ; Refresh
                600          ; Retry
                86400        ; Expire
                3600        ) ; Minimum TTL
        NS    ns1.domain.dk.
        NS    ns2.domain.dk.
        A    10.0.0.2
        MX    10 mail
        FTP    CNAME 2006.dk.
mail        A    10.0.0.3
www        CNAME    @

og når jeg kør det script "med den ændring" kommer den til at se sådan ud

;$; Updated with Simple DNS Plus record editor 14 Apr 2006 11:55:24
TXT    "v=spf1 a mx ptr ~all"
; Zone created with Simple DNS Webadmin Zone Wizard at 2006-04-13 15:24:23

TXT    "v=spf1 a mx ptr ~all"
@        IN SOA    ns1.domain.dk. hostmaster.domain.dk. (
TXT    "v=spf1 a mx ptr ~all"
                2006041401    ; Serial number
TXT    "v=spf1 a mx ptr ~all"
                3600          ; Refresh
TXT    "v=spf1 a mx ptr ~all"
                600          ; Retry
TXT    "v=spf1 a mx ptr ~all"
                86400        ; Expire
TXT    "v=spf1 a mx ptr ~all"
                3600        ) ; Minimum TTL
TXT    "v=spf1 a mx ptr ~all"
        NS    ns1.domain.dk.
TXT    "v=spf1 a mx ptr ~all"
        NS    ns2.domain.dk.
TXT    "v=spf1 a mx ptr ~all"
        A    10.0.0.2
TXT    "v=spf1 a mx ptr ~all"
        MX    10 mail
TXT    "v=spf1 a mx ptr ~all"
        FTP    CNAME 2006.dk.
TXT    "v=spf1 a mx ptr ~all"
mail        A    10.0.0.3
TXT    "v=spf1 a mx ptr ~all"
www        CNAME    @
TXT    "v=spf1 a mx ptr ~all"
TXT    "v=spf1 a mx ptr ~all"
Avatar billede duejensen Nybegynder
26. april 2006 - 16:14 #13
Skal lige være helt sikker.

Fik du den anden ændring med ?
Avatar billede duejensen Nybegynder
26. april 2006 - 17:46 #14
Det gjorde du nok ikke, og desuden skal der også tages hensyn til white space forrest/bagest på linierne.

Det klarer vi ved at rette endnu engang i samme linie:

Linien med strcmp skal se således ud:

if (!strcmp(rtrim(ltrim($linie)),$linie1)) {
Avatar billede noob2003 Nybegynder
26. april 2006 - 20:30 #15
nu sker der ikke noget
Avatar billede duejensen Nybegynder
29. april 2006 - 07:11 #16
Ja, det er jo nok fordi der ikke i din fil står
MX    10 mail
dvs: MX<space><space><space><space>10<space>mail

det kunne jo være, der i stedet stod
MX<tab>10<tab>mail

Så for at gøre den helt skudsikker, kan du prøve at udskifte linien med strcmp med:

if (preg_match("/^\s*(?i:MX)\s+10\s+(?i:mail)\s*$/",$linie)>0) {

Så bør det virke - uanset hvor mange spaces/tabs etc der står mellem ordene.
Avatar billede noob2003 Nybegynder
30. april 2006 - 16:58 #17
Smid et svar ;)
Avatar billede duejensen Nybegynder
30. april 2006 - 20:27 #18
Gætter på at det virker nu
Avatar billede noob2003 Nybegynder
30. april 2006 - 22:35 #19
Jeps
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