Avatar billede jkn83 Praktikant
27. juli 2005 - 00:40 Der er 8 kommentarer og
1 løsning

Fejl i fil håndterings script

Jeg har fået bikset et script sammen ved hjælp af andre scripts der er fundet på nettet. Det fungerer fint nok hvis jeg lader mit dir stå på chmod 777 hele tiden... Men, fejlen i scriptet, foregår i linie 32, 33 og 34... Den vil ikke slettet en fil i min oversigt når jeg vælger at slette det...

kilde koden ses her:

<?php

include("style.css");
include("scroller.css");

$MAX_SIZE = 2000000;
                           
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
                  ,'image/png','application/msword');

$FILE_EXTS  = array('.rar','.jpg','.png','.gif');

$DELETABLE  = true;                             

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "pics/";
$upload_url = $url_dir."/pics/";
$message ="";

if (!is_dir("pics")) {
  if (!mkdir($upload_dir))
      die ("Dir til upload, eksisterer ikke. Fejl i upload. Kontakt Sniper_h0e aka Deus.");
  if (!chmod($upload_dir,0755))
      die ("Chmod på dir skal være 755, kontakt Sniper_h0e aka Deus.");
}


if ($_REQUEST[del] && $DELETABLE)  {
  $resource = fopen("log.txt","a");
  fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]\n");
  fclose($resource);
 
  if (strpos($_REQUEST[del],"/.")>0);
  else if (strpos($_REQUEST[del],$upload_dir) === false);
  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']."\n");
  fclose($resource);

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

  if ( $_FILES['userfile']['size'] > $MAX_SIZE)
    $message = "Filer større end 2mb kan ikke uploades. Kontakt Sniper_h0e aka Deus";

  else if (!in_array($file_type, $FILE_MIMES)
          && !in_array($file_ext, $FILE_EXTS) )
    $message = "Fejl, $file_name($file_type) kan ikke uploades. Typen ikke tilladt. Kontakt Sniper_h0e aka Deus.";
  else
    $message = do_upload($upload_dir, $upload_url);
 
  print "<script>window.location.href='$url_this?message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
    $message = "Filtype ikke tilladt.";

$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$file' title='delete'><font color='#cccccc'>x</font></a> - ";
      $filelist .= "<sub><font color='#cccccc'>  ".date("d-m H:i", filemtime($upload_dir.$file))
                  ."</font></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;

  if ( $file_name =="") {
      $message = "Invalid fil navn indtastet. Prøv igen.";
      return $message;
  }

  $result  =  move_uploaded_file($temp_name, $file_path);
  if (!chmod($file_path,0777))
      $message = "Fejl i ændring af chmod til 777.";
  else
    $message = ($result)?"$file_name uploaded." :
              "Noget er galt med uploading af fil.";
  return $message;
}

?>

<center>
  <font color=red><?=$_REQUEST[message]?></font>
  <br>
  <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
    <h3>Upload af fil</h3>
      <input type="file" id="userfile" name="userfile">
    <input type="submit" name="upload" value="Upload">
  </h1>
  </form>
 
  <br><b>Oversigt over filer</b>
  <hr width=80% size="1">
  <?=$filelist?>
  <hr width=80% size="1">
</center>
Avatar billede jkn83 Praktikant
27. juli 2005 - 00:41 #1
fejlen skulle ligge i disse 3 linier:

  $resource = fopen("log.txt","a");
  fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]\n");
  fclose($resource);
Avatar billede jaw Nybegynder
27. juli 2005 - 00:47 #2
Erh, hvad er det lige du vil? Du siger at det virker fint nok hvis chmod forbliver 777, men ikke hvis du fjerner det. Men er det en fil du vil slette?
Avatar billede jkn83 Praktikant
27. juli 2005 - 01:05 #3
heh ja min fejl... må være tidspunktet på "dagen" :D scriptet fungerer fint som upload, så længe jeg lader dir chmod stå på 777. Men fejlen i scriptet ligger i at slette en fil fra oversigtet, hvilket den siger er linie 32, 33, 34.... de 3 angivne linier oven over....

Håber den gav mere mening :)
Avatar billede jaw Nybegynder
27. juli 2005 - 01:19 #4
Ja, måske. Men smid lige, hvad den præcise fejlmeddelelse er. Gider ikke gætte mig til den :)
Avatar billede jkn83 Praktikant
27. juli 2005 - 01:48 #5
Warning: fopen(log.txt): failed to open stream: Permission denied in /home/cvroms/public_html/test/upload-billede.php on line 40

Warning: fwrite(): supplied argument is not a valid stream resource in /home/cvroms/public_html/test/upload-billede.php on line 41

Warning: fclose(): supplied argument is not a valid stream resource in /home/cvroms/public_html/test/upload-billede.php on line 42

tilføjede lidt mere kode... men ja, det er stadig de samme linier som beskrevet oven over... håber det hjalp
Avatar billede jaw Nybegynder
27. juli 2005 - 01:56 #6
Ok, fint! Det betyder jo, som fejlmeddelelserne fint angiver, at du skal have chmod'et, da dit "a" i din fopen() angiver at du vil skrive til filen. Uden at have chmod'et til 777 - eller noget tilsvarende - så kan du ikke skrive til filen, og derfor får du permission denied.
Avatar billede jkn83 Praktikant
27. juli 2005 - 02:13 #7
som jeg sagde tidligere... alle retigheder er jo givet til diret... 777 skal jeg så ændre hver enkelt fil til 777 også ? Hvis du ser på scriptet er der en del af koden der forsøger at lave chmod'et om selv... Tror du den fejler ?

tjekker tilbage "senere" vil have noget søvn
Avatar billede jkn83 Praktikant
29. juli 2005 - 01:43 #8
ingen der kan hjælpe ?
Avatar billede jkn83 Praktikant
01. august 2005 - 12:26 #9
så må jeg jo starte forfra...
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