Avatar billede bukselak Nybegynder
19. februar 2003 - 01:37 Der er 14 kommentarer og
1 løsning

Upload file!

Hey!

Jeg har rodet lidt rundt det her 'upload file' script. Jeg kan ikke lige finde fejlen?!?!

<?
$archive_dir = "./docs";
function upload_form(){
    global $PHP_SELF;
?>

<form method="post" enctype="MULTIPART/FORM-DATA" action="<? echo $PHP_SELF ?>">
<input type="hidden" name="action" value="upload">
<input type="file" name="userfile">
<input type="submit" name="submit" value="upload">
</form>

<?
}

function upload_file(){
    global $userfile, $userfile_name, $userfile_size, $userfile_type, $archive_dir, $windir;
   
    if(isset($windir)){
        $userfile = str_replace("\\\\","\\", $userfile);
    }
    $filename = basename($userfile_name);
   
    if($userfile_size <= 0){
        die ("$filename is empty");
    }
    if(!@copy($userfile, "$archive_dir/$filename")){
        die("Can't copy $userfile_name to $filename");
    }
    if(isset($windir) && !@unlink($userfile)){
        die("Can't delete the file $userfile_name");
    }
    echo $filename." has been succesfully uploaded.<br>";
    echo "Filesize: ".number_format($userfile_size)."<br>";
    echo "Filetype: ".$userfile_type."<br>";
}
?>

<html>
<head><title>FILE UPLOAD</title></head>
<body>
<?
if ($action == 'upload'){
    upload_file();
} else {
    upload_form();
}
?>
</body>
</html>
Avatar billede ksostack Nybegynder
19. februar 2003 - 06:13 #1
<input type="submit" name="submit" value="upload">
skal nok være:
<input type="submit" name="action" value="upload">
for at
if ($action == 'upload'){
skal virke

//ksostack
Avatar billede ksostack Nybegynder
19. februar 2003 - 06:19 #2
ksostack > Dårlig ide !!
<input type="submit" name="submit" value="upload">
skal nok være:
<input type="submit" name="knap" value="upload">
og så:
if ($knap == 'upload'){

Eller hvis din PHP-version er nyere (4.x.x) skal du bruge
if($_POST['knap']  == 'upload'){
og lige sådan med dine andre variabler.
//ksostack
Avatar billede bukselak Nybegynder
19. februar 2003 - 10:24 #3
Det virker altså stadig ikke...

Jeg har jo også:
<input type="hidden" name="action" value="upload">
..som sætter action til at være upload.
Avatar billede bukselak Nybegynder
19. februar 2003 - 10:27 #4
Min PHP-version er 4.2.2
Avatar billede bukselak Nybegynder
19. februar 2003 - 10:31 #5
Når man prøver at uploade en fil printes denne linje:

Can't copy jakabov.jpg to jakabov.jpg
Avatar billede ksostack Nybegynder
19. februar 2003 - 21:13 #6
prøv med:
if(!@copy($_FILES['userfile']['tmp_name'], "$archive_dir/$filename")){
        die("Can't copy $userfile_name to $filename");
    }

//ksostack
Avatar billede bukselak Nybegynder
19. februar 2003 - 22:12 #7
Øv... Det virker stadig ikke, Ksostack! Mit script ser sådan ud nu:


-------------------------------
<?
$archive_dir = "/bukselak.starthotel.dk/onskeborn/images/offes";
function upload_form(){
    global $PHP_SELF;
?>

<form method="post" enctype="MULTIPART/FORM-DATA" action="<? echo $PHP_SELF ?>">
<input type="hidden" name="action" value="upload">
<input type="file" name="userfile">
<input type="submit" name="submit" value="upload">
</form>

<?
}

function upload_file(){
    global $userfile, $userfile_name, $userfile_size, $userfile_type, $archive_dir, $windir;
   
    if(isset($windir)){
        $userfile = str_replace("\\\\","\\", $userfile);
    }
    $filename = basename($userfile_name);
   
    if($userfile_size <= 0){
        die ("$filename is empty");
    }
    if(!@copy($_FILES['userfile']['tmp_name'], "$archive_dir/$filename")){
        die("Can't copy $userfile_name to $filename");
        }
    if(isset($windir) && !@unlink($userfile)){
        die("Can't delete the file $userfile_name");
    }
    echo $filename." has been succesfully uploaded.<br>";
    echo "Filesize: ".number_format($userfile_size)."<br>";
    echo "Filetype: ".$userfile_type."<br>";
}
?>

<html>
<head><title>FILE UPLOAD</title></head>
<body>
<?
if ($_POST['action'] == 'upload'){
    upload_file();
} else {
    upload_form();
}
?>
</body>
</html>
Avatar billede rzj Nybegynder
20. februar 2003 - 20:17 #8
du skal anvende fulde sti til upload folder:

$archive = $DOCUMENT_ROOT/docs;

desuden skal /docs/ være CHMOD 777

osv. osv.
Jeg anvender ligeledes et upload-script og det ser sådan ud:
function upload_file($folder) {
        global $valid_user, $file, $file_name, $file_size;
   
    $fileName = $_FILES['file']['name'];
        $fileSize = $_FILES ['file']['size'];
        $file = $_FILES['file']['tmp_name'];
               
    //Directory in which to work
        $tempDir = "/din/fulde/interne/server/sti/findes/med/php_info()/temp";
        $dest = $tempDir.$fileName;
       
        //Directory to place file ones uploaded
        $finalDir = "/din/fulde/interne/server/sti/findes/med/php_info()/$folder/";

           
    //Array containing valid file types
        $formats = array('pdf', 'doc', 'ppt');
       
    //Definition of filename
        $fileName = stripslashes($file_name);
       
    //Set max filesize
        $size = 2000000;
       
    //Get filename and ext
        list($fileName, $ext) = explode(".", $fileName);
       
        //Define name of file when renamed
        $today = date("dmY");
       
        $fileName = utf8_encode($fileName);
        $renamed = $fileName."_".$today."-".$valid_user.".".$ext;
       
        echo $fileName.'<br>';
    echo $fileSize.'<br>';
    echo $file.'<br>';
    echo $ext.'<br>';
       
        //Check if file has zero size
        if($fileSize == 0){
            error("Filen er tom!");
        }
        //Check if file is above limit for file
        if($fileSize > $size){
            $fileSize = round($fileSize/1000, 0);
            $size_in_kb = $size/1000;
            error("Filen er for stor - $fileSize KB! <br>
            Filen må højst fylde $size_in_kb KB.<br>\n
            Prøv evt. at gemme filen i et andet format.");
        }
       
        //Check if file is uploaded via HTTP POST
        if(!is_uploaded_file($file)){
            error("Muligt 'crackattack' fra uploadet fil!");
        }
       
        //Check if filetype is  valid
        if(!in_array($ext, $formats)) {
   
            error("Forkert filtype. Det er kun muligt at uploade filer af filtypen *.pdf, *.doc");
        }
       
        //Change attribute of file
        umask(0000);
       
        //Failed to move file on server or greenlight for "go"
        if(@!move_uploaded_file ($file, $tempDir.$fileName)){
            unlink($finalDir.$fileName);
    error("Unable to move file");
        }
   
        //Try to rename file. Delete on failure
        if(@!rename($tempDir.$fileName, $finalDir.$renamed)){
            unlink($tempDir.$fileName);
    error("Kunne ikke omdøbe fil - prøv igen");
        }
        chmod($finalDir.$renamed, 0644);
       
        send_mail($valid_user, $renamed, $today, $folder);       
        return $renamed;       
}

God fornøjelse
/raz
Avatar billede bukselak Nybegynder
27. februar 2003 - 10:08 #9
Hej Raz...
Hvordan bruger du det script sammen med en upload-formular. Har du en html-side der sender til dette script, og i så fald hvordan ser det ud...
Avatar billede bukselak Nybegynder
27. februar 2003 - 10:27 #10
Hvad er CHMOD 777... Jeg har ændrer sti, som jeg har fundet via phpinfo()

-------------------
<?
$archive_dir = "/var/www/onskeborn-randers.dk/public_html/images/offes";
function upload_form(){
    global $PHP_SELF;
?>

<form method="post" enctype="MULTIPART/FORM-DATA" action="<? echo $PHP_SELF ?>">
<input type="hidden" name="action" value="upload">
<input type="file" name="userfile">
<input type="submit" name="action" value="upload">
</form>

<?
}

function upload_file(){
    global $userfile, $userfile_name, $userfile_size, $userfile_type, $archive_dir, $windir;
   
    if(isset($windir)){
        $userfile = str_replace("\\\\","\\", $userfile);
    }
    $filename = basename($userfile_name);
   
    if($userfile_size <= 0){
        die ("$filename is empty");
    }
    if(!@copy($_FILES['userfile']['tmp_name'], "$archive_dir/$filename")){
        die("Can't copy $userfile_name to $filename");
        }
    if(isset($windir) && !@unlink($userfile)){
        die("Can't delete the file $userfile_name");
    }
    echo $filename." has been succesfully uploaded.<br>";
    echo "Filesize: ".number_format($userfile_size)."<br>";
    echo "Filetype: ".$userfile_type."<br>";
}
?>

<html>
<head><title>FILE UPLOAD</title></head>
<body>
<?
if ($_POST['action'] == 'upload'){
    upload_file();
} else {
    upload_form();
}
?>
</body>
</html>
Avatar billede rzj Nybegynder
27. februar 2003 - 10:27 #11
jeg sender det til samme script med:
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo 'dine input felter her';
echo '<input type="submit" value="Upload">';

og så gør jeg:
if(isset($_POST['Upload'])){
upload_file();
}
deruodver har jeg en funktion error($msg), der udskriver $msg og exit'er så hvis der opstår en fejl så bliver filen ikke uploadet...
men upload scriptet skal du nok lige modificere en lille smule, men ellers burde det klart virke :-)
/raz
Avatar billede bukselak Nybegynder
27. februar 2003 - 10:51 #12
Har du lyst til at sende filerne til mig over bukselak@hotmail.com... Jeg er ved at få grå hår over det her....
Avatar billede bukselak Nybegynder
27. februar 2003 - 10:56 #13
Hvilke felter har du i din formular?
Avatar billede bukselak Nybegynder
27. februar 2003 - 11:30 #14
JUHUUUUUUUU!!!!! Det virker nu!?!?!?! Jeg havde ikke sat uploadmappen til CHMOD777....
Avatar billede rzj Nybegynder
27. februar 2003 - 13:00 #15
jamen det var da godt
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