Page 1 of 1

[php] small problem upload script

Posted: Mon Jan 04, 2010 1:33 pm
by arbitter

Code: Select all

<?php
$images = array('image/gif','image/jpeg','image/jpg','image/pjpeg');
 
if( in_array($_FILES['file']['type'],$images) && $_FILES['file']['size'] <= 10000000 )
{
    if( $_FILES['file']['error'] > 0 )
    {
        echo 'Return Code: ',$_FILES['file']['error'],'</br >';
    }
    else
    {
        echo 'Upload: ',$_FILES['file']['name'],'<br />';
        echo 'Type: ',$_FILES['file']['type'],'<br />';
        echo 'Size: ',($_FILES['file']['size'] / 1024),'KB</br >';
        echo 'Temp File: ',$_FILES['file']['tmp_name'],'<br />';
        
        $uploaddir = date("F")." '".date("y");
        
        if( file_exists('uploads/'. $uploaddir . '/' . $_FILES['file']['name']) )
        {
            function findexts ($_FILES) 
            { 
                $filename = strtolower($_FILES) ; 
                $exts = split("[/\\.]", $filename) ; 
                $n = count($exts)-1; 
                $exts = $exts[$n]; 
                return $exts; 
            } 
            $ext = findexts ($_FILES['file']['tmp_name']) ; 
            $ran = date(dmY);
            $target= "uploads/";
                if(file_exists($target . $uploaddir))
                {   $target2 = $target . $uploaddir . "/" . $_FILES['file']['name']; 
                }
                else
                {   mkdir($target . $uploaddir);
                    $target2 = $target . $uploaddir . "/" . $_FILES['file']['name'];
                }
                    
            $target3 = $target2 . $ran . $ext;
            move_uploaded_file($_FILES['file']['tmp_name'], $target3); 
            
        }
        else
        {   if(file_exists("uploads/" . $uploaddir))
                {   $target="uploads/" . $uploaddir; 
                }
                else
                {   mkdir("uploads/" . $uploaddir);
                    $target="uploads/" . $uploaddir;
                }
            move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'. $uploaddir . '/' . $_FILES['file']['name']); 
            
            
        }
    }
}
else
{
    echo 'Ongeldig bestand.';
    echo 'Kijk grootte en type na.';
} 
 ?>
Uploading a file that doesn't exist yet works perfect, but uploading a file that already exists does not work... I get:
Fatal error: Cannot use string offset as an array in C:\xampp\htdocs\Depypere\uploader.php on line 34

line 34 contains "$target2 = $target . $uploaddir . "/" . $_FILES['file']['name']; "
I don't understand why it doesn't work.. I've checked and rewritten everything 10 times...
Some help here would be very appreciated.

Re: [php] small problem upload script

Posted: Wed Jan 06, 2010 6:50 am
by arbitter
Nevermind, other forum helped me :)
Now my script has also been debugged; this is the result:

Code: Select all

 <?php
$images = array('image/gif','image/jpeg','image/jpg','image/pjpeg');
    if(in_array($_FILES['file']['type'],$images) && $_FILES['file']['size'] <= 10000000 ) {
        if( $_FILES['file']['error'] > 0 ) {
            echo 'Return Code: ' . $_FILES['file']['error'] . '<br / >';
        }
        else {
            echo '<b>File:</b> ',$_FILES['file']['name'],'<br />';
            echo '<b>Type: </b>',$_FILES['file']['type'],'<br />';
            echo '<b>Size: </b>',($_FILES['file']['size'] / 1024),'KB</br >';
            $upload_dir = 'uploads/' . date("F") . " '" . date("y") . '/';
            $upload_file = pathinfo($_FILES['file']['name'],PATHINFO_FILENAME);
            $upload_file .= '-' . intval(microtime(TRUE));
            $upload_file .= '.';
            $upload_file .= pathinfo($_FILES['file']['name'],PATHINFO_EXTENSION);
            if(!file_exists($upload_dir)) {
                mkdir($upload_dir);
            }
            $target = $upload_dir . $upload_file; 
            move_uploaded_file($_FILES['file']['tmp_name'],$target); 
            echo '<font color=green><b>File saved in ' . date("F") . " '" . date("y") . '</b></font>';
        }
    }
    else {
        echo 'Wrong file type';
    } 
?>