Avatar billede challenge Praktikant
25. november 2007 - 13:16 Der er 12 kommentarer og
1 løsning

mkdir og upload dertil

Hej alle.

Jeg kan, via et PHP-script, oprette en mappe vha. mkdir. Da jeg, af en eller anden grund, ikke kan sætte chmod direkte i mkdir'en, gør jeg det lige efter med en normal chmod-command.

Problemet opstår da jeg, via et upload-script, skal uploade et billede til mappen - det er ikke muligt, selvom chmod er sat til 0777 - opretter jeg derimod manuelt en mappe, og giver den 0777 chmod manuelt, vil den gerne uploade billedet - hvorfor?

(Hvis i har brug for en speciel del af koden, please tell me :) )

Mvh.
Avatar billede jakobdo Ekspert
25. november 2007 - 21:06 #1
Problemet er at du via ftp opretter mappen og chmod'er den, så kan du fint sætte den til chmod 777.
Når du gør det samme via php kode, så er det php/apache som er ejeren af filen/processen.
Du kan ikke løse dit problem med en smart kommando, desværre.
Avatar billede challenge Praktikant
25. november 2007 - 23:07 #2
Vil det sige at der aldrig vil kunne uploades til en mappe oprettet af php?
Avatar billede showsource Seniormester
25. november 2007 - 23:22 #3
Det her virker fint for mig på en freebsd/apache

<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$url_link = "/upload/";
$dist = $root . $url_link;

if(!is_dir($dist)) {
echo"Opret uploaddir!";
exit;
}

if(!is_writeable($dist)) {
echo"Tjek skriverettigheder på ". $dist ." !!!!!<br />";
exit;
}

?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Vælg fil:<br>
<input name="upfile" type="file"><br>
Filer uploades til mappen: <?php echo $dist; ?>
<br />
eller indtast nyt navn til dir: <input type="text" name="newdir">
<br />


<input type="submit" value="Upload">
</form>

<?php
if (isset($_FILES["upfile"])) {

if(!empty($_POST["newdir"])) {

mkdir($dist . $_POST["newdir"], 0777);
chmod($dist . $_POST["newdir"], 0777);

$dist = $dist . $_POST["newdir"] ."/";
$url_link .= $_POST["newdir"] ."/";
}
        if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $_FILES["upfile"]["name"])) {
        echo"Filen, ". $_FILES["upfile"]["name"] ." er uploadet. <a href=\"". $url_link . $_FILES["upfile"]["name"] ."\">". $_FILES["upfile"]["name"] ."</a>";
        }else{
        echo"Filen blev ikke uploadet?";
        }
}
?>
Avatar billede jakobdo Ekspert
26. november 2007 - 08:01 #4
showsource: Det kommer jo meget an på hvordan selve serveren/webhotellet er sat op.
Så for nogle virker det, andre gange gør det ikke.
Avatar billede showsource Seniormester
26. november 2007 - 08:10 #5
ehh, hvordan mener du, altså hvad skulle gøre det IKKE kan gøres, udover disabling af chmod m.m. ?
Avatar billede jakobdo Ekspert
26. november 2007 - 08:15 #6
Om man kan lave mkdir() og chmod() er jo udelukkende et spørgsmål om rettigheder.
Og jeg har set eksempler på at disse filer kommer til at blive ejet af NOBODY/NOBODY
Og dermed kan php ikke tilgå dem efterfølgende.
Der er muligvis tale om dårlig opsæt af webhotellet, men mkdir() / chmod() vil ikke virke efter hensigten.
Avatar billede showsource Seniormester
26. november 2007 - 08:21 #7
ehhh, hvis ejer bliver bliver nobody, er det vel forkert chmod som er skyld i det ?
Eller forkert chmod/ejer af filen som laver dirs/filer ?
Avatar billede jakobdo Ekspert
26. november 2007 - 08:51 #8
Det er den sidste ja!
Avatar billede challenge Praktikant
29. november 2007 - 23:28 #9
Tak begge to - smid et svar hver :)
(jeg valgte at lade være med at bruge mapper, men i stedet bar at kalde dem <id>_<rand>.jpg
Avatar billede jakobdo Ekspert
30. november 2007 - 08:28 #10
Svar!
Du ville evt. også kunne styre det med en database.
Avatar billede showsource Seniormester
01. december 2007 - 07:06 #11
ingen point til mig, ellers tak
Avatar billede challenge Praktikant
01. december 2007 - 15:51 #12
Ok - tak begge to.

Jakob - ikke dårlig idé. Det er dog intet problem uden.
Avatar billede jakobdo Ekspert
01. december 2007 - 18:16 #13
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