Avatar billede lanworld_rippie Nybegynder
14. december 2002 - 23:30 Der er 35 kommentarer

Hjælp til filsystem... (skrive til en fil)

Hej alle sammen. ja jeg sidder i lortet igen... jeg sidder lige med et mindre problem, og det er at jeg har lavet noget som ikke virker som det skal... nedenfor kan i se min kode, og efter den kan i se den fejl jeg får..

KODE :
-------------------------------------------

<?

echo "<table width='745' cellpadding='2' cellspacing='0'>";
  echo "<tr>";
  echo "<td width='745' valign='middle' class='header'>&nbsp;Ret kode ...</td>";
  echo "</tr>";
  echo "<tr>";
  echo "<td width='745' valign='top'><br>";

echo "<a href='java script:history.go(-1);'><center><b>Tilbage</b></center></a><p>";

if(isset($_POST["save"])) {

$fil = fopen("$_POST[filsti]", "w+");
fwrite($fil, stripslashes($_POST[nytindhold]));
fclose($fil);

echo "Indholdet er rettet og gemt...<p>";

} else {


$filename = "$_GET[filename]";
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);

$indhold = $contents;

echo "<form action='start.php?page=ret.kode.php' method='post'>";

echo "<input type='hidden' name='filsti' value='$filename'>";

echo "<textarea rows='40' name='nytindhold' cols='143' class='input'>$indhold</textarea>";

echo "<p>";

echo "<input type='submit' name='save' value='Gem' class='submit'>";

echo "</form>";


  echo "<br>&nbsp;</td>";
  echo "</tr>";
echo "</table>";

}

?>


FEJL :
----------------------------------------------

Warning: fopen("/fairhost/Rippie3/lanworld.dk/etellerandet.txt", "w+") - Permission denied in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 14

Warning: fwrite(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 15

Warning: fclose(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 16
Indholdet er rettet og gemt...




håber at der er en som kan hjælpe mig .....
Avatar billede lauer Nybegynder
14. december 2002 - 23:54 #1
Du har ikke adgang til at ændre i filen igennem PHP.
Login med FTP og chmod den 666, evt. 777, så skulle de virke.
Avatar billede ztyxx Nybegynder
15. december 2002 - 00:00 #2
måske en definering af dit filnavn, godt nok ved jeg ikke hvordan du gør det, men har selv prøvet din kode, bare med
$filename = "en_fil.txt";
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 01:43 #3
macho... kan jeg ikke chmod alle filer med 777 når jeg henter dem og vil skrive til dem ???
Avatar billede totaliorden Nybegynder
15. december 2002 - 01:46 #4
Jeg ved ikke om det gælder for filerne, men du kan jo chmodde en hel mappe...
Avatar billede rzj Nybegynder
15. december 2002 - 09:00 #5
hvad med:
<?php
chmod("/fairhost/Rippie3/lanworld.dk/$filename", 0777);
$filename = "$_GET[filename]";
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
?>
Så skulle der ikke være problemer fremover, men husk at chmod() tager den fulde sti tl filen. Mit forslag er derfor kun et 'gæt' baseret på dine fejlmeddelelser ;-)
Avatar billede rzj Nybegynder
15. december 2002 - 09:01 #6
vrøvl, det er sådan her selvfølgeligt:
<?php
$filename = "$_GET[filename]";
chmod("/fairhost/Rippie3/lanworld.dk/$filename", 0777);
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
?>
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 09:08 #7
Det virkede ikke....

Jeg får denne fejl IGEN :(

Warning: fopen("/fairhost/Rippie3/lanworld.dk/etellerandet.txt", "w+") - Permission denied in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 14

Warning: fwrite(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 15

Warning: fclose(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 16
Indholdet er rettet og gemt...


Her er min nuværende kode....

<?

echo "<table width='745' cellpadding='2' cellspacing='0'>";
  echo "<tr>";
  echo "<td width='745' valign='middle' class='header'>&nbsp;Ret kode ...</td>";
  echo "</tr>";
  echo "<tr>";
  echo "<td width='745' valign='top'><br>";

echo "<a href='java script:history.go(-1);'><center><b>Tilbage</b></center></a><p>";

if(isset($_POST["save"])) {

$fil = fopen("$_POST[filsti]", "w+");
fwrite($fil, stripslashes($_POST[nytindhold]));
fclose($fil);

echo "Indholdet er rettet og gemt...<p>";

} else {


$filename = "$_GET[filename]";
chmod ("$filename", 0777);
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);

$indhold = $contents;

echo "<form action='start.php?page=ret.kode.php' method='post'>";

echo "<input type='hidden' name='filsti' value='$filename'>";

echo "<textarea rows='40' name='nytindhold' cols='143' class='input'>$indhold</textarea>";

echo "<p>";

echo "<input type='submit' name='save' value='Gem' class='submit'>";

echo "</form>";


  echo "<br>&nbsp;</td>";
  echo "</tr>";
echo "</table>";

}

?>
Avatar billede sukos Juniormester
15. december 2002 - 09:11 #8
Prøv at bruge:
$fil = fopen("$_SERVER[DOCUMENT_ROOT]/$_POST[filsti]", "w+");

hvor filen altså ligger i roden af dit domain
Avatar billede sukos Juniormester
15. december 2002 - 09:13 #9
Evt.
chmod("$_SERVER[DOCUMENT_ROOT]/$_POST[filsti]", 0775);
$fil = fopen("$_SERVER[DOCUMENT_ROOT]/$_POST[filsti]", "w+");
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 09:17 #10
den fil her som den her kode står i. den ligger i /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php

kan det have noget med det at gøre ???? når den fil som jeg så skal gemme ligger i lanworld.dk mappen ?
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 09:29 #11
Hvis jeg lige tager sådan for sjovt at siger det hidden felt jeg har og laver det om til text. så indeholder den dette :

/fairhost/Rippie3/lanworld.dk/etellerandet.txt

og det er vel også rigtig nok...

men tror at det dumme sker her ...


if(isset($_POST["save"])) {

$fil = fopen("$_POST[filsti]", "w+");
fwrite($fil, stripslashes($_POST[nytindhold]));
fclose($fil);

echo "Indholdet er rettet og gemt...<p>";

tror simpelthen at den ikke kan finde den fil. fordi at den her fil ligger i fairhost/Rippie3/lanworld.dk/admin/sites.ret.kode.php

kan det være fordi at den prøver at læse den filsti (altså filen) sådan her :

/fairhost/Rippie3/lanworld.dk/admin/sites//fairhost/Rippie3/lanworld.dk/etellerandet.txt

kan det være sådan en fejl der ??? for den sti eksistere jo ikke..
Avatar billede sukos Juniormester
15. december 2002 - 09:31 #12
Ja, det kunne jo godt være din $_POST[filsti] som du får defineret forkert?
Avatar billede sukos Juniormester
15. december 2002 - 09:33 #13
Prøv evt. med:
<?php
if(isset($_POST["save"])) {

readfile("$_POST[filsti]");
}
?>

Hvis ikke det virker, ja, så er det din sti som er forkert defineret
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 09:33 #14
Jamen den ser jo sådan her ud.... er det ikke rigtigt ???

/fairhost/Rippie3/lanworld.dk/etellerandet.txt

og jeg prøver at læse filen med dette :

$fil = fopen("$_POST[filsti]", "w+");
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 10:32 #15
Hej igen.. jeg vil bare lige sige at hvis jeg via mit ftp program chmod'der den fil som skal ændres så virker det fint.... men hvorfor kan jeg ikke få lov til at chmod igennem php ???

jeg har os chmod den fil som skal ændre den anden fil.....
Avatar billede rzj Nybegynder
15. december 2002 - 10:45 #16
biblioteket hvor filen du skriver i ligger skal også chmod'es til 777!
Avatar billede rednex Nybegynder
15. december 2002 - 10:48 #17
Jeg tror problemet er at du prøver at åbne filen med w+ privilegier inden du har lavet chmod. Så hvis du flytter chmod delen op før der hvor du åbner filen, så skulle det funke.
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 10:56 #18
Hmmm.. nu er den flyttet op over der hvor jeg læser filen inden den skal skrive i den... og jeg får denne fejl...

Warning: chmod failed: Operation not permitted in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 14

Warning: fopen("/fairhost/Rippie3/lanworld.dk/test.txt", "w+") - Permission denied in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 15

Warning: fwrite(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 16

Warning: fclose(): supplied argument is not a valid File-Handle resource in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 17
Indholdet er rettet og gemt...

og nu skal jeg så lige sige at det bibliotek som den fil ligger i som jeg skal ændre det bib er sat til 777 gjorde jeg via ftp program...
Avatar billede rednex Nybegynder
15. december 2002 - 11:25 #19
Prøv lige det her:

$filename = "$_POST[filsti]";
chmod ("$filename", 0777);

$fil = fopen("$filename", "w+");
fwrite($fil, stripslashes($_POST[nytindhold]));
fclose($fil);

Jeg har rettet $filename = "$_GET[filename]"; til $filename = "$_POST[filsti]" da du jo skal bruge filnavnet fra din formular.
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 11:31 #20
Nej det hjalp ikke... :(

den siger det samme....
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 11:33 #21
kan det være fordi at filen som skal ændre en anden fil ikke kan chmod en anden fil til 777 når den selv kun er 777 ??? mener hvad med 755 ???
Avatar billede rednex Nybegynder
15. december 2002 - 12:07 #22
Jeg er ikke så meget hjemme i *NIX systemer, men jeg kunne forestille mig at du ikke har lov til at chmod'e hvis scriptet ikke er owner af filen. Prøv at lave et lille script der laver en ny fil:

<?php
$fil = fopen("/fairhost/Rippie3/lanworld.dk/test2.txt", "w+");
if ($fil)
fclose($fil);
else
echo "Kunne ikke skrive filen";
?>

På den måde skulle scriptet gerne blive owner af test2.txt, og du checker samtidig at scriptet har write permission i den mappe.
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 13:49 #23
Kender du noget til kommandoen chown ???

http://www.php.net/manual/en/function.chown.php

jeg ved ikke om jeg kan bruge den.. altså sætte min fil til at owne den anden fil eller noget....
Avatar billede thomas.k Nybegynder
15. december 2002 - 16:46 #24
Næppe. Det er ikke scriptet der er ejer en fil, heller ikke selvom det er scriptet der kreerer filen. Det er http serveren der er "bruger" på systemet, typisk som brugeren "nobody", "apache", "httpd" eller noget lignende, og det er denne bruger der skal forsøge at chmod'de din fil. Normalt er det kun superadminen der har ret til sådan noget, hvilket betyder at webserveren skulle have samme rettigheder som brugeren "root".

Du kan altså roligt gå ud fra, at chmod() ikke er noget du kan bruge i denne sammenhæng.
Avatar billede thomas.k Nybegynder
15. december 2002 - 16:47 #25
Hovsa, læs chown() i stedet for chmod() i ovenstående :-)
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 16:49 #26
hmm hvordan ser sådan en kommando ud thomas ? jeg har selv siddet og kigget lidt på den kommendo nemlig...
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 16:52 #27
Er det bare chown($filnavn); ???
Avatar billede lanworld_rippie Nybegynder
15. december 2002 - 16:53 #28
Har du en løsning på mit prooblem ?

er det fordi at der er slået safe_mode til på serveren ????
Avatar billede thomas.k Nybegynder
15. december 2002 - 19:46 #29
Safe_mode betyder ikke umiddelbart noget her. Det er og bliver kun superuser'en der har ret til at skifte ejer for en fil, safe_mode eller ej.

Måske har du ret til at skifte gruppe for filen. I givet fald kan du måske skifte gruppe-ejerskab til den gruppe som webserveren tilhører:

  $return = chgrp($DOCUMENT_ROOT."path_to_file"."file_name","users");

I eksemplet gætter jeg på, at webserveren tilhører gruppen "users". $return vil enten være true eller false, så den er ikke så forfærdelig interessant med mindre visning af fejl er slået fra. Så kan du echo'e denne værdi.

Det er ikke sikkert at det er nødvendigt at angive fuld sti til filen, men det finder du hurtigt ud af...

Hvis det skal kunne bruges til noget skal filen i øvrigt være chmod'et til 766 eller i hvert fald en værdi hvor gruppen må gøre noget som helst.

Altså, du skal ikke vente dig for meget... Hvis du skal kunne arbejde med filrettigheder, så skal du have en temmelig god kontrol over din webserver.
Avatar billede thomas.k Nybegynder
15. december 2002 - 20:21 #30
Det oprindelige problem var jo, at du fik en meddelelse om ugyldigt filehandle fordi din fopen() fejler:

  Warning: fopen("/fairhost/Rippie3/lanworld.dk/etellerandet.txt", "w+")
  Permission denied in /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php
  on line 14

fopen() med "w+" vil forsøge at kreere filen hvis den ikke findes, og det får du nok ikke lov til. Prøv med "r" i stedet for. Hvis du stadig ikke får lov at åbne filen, så er filen lukket land. Hvis det lykkes så prøv med "r+", det er i lighed med "w+" også en tilstand hvor du får lov at skrive til filen, bare den findes i forvejen.

Din sti "/fairhost/Rippie3/lanworld.dk/" er i hvert fald korrekt. Det ses tydeligt i din info.php, slet den hvis du ikke har brug for den... Tilbage er 'bare' at få løst nogle rettighedsproblemer så du kan skrive din fil.
Avatar billede thomas.k Nybegynder
15. december 2002 - 20:28 #31
Det ser da ellers ud som om at du er kommet videre, nu ligger din fejl helt nede i linje 29:

  Warning: fopen("", "rb") - Inappropriate ioctl for device in
  /fairhost/Rippie3/lanworld.dk/admin/sites/ret.kode.php on line 29

"b" parameteren betyder i øvrigt kun noget på Windows systemer, den er ligegyldig på din Linux 2.4.18 med PHP 4.2.1 og Apache 1.3.24 :-)
Avatar billede thomas.k Nybegynder
15. december 2002 - 20:46 #32
Umiddelbart vil jeg gætte på, at den eneste parameter du får lov til at bruge på fopen() er "r", altså kun læsning af filen. Rin
Avatar billede thomas.k Nybegynder
15. december 2002 - 20:46 #33
Æv, kom til at klikke på "Udfør"
Avatar billede thomas.k Nybegynder
15. december 2002 - 20:51 #34
Umiddelbart vil jeg gætte på, at den eneste parameter du får lov til at bruge på fopen() er "r", altså kun læsning af filen. I så fald kan du måske ændre rettigheder på filen vha. FTP eller endnu bedre, du kan skrive filen vha. FTP:

About writing to file with a specific user id:
You can usually change file permissions with FTP. Just open a FTP connection and say "chmod o+w filename". It is also possible to use FTP connection to write the file, for example, "fopen(ftp://user:password@ftpserver.address/file,w)". That way the file is created and used with your username and password, which (IMHO) is more secure than having files with write permission for all.

( Hentet fra: http://www.php.net/manual/en/function.fopen.php )
Avatar billede ztyxx Nybegynder
22. december 2002 - 14:34 #35
lukketid??
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