Avatar billede way3000 Nybegynder
24. juli 2006 - 09:32 Der er 47 kommentarer og
3 løsninger

PHP upload script ?

Hej Eksperter.
Er der nogen der kan fortælle mig hvorfor jeg får fejlen:

Warning: mkdir(../gfx/down/): File exists in /www/lonetower.dk/downfileadd.php on line 33
upload_files directory doesn't exist and creation failed

ud fra denne kode:

<?php
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// You may change maxsize, and allowable upload file types.
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//Mmaximum file size. You may increase or decrease.
$MAX_SIZE = 20000000000000;

//Allowable file ext. names. you may add more extension names.
$FILE_EXTS = array('.zip','.rar','.iso','.doc','.txt','.wmv','.avi','.mpg','.mpeg','.rm','.mov','.tar','.tar.bz2','.jpg','.png','.psd','.gif','.bmp','.jpeg','.ico');

//Allow file delete? no, if only allow upload only
$DELETABLE = false;


//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Do not touch the below if you are not confident.
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/************************************************************
* Setup variables
************************************************************/
$site_name = $_SERVER['HTTP_HOST'];
$url_dir = " http://".$_SERVER['HTTP_HOST'].dirname($_SERV...
$url_this = " http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_...

$upload_dir = "../gfx/down/";
$upload_url = $url_dir."/../gfx/down/";
$message ="";

/************************************************************
* Create Upload Directory
************************************************************/
if (!is_dir("files")) {
if (!mkdir($upload_dir))
die ("upload_files directory doesn't exist and creation failed");
if (!chmod($upload_dir,0755))
die ("change permission to 755 failed.");
}

/************************************************************
* Process User's Request
************************************************************/
if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del] ");
fclose($resource);

if (strpos($_REQUEST[del],"/.")>0); //possible hacking
else if (strpos($_REQUEST[del],$upload_dir) === false); //possible hacking
else if (substr($_REQUEST[del],0,6)==$upload_dir) {
unlink($_REQUEST[del]);
print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']." ");
fclose($resource);

$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));

//File Size Check
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "The file size is over 2MB.";
//File Extension Check
else if (!in_array($file_ext, $FILE_EXTS))
$message = "Sorry, $file_name($file_type) is not allowed to be uploaded.";
else
$message = do_upload($upload_dir, $upload_url);

print "<script>window.location.href='$url_this?message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
$message = "Invalid File Specified.";

/************************************************************
* List Files
************************************************************/
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
if(!is_dir($file) && !is_link($file)) {
$filelist .= "<a href='$upload_dir$file'>".$file."</a>";
if ($DELETABLE)
$filelist .= " <a href='?del=$upload_dir".urlencode($file)."' title='delete'>x</a>";
$filelist .= "<sub><small><small><font color=grey> ".date("d-m H:i", filemtime($upload_dir.$file))
."</font></small></small></sub>";
$filelist .="<br>";
}
}

function do_upload($upload_dir, $upload_url) {

$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_name = str_replace("\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;

//File Name Check
if ( $file_name =="") {
$message = "Invalid File Name Specified";
return $message;
}

$result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0777))
$message = "change permission to 777 failed.";
else
$message = ($result)?"$file_name uploaded successfully." :
"Somthing is wrong with uploading a file.";
return $message;
}

?>

<center>
<H3>Download files</H3>
<font color=red><?=$_REQUEST[message]?></font>
<br>
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
Upload File <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="Upload">
</form>

<br><b>Download files</b>
<hr width=70%>
<?=$filelist?>
<hr width=70%>
</center>

Mvh. WaY3000
Avatar billede jaw Nybegynder
24. juli 2006 - 09:33 #1
Sikker på, at din biblioteksstruktur gør at du skal bruge .. og ikke bare .?
Avatar billede way3000 Nybegynder
24. juli 2006 - 09:35 #2
Det vil jeg lige forsøge mig med.. 2 sec. :)
Avatar billede way3000 Nybegynder
24. juli 2006 - 09:36 #3
Nej desværre.. det gav bare

Warning: mkdir(./gfx/down/): No such file or directory in /www/lonetower.dk/downfileadd.php on line 33
upload_files directory doesn't exist and creation failed
Avatar billede jaw Nybegynder
24. juli 2006 - 09:47 #4
Hvor ligger gfx-biblioteket? www.lonetower.dk/gfx eller?
Avatar billede way3000 Nybegynder
24. juli 2006 - 09:53 #5
ja lige præcist.
Avatar billede jaw Nybegynder
24. juli 2006 - 09:55 #6
Hm, så burde:
mkdir("./gfx/down");

virke. Måske det er din afsluttende / der giver bøvl?!
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:02 #7
måske .. tjekker den lige :D
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:14 #8
nej heller ikke det :'(
Avatar billede jaw Nybegynder
24. juli 2006 - 10:25 #9
Og gfx-biblioteket findes i forvejen?
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:40 #10
ja.
Avatar billede jaw Nybegynder
24. juli 2006 - 10:51 #11
Hm, det lyder lidt underligt. Har du prøvet at teste det i en tom fil, og du er 100% sikker på, at der nu kun står 1 punktum ./gfx/down ?
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:55 #12
jeps.  fatter heller ikke selv why den brokker sig..
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:55 #13
safe mode er on.. kan det gøre noget?
Avatar billede way3000 Nybegynder
24. juli 2006 - 10:57 #14
$upload_dir = "./gfx/down"; 

giver


Warning: mkdir(./gfx/down): No such file or directory in /www/lonetower.dk/downfileadd.php on line 33
upload_files directory doesn't exist and creation failed

og det samme med den bagerste "/" bare hvor den også er med i fejlmeddelelsen
Avatar billede jaw Nybegynder
24. juli 2006 - 11:01 #15
Ja, det kan det sagtens, men så ville jeg bare mene, at fejlmeddelelsen er en anden.
Avatar billede mcgoat Nybegynder
24. juli 2006 - 11:12 #16
hvad med:

$upload_dir = "\gfx\down";

for hvis den opretter det "lokalt" skal den vel bruge \ og ikke / ?

men kan så ikke huske om php bruger \ som escape char så der skal være 2 \\
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:12 #17
det er somom den tager ../ som en tekststreng og ikke det som det betyder.. altså at den skal gå et skridt ned af biblioteksstigen.

kan det være der den er gal ?
Avatar billede mcgoat Nybegynder
24. juli 2006 - 11:15 #18
kan vi se hele linien af: $url_dir = " http://".$_SERVER['HTTP_HOST'].dirname($_SERV...  ?
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:17 #19
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:17 #20
sorry. så ikke lige den cuttede hele linien af der :S
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:20 #21
Avatar billede mcgoat Nybegynder
24. juli 2006 - 11:22 #22
måske der er noget her :)

you want to create a directory tmp
mkdir ('tmp', 0775);
will create /path/to/your/script/tmp

but if you this
mkdir ('/path/to/your/tmp', 0755);
or
mkdir ('../tmp', 0755);

both will cause an error - permission denied.


http://dk2.php.net/mkdir
Avatar billede andreas Nybegynder
24. juli 2006 - 11:23 #23
Du kan ikke oprettet etc /gfx/down/ - HVIS gfx ikke eksitere allerede, med den måde du skriver.

Prøv med:

mkdir($upload_dir, 0770, TRUE)
Avatar billede mcgoat Nybegynder
24. juli 2006 - 11:26 #24
Avatar billede mclemens Nybegynder
24. juli 2006 - 11:34 #25
Husk credits til den du har taget scriptet fra ...
du er kommet til at slette dette fra scriptet:

  <small><sup>Developed By
  <a style="text-decoration:none" href="http://tech.tailoredweb.com">TailoredWeb.com</a>
  </sup></small>

( http://tech.tailoredweb.com/simple-upload-53.php?forum=simpleupload&func=read&page=4&id=188 )
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:39 #26
ops sorry. sætter lige hans signatur ind igen :D
tak for det.

(det er når man gennemgår for sin egen slamkode hehe :P)
Avatar billede mclemens Nybegynder
24. juli 2006 - 11:42 #27
Helt ok :o) Mvh, Clemme (tidl. nick Nymano)
Avatar billede way3000 Nybegynder
24. juli 2006 - 11:43 #28
mcgoat så du siger altså at på denne måde med mkdir kan man KUN oprette en folder i samme level eller højere (http://root/hererjeg/højere/oghøjere/)

hvis man ikke kan gå tilbage med scriptet (ligesom med ../) så er jeg jo på den.
Avatar billede jaw Nybegynder
24. juli 2006 - 11:48 #29
Så kan man jo lære at læse manualen færdig :S
Avatar billede mcgoat Nybegynder
24. juli 2006 - 11:55 #30
ser ud til nogen kan, og andre ikke kan.. om det har noget med php versionen at gøre.. tja måske :)
Avatar billede mclemens Nybegynder
24. juli 2006 - 12:07 #31
... Jeg testede scriptet på min server engang da jeg skulle bug teste for hullet... Der kunne jeg ikke bruge scriptet ... tyder lidt på at min server er helt låst ned sikkerhedsmæssigt (kunne selvfølgelig prøve på at låse lidt op, da jeg har en dedikeret server, men jeg skulle ikke selv bruge scriptet)...

Jeg testede så lokalt på en wamp test opsætning og på danhost ... der var ikke nogen problemer med scriptet - tror som mcgoat siger at det afhænger lidt af din hosts indstilling - spørg evt. om der tildeles rettigheder til scriptet så det kan oprette/slette filer/mapper indenfor dit område ... [ upload_files directory doesn't exist and creation failed ]

^ - Ved ikke om det er der problemet lægger men tyder måske lidt på retiigheder til oprettelse af mapper / sletning på dit domæne område ... jeg har ikke sat mig ind i apache ...
Avatar billede mclemens Nybegynder
24. juli 2006 - 12:09 #32
^ - Edit: ... spørg evt. (EDIT: din udbyder om der kan) tildeles rettigheder så det kan oprette/slette filer/mapper indenfor dit område ...
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:14 #33
det skulle der gerne kunne. og jeg har desuden givet fuld tilladelse hele vejen igennem for at se om det var det.

hvordan kan man nemt se hvem der står om ejer af de forskellige mapper og filer så jeg kan se om det er secure mode der gør noget galt ?
Avatar billede mcgoat Nybegynder
24. juli 2006 - 12:16 #34
har du læst den side jeg linkede til med safe mode? det kan ikke være det?
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:19 #35
jeg er blevet ret forvirret nu.

når jeg prøver at bruge !mddir så siger den at dir ikke findes.

men bruger jeg bare mkdir så siger den:

Warning: mkdir(../gfx/down/): File exists in /www/lonetower.dk/downfileadd.php on line 33

Warning: chmod(): Operation not permitted in /www/lonetower.dk/downfileadd.php on line 35
change permission to 755 failed.
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:20 #36
mcgoat jo det kan det jo måske godt. men jeg tvivler da jeg står som ejer af alle filerne ?
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:23 #37
is_dir kan vel også gøre hele forskellen i og med at den skal returnere true med "files" som en eksisterende dir. ?

prøver lige noget helt andet.
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:24 #38
AHA there you go. !!

is_dir("files") returnerer false derfor får jeg en fejl.

men med is_die($upload_dir) fungerer det sq :D

tak til alle for hjælpen.

jeg ved ikke rigtigt hvad man gør med points i dether tilfælde ??
Avatar billede mcgoat Nybegynder
24. juli 2006 - 12:28 #39
det den egnelig gør er vel at den går videre til !mkdir hvis mappen "files" ikke findes... ved godt nok ikke hvorfor det lige er lavet sådan
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:30 #40
det er vel for at den ikke kommer til at overskrive en fil kaldet files med en dir eller noget.. sikkert en eller anden form for sikkerhed :P

men det er i hvert fald ordnet nu.

men jeg aner ikke what to do med de points der ?
Avatar billede mcgoat Nybegynder
24. juli 2006 - 12:31 #41
jeg behøver ikke nogen, ved ikke med de andre :)
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:36 #42
hehe ok :) jeg lader dem være til der bliver sagt hvad jeg skal.

(vil ikke bare give dem til noget der ikke skal og ej heller tage dem ufortjent.)
Avatar billede andreas Nybegynder
24. juli 2006 - 12:43 #43
scriptet er lidt useless. Der er ingen grund til at sætte permissions efter man har lavet dir'ret når man i samme kommando kan sætte dem direkte som jeg skrev. Desuden skal man angive om man vil oprette rekrusivt eller ej.
Avatar billede mclemens Nybegynder
24. juli 2006 - 12:43 #44
Heller ikke point hertil ... men jeg synes at du selv skulle lægge et svar også og så snuppe en stor bid af pointene selv ... problemet var jo at den konstant checkede på om "files" direktoratet eksisterede og den fejl fangede du jo selv :o)

... m.h.t. til analysering delen med af kontrol på om
files direktoratet eksisterede var det vel mere en kontrol af

- om direktoratet eksisterede
- - hvis ikke så opret med mkdir ... men hvis mkdir returnerer falsk
- - - så giv en fejl meddelelse
- - herefter kom et forsøg på at chmod direktoratet
- - - hvis det slog fejl så giv en fejlmeddelelse...
Avatar billede andreas Nybegynder
24. juli 2006 - 12:45 #45
/************************************************************
* Create Upload Directory
************************************************************/
if (!is_dir($upload_dir)) {
  if (!mkdir($upload_dir, 0755, TRUE))
  die ("upload_files directory doesn't exist and creation failed");
}
Avatar billede mclemens Nybegynder
24. juli 2006 - 12:45 #46
Tjoh andreas når du laver det hele i en smøre så får du jo ikke en fejl beskrivelse af hvilken del der slog fejl - altså om det var oprettelse af mappen eller chmod af mappen ... men det er jo heller ikke af stor betydning ...
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:47 #47
Andreas det er sikkert rigtigt at man kan det men dether fungerer jo også så fejlen er vel ikke det du beskriver. det er vel en smart tilrettelse.
Avatar billede andreas Nybegynder
24. juli 2006 - 12:48 #48
Forøvrigt, hvis man læser på php.net, er der en som har gjort en opdagelse:

While researching for this function, I have found out that - at least on my system - mkdir only works when the parent directory is the one your script is in.
eg:
you want to create a directory tmp
mkdir ('tmp', 0775);
will create /path/to/your/script/tmp

but if you this
mkdir ('/path/to/your/tmp', 0755);
or
mkdir ('../tmp', 0755);

both will cause an error - permission denied.

Trond
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:48 #49
jeg vælger at tage points selv fo som mclemens siger så fandt jeg den vist selv.

men hvis der er folk der ikke mener det så sig til så finder vi ud af det.
Avatar billede way3000 Nybegynder
24. juli 2006 - 12:49 #50
ok and. vi deler hehe.

jeg er gavmild :P virker også forkert at tage alt selv.
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

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Capgemini Danmark A/S

Microsoft AI Solution Architect

Capgemini Danmark A/S

Java Engineer