Avatar billede uthsen Nybegynder
05. juni 2009 - 09:02 Der er 36 kommentarer og
1 løsning

automatisk sætte en fil til chmod 777

Findes der en kodestump eller andet som kan ændre en en fil til chmod 777 når den åbnes?

Jeg kunne godt tænke mig at blive fri for at jeg selv skal forbi FTP og ændre rettighederne for diverse filer. Derfor kunne det være smart at filen selv ændrede rettigheder idet den åbnes på serveren.

Er i tvivl om om det overhovedet kan lade sig gøre????
Avatar billede repox Seniormester
05. juni 2009 - 09:20 #1
På Linux baserede systemer er det kun ejeren af filen der kan ændre rettighederne på filen (eller root bruger); det var en simplificeret forklaring.

Det vil sige at PHP i princippet kun kan ændre rettigheder på de filer den selv har oprettet f.eks. via chmod() funktionen < http://php.net/chmod >

Alternativt kan du lave en funktion/objekt der laver en FTP forbindelse for dig, hver gang du tilgår en fil som så ændrer rettighederne for dig. < http://php.net/ftp >
Avatar billede acore Ekspert
05. juni 2009 - 09:56 #2
Og lidt mere konkret...

Denne kode sætter chmod til 777 for alle filer (ikke directories) i det directory, hvor filen ligger og derunder, hvis altså du har rettighederne:

$dir = '.';
$perm = 0777;
 
chmodall($dir);

function chmodall($dir)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename);
        }
        else
        {
          chmod($filename , $perm);
        }
      }
    }
  }
  closedir($dh);
}

PS. Den er ikke testet i denne form
Avatar billede uthsen Nybegynder
05. juni 2009 - 10:56 #3
acore

Vil det sige jeg skal sætte denne kodestump ind i hver af de filer som ligger i et bibliotek og som brugeren åbner for at tilføje info of så ændre dette automatisk alle filer i dette bibliotet til chmod 777?

Prøver lige...

repox  jeg ser på dit link senere :O)

KH Helle
Avatar billede uthsen Nybegynder
05. juni 2009 - 11:02 #4
eller selvfølgelig kun i en enkelt fil i biblioteket
Avatar billede acore Ekspert
05. juni 2009 - 11:08 #5
Læg koden ind i én fil. Kør filen, og alle filer sættes til chmod 777.

Jeg ved godt at det ikke var hvad du spurgte om, og at jeg ikke fik det forklaret, men jeg synes bare at det her er lettere.
Avatar billede uthsen Nybegynder
05. juni 2009 - 11:17 #6
Jeg får fejl:
Parse error: syntax error, unexpected T_VARIABLE

efter at have sat dette ind.

<? php
$dir = '.';
$perm = 0777;
 
chmodall($dir);

function chmodall($dir)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename);
        }
        else
        {
          chmod($filename , $perm);
        }
      }
    }
  }
  closedir($dh);
}
?>

KH Helle
Avatar billede uthsen Nybegynder
05. juni 2009 - 11:22 #7
Jeg vil rigtig gerne anvende koden, men det ser ud til der er noget galt i linie 47 iflg browseren- og linie 47 er: $perm = 0777;

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 12:08 #8
Min fejl:

<?php
$dir = '.';
$perm = 0777;
 
chmodall($dir, $perm);

function chmodall($dir, $perm)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          chmod($filename, $perm);
        }
      }
    }
  }
  closedir($dh);
}
?>
Avatar billede uthsen Nybegynder
05. juni 2009 - 12:38 #9
ØV- altså!!

Bibliotekets filer hvori filen med din kode ligger,kan nu køres, men desværre har de alle rettigheden:
-rw-r--r--

og ikke som ønsket:
-rwxrwxrwx

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 13:29 #10
Det virker her. Er du sikker på at listen er "refreshed" efter kørsel?
Avatar billede uthsen Nybegynder
05. juni 2009 - 13:33 #11
Ja, det synes jeg, men prøver lige igen :O)
Avatar billede uthsen Nybegynder
05. juni 2009 - 13:51 #12
Nu har jeg prøvet næsten alt og det virker desværre ikke her :(((

Er du sikker på at koden du anvender er nøjagtig den samme som jeg har sat ind??

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 15:13 #13
Nej, det er jeg af gode grunde ikke sikker på (eftersom du ikke har posted den). Men jeg er sikker på, at koden i #8 virker på one.com.

Prøv evt at ændre linien

chmod($filename , $perm);

til

echo($filename.": ".chmod($filename , $perm)? "OK": "FEJL"."<br />");

Den skulle gerne fortælle hvilke filer, der forsøges ændret og med hvilket resultat.
Avatar billede uthsen Nybegynder
05. juni 2009 - 15:37 #14
Så står der OK på min skærm og alle filer i dette bibliotek hvor:
http://www.dkk-hvalpe.dk/a/chihuahua/hvalpe/page0001/helle.php

ligger har stadig rettighederne :
-rw-r--r--

og ikke:
-rwxrwxrwx

drt eneste der står i helle.php er din kode.

KH Helle
Avatar billede uthsen Nybegynder
05. juni 2009 - 15:43 #15
det der står i helle.php er:

<?php
$dir = '.';
$perm = 0777;
 
echo($filename.": ".chmod($filename , $perm)? "OK": "FEJL"."<br />");

function chmodall($dir, $perm)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          chmod($filename, $perm);
        }
      }
    }
  }
  closedir($dh);
}
?>

***************
og i helle1.php
http://www.dkk-hvalpe.dk/a/chihuahua/hvalpe/page0001/helle1.php

<?php
$dir = '.';
$perm = 0777;

chmod($filename , $perm);
 
echo($filename.": ".chmod($filename , $perm)? "OK": "FEJL"."<br />");

function chmodall($dir, $perm)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          chmod($filename, $perm);
        }
      }
    }
  }
  closedir($dh);
}
?>

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 16:10 #16
Jeg tror du har fået ændret den forkerte linie. Det var chmod og ikke chmodall der skulle ændres.
Avatar billede uthsen Nybegynder
05. juni 2009 - 17:04 #17
Det har jeg også - Sorry
Nu ser helle5.php således ud:
<?php
$dir = '.';
$perm = 0777;
 
chmodall($dir, $perm);

function chmodall($dir, $perm)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          echo($filename.": ".chmod($filename , $perm)? "OK": "FEJL"."<br />");


        }
      }
    }
  }
  closedir($dh);
}
?>
http://www.dkk-hvalpe.dk/a/chihuahua/hvalpe/page0001/helle5.php

Og resultatet er :OKOKOKOKOKOKOKOK......

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 17:52 #18
Jeg har lige prøvet det, og det virker hos mig - har prøvet på 3 hosts (one, domaindirect, servage. Prøv at rette linien med udskrift til:

echo($filename.": ".(chmod($filename , $perm)? "OK": "FEJL")."<br />");

Det skulle udskrive fil-navnene samt resultatet. Hvilken host bruger du?
Avatar billede uthsen Nybegynder
05. juni 2009 - 18:22 #19
Det prøver jeg lige :O)))
Avatar billede uthsen Nybegynder
05. juni 2009 - 18:24 #20
Se Så skede der noget - desværre at de ikke ændre rettigheder :
./banner.php: FEJL
./bannera.php: FEJL
./banner_upload/count.txt: FEJL
./breedertekst.php: FEJL
./counter.txt: FEJL
./breeder_navn.php: FEJL
./css/stylesheet.css: FEJL
./ekstratekst.php: FEJL
./ekstra_navn.php: FEJL
./emailtekst.php: FEJL
./email_navn.php: FEJL
./far.php: FEJL
./fara.php: FEJL
./farstekst.php: FEJL
./fars_navn.php: FEJL
./far_upload/count.txt: FEJL
./hometekst.php: FEJL
./home_navn.php: FEJL
./hvalp1.php: FEJL
./hvalp10.php: FEJL
./hvalp10a.php: FEJL
./hvalp10tekst.php: FEJL
./hvalp10_navn.php: FEJL
./hvalp10_upload/count.txt: FEJL
./hvalp11.php: FEJL
./hvalp11a.php: FEJL
./hvalp11tekst.php: FEJL
./hvalp11_navn.php: FEJL
./hvalp11_upload/count.txt: FEJL
./hvalp12a.php: FEJL
./hvalp12.php: FEJL
./hvalp12tekst.php: FEJL
./hvalp12_navn.php: FEJL
./hvalp12_upload/count.txt: FEJL
./hvalp1a.php: FEJL
./hvalp1tekst.php: FEJL
./hvalp1_navn.php: FEJL
./hvalp1_upload/count.txt: FEJL
./hvalp2.php: FEJL
./hvalp2a.php: FEJL
./hvalp2tekst.php: FEJL
./hvalp2_navn.php: FEJL
./hvalp2_upload/count.txt: FEJL
./hvalp3.php: FEJL
./hvalp3a.php: FEJL
./hvalp3tekst.php: FEJL
./hvalp3_navn.php: FEJL
./hvalp3_upload/count.txt: FEJL
./hvalp4.php: FEJL
./hvalp4a.php: FEJL
./hvalp4tekst.php: FEJL
./hvalp4_navn.php: FEJL
./hvalp4_upload/count.txt: FEJL
./hvalp5.php: FEJL
./hvalp5a.php: FEJL
./hvalp5tekst.php: FEJL
./hvalp5_navn.php: FEJL
./hvalp5_upload/count.txt: FEJL
./hvalp6.php: FEJL
./hvalp6a.php: FEJL
./hvalp6tekst.php: FEJL
./hvalp6_navn.php: FEJL
./hvalp6_upload/count.txt: FEJL
./hvalp7.php: FEJL
./hvalp7a.php: FEJL
./hvalp7tekst.php: FEJL
./hvalp7_navn.php: FEJL
./hvalp8.php: FEJL
./hvalp8a.php: FEJL
./hvalp7_upload/count.txt: FEJL
./hvalp8tekst.php: FEJL
./hvalp8_upload/count.txt: FEJL
./hvalp8_navn.php: FEJL
./hvalp9.php: FEJL
./hvalp9a.php: FEJL
./hvalp9tekst.php: FEJL
./hvalp9_navn.php: FEJL
./hvalpesiden.php: FEJL
./hvalp9_upload/count.txt: FEJL
./kenneltekst.php: FEJL
./kennel_navn.php: FEJL
./hvalpesiden2.php: FEJL
./linket.php: FEJL
./mor.php: FEJL
./mora.php: FEJL
./morstekst.php: FEJL
./mors_navn.php: FEJL
./puppytekst.php: FEJL
./mor_upload/count.txt: FEJL
./puppy_born.php: FEJL
./racetekst.php: FEJL
./race_navn.php: FEJL
./slet-banner-billeder.php: FEJL
./slet-far-billeder.php: FEJL
./slet-hvalp1-billeder.php: FEJL
./slet-hvalp10-billeder.php: FEJL
./slet-hvalp11-billeder.php: FEJL
./slet-hvalp2-billeder.php: FEJL
./slet-hvalp12-billeder.php: FEJL
./slet-hvalp3-billeder.php: FEJL
./slet-hvalp4-billeder.php: FEJL
./slet-hvalp5-billeder.php: FEJL
./slet-hvalp6-billeder.php: FEJL
./slet-hvalp8-billeder.php: FEJL
./slet-hvalp9-billeder.php: FEJL
./slet-hvalp7-billeder.php: FEJL
./slet-mor-billeder.php: FEJL
./sletbannercounter.txt: FEJL
./sletfarcounter.txt: FEJL
./slethvalp11counter.txt: FEJL
./slethvalp12counter.txt: FEJL
./slethvalp2counter.txt: FEJL
./slethvalp10counter.txt: FEJL
./slethvalp1counter.txt: FEJL
./slethvalp4counter.txt: FEJL
./slethvalp5counter.txt: FEJL
./slethvalp6counter.txt: FEJL
./slethvalp7counter.txt: FEJL
./slethvalp8counter.txt: FEJL
./slethvalp9counter.txt: FEJL
./slethvalp3counter.txt: FEJL
./slettet-banner.php: FEJL
./slettet-far.php: FEJL
./slettet-hvalp1.php: FEJL
./slettet-hvalp10.php: FEJL
./sletmorcounter.txt: FEJL
./slettet-hvalp11.php: FEJL
./slettet-hvalp12.php: FEJL
./slettet-hvalp3.php: FEJL
./slettet-hvalp4.php: FEJL
./slettet-hvalp5.php: FEJL
./slettet-hvalp2.php: FEJL
./slettet-hvalp6.php: FEJL
./slettet-hvalp8.php: FEJL
./tlftekst.php: FEJL
./slettet-mor.php: FEJL
./slettet-hvalp9.php: FEJL
./tcounter.txt: FEJL
./slettet-hvalp7.php: FEJL
./tlf_navn.php: FEJL
./upload.php: FEJL
./xannonce.php: FEJL
./helle.php: FEJL
./helle1.php: FEJL
./helle2.php: FEJL
./helle3.php: FEJL
./helle5.php: FEJL
./helle6.php: FEJL
Avatar billede acore Ekspert
05. juni 2009 - 18:48 #21
Dvs du har ikke rettighederne. Hvilken host?
Avatar billede uthsen Nybegynder
05. juni 2009 - 20:29 #22
ws43.surftown.dk


Jeg kan jo godt ændre det via mit FTP-program FTPCute, men det kunne være dejligt om det var autokørende :O)))

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 20:56 #23
Mystisk, atd et ikke virker, men måske nogen har en forkalring.

Vi kan lave koden om, så det sker via PHP/ftp, hvis du stadig orker at prøve? Det burde virke.
Avatar billede uthsen Nybegynder
05. juni 2009 - 21:02 #24
Du kan stole på jeg gider at prøve, for jeg vil så gerne om det kunne lykkes :O))

KH Helle
Avatar billede uthsen Nybegynder
05. juni 2009 - 21:03 #25
Men hvad skal vi så skrive??

Jeg er meget taknemmelig over du orker at forfølge mit problem :O)))

KH Helle
Avatar billede acore Ekspert
05. juni 2009 - 23:49 #26
Det er kun fordi jeg er så stædig ;)

Nedenstående er testet hos servage og virker. Du skal sætte dit ftp brugernavn og -password ind ved de to x ??? og path regnes i forhold til hvad du har sat i din ftp-konto:

<?php
$dir = '.';
$perm = 0777;

$ftp_host = "ftp.servage.net";
$ftp_user = "???";
$ftp_pass = "???";
 
if (($conn_id = ftp_connect($ftp_host)) && ftp_login($conn_id, $ftp_user, $ftp_pass))
{
  ftp_pasv($conn_id, TRUE);
 
  chmodall($dir, $perm, $conn_id);
  ftp_close($conn_id);
}
else
{
  echo("ERROR establishing ftp connection");
}

function chmodall($dir, $perm, $conn_id)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          echo($filename.": ".(ftp_chmod($conn_id , $perm, $filename)? "OK": "FEJL")."<br />");
        }
      }
    }
  }
  closedir($dh);
}
?>
Avatar billede uthsen Nybegynder
06. juni 2009 - 00:23 #27
Jeg fil Fejl den hele vej ned gennem det bibliotek jeg uploadede filen til - ØV- ØV

Jeg gemte filen som php og koden så således ud:(bare for at være sikker på jeg har fulgt din vejledning korrekt)
<?php
$dir = '.';
$perm = 0777;

$ftp_host = "ws43.surftown.dk";
$ftp_user = "*****Mit FTP username***";
$ftp_pass = "*****Mit Passw til FtP****";
 
if (($conn_id = ftp_connect($ftp_host)) && ftp_login($conn_id, $ftp_user, $ftp_pass))
{
  ftp_pasv($conn_id, TRUE);
 
  chmodall($dir, $perm, $conn_id);
  ftp_close($conn_id);
}
else
{
  echo("ERROR establishing ftp connection");
}

function chmodall($dir, $perm, $conn_id)
{
  if (is_dir($dir) && ($dh = opendir($dir)))
  {
    while (($file = readdir($dh)) !== FALSE)
    {
      if ($file != "." && $file != "..")
      {
        $filename = $dir."/".$file;
        if (is_dir($filename))
        {
          chmodall($filename, $perm);
        }
        else
        {
          echo($filename.": ".(ftp_chmod($conn_id , $perm, $filename)? "OK": "FEJL")."<br />");
        }
      }
    }
  }
  closedir($dh);
}
?>
Avatar billede acore Ekspert
06. juni 2009 - 00:38 #28
Jeg føler mig overbevist om at det skal kunne virke. Jeg har aldrig været ude for ikke at kunne komme "igennem" med ftp. Surftown er endda ret velrenommerede.

Med jeg ved ikke hvad det er :( Og det irriterer mig ad h... til.

Hvis du tør kan du sende mig dine ftp oplysninger per privat besked, så jeg kan prøve selv. Men det bliver først i morgen.
Avatar billede uthsen Nybegynder
06. juni 2009 - 01:36 #29
acore jeg tør slet ikke sende dig mine ftp oplysninger, ikke fordi jeg ikke har tillid til dig, men jeg er af gammel skole og har lært at det gør man ikke :O))) - håber du ikke tager det ilde op, for jeg er klar over du rigtig gerne vil hjælpe og er meget dygtig udi programmering. Den hjælp sætter jeg utrolig megen pris på også din stædighed :O)

Jeg har prøvet lidt forskelligt bla. at køre kodestumpen via ftp://ftp.....  og
skrevet
$ftp_host = "ftp.surftown.dk"; istedet for
$ftp_host = "ws43.surftown.dk";
logger ind den vej, men uden resultat.

Det kunne være rart at få koden til at fungere, men kan vi ikke, vil jeg meget gerne give dig de 200 point for din MEGA arbejdsindsats med mit problem.

Har lige skiftet FTP-program og det er vist en succes i forhold til FTPCute, da jeg her kan få lov at ændre rettigheder for hele mapper+ undermapper med filer i et hug og det gør jo en væsentlig forskel, alligevel ville det smarteste være at en aktiveret info-indhentningsfil selv lige ændrede sig, således den kunne suge til sig :O)

Sov Godt

KH Helle
Avatar billede acore Ekspert
06. juni 2009 - 11:19 #30
Det er helt ok - jeg havde nok heller ikke gjort det, med mindre jeg kunne nøjes med at give adgang i et test-directory alene (det ved jeg ikke om man kan hos Surftown), men mange tager det ikke så tungt med den slags.

Det nye FTP-program ser jo ud til at have løst det meste af problemet.

Det, der irriterer mig, er, at jeg er næsten sikker på, at det kan løses. Når jeg er det, er det fordi de kommandoer, der bruges med ftp, er de samme, som dit ftp program bruger. Dvs. hvis ftp programmet kan chmod'de filer, skulle ftp-koden også kunne.

Jeg vil lade det ligge - vi har i hvert fald forsøgt :)

Og tak for pointene...
Avatar billede uthsen Nybegynder
06. juni 2009 - 20:23 #31
Det har du helt ret i acore og det virker også helt bagvendt at det ikke bare fungerer. Hvis du i fremtiden skulle falde over løsningen, så må di gerne tænke på mig med en mail:O))

I hvert fald, skal du have en RIGTIG STOR TAK for den store arbrjdsindsats, du har lagt i mit problem.TAK-TAK-TAK og dine point er helt velfortjent og sikkert er der rigtig mange der kan anvende de koder du har lagt!!!

KH Helle
Avatar billede webweaver Praktikant
07. juni 2009 - 19:59 #32
Nu er tråden godt nok lukket, men skal da lige siges at jeg har brugt chmod(); på Surftown, og jeg mener at det virker hos mig. Kan ikke huske det 100%, men det mener jeg nu altså.
Avatar billede uthsen Nybegynder
07. juni 2009 - 21:33 #33
Lyder mærkeligt, men så må jeg have gjort noget forkert, trods det jeg mener jeg har gjort nøjagtig som acore anviste, men har du fået det til at virke, så burde jeg vel også - eller måske de har forskellige servere som opfører sig lidt forskelligt.
Skriv endelig, hvis der er mere nyt :O)

KH Helle
Avatar billede folmani Nybegynder
10. juni 2009 - 10:31 #34
Avatar billede uthsen Nybegynder
10. juni 2009 - 11:07 #35
Ja, men det foregår jo via et FTP program på serveren og det kan jeg også selv få det til via mit eget FTP program her fra min pc.
Problemet var, at få en kodestump på en fil, der ligger på serveren til selv at ændre rettigheder for selve filen + alle filer i det bibliotek, hvor denne fil med kodestumpen ligger. :O)

KH Helle
Avatar billede folmani Nybegynder
10. juni 2009 - 11:17 #36
OK, hvis du finder en brugbar løsning, så er du meget velkommen til at poste den i Wiki'en ;-)
Avatar billede acore Ekspert
10. juni 2009 - 17:44 #37
@folmani: Begge de løsninger jeg har postet er brugbare under normale omstændigheder, og afprøvet på 3 forskellige hosts. Hvorfor det ikke virker i denne specifikke situation har jeg ikke haft mulighed for at undersøge.
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