0

My upload form is

<form action="accept-file.php" method="post" enctype="multipart/form-data">
Your Photo: <input type="file" name="photo" size="25" />
<input type="submit" name="submit" value="Submit" />
</form>

And accept-file.php is

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

//if they DID upload a file...
if($_FILES['photo']['name'])
{
    //if no errors...
    if(!$_FILES['photo']['error'])
    {
        //now is the time to modify the future file name and validate the file
        $new_file_name = strtolower($_FILES['photo']['tmp_name']); //rename file
        if($_FILES['photo']['size'] > (1024000)) //can't be larger than 1 MB
        {
            $valid_file = false;
            $message = 'Oops!  Your file\'s size is to large.';
        }
        
        //if the file has passed the test
        if($valid_file)
        {
            //move it to where we want it to be
            move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$new_file_name);
            $message = 'Congratulations!  Your file was accepted.';
        }
    }
    //if there is an error...
    else
    {
        //set that to be the returned message
        $message = 'Ooops!  Your upload triggered the following error:  '.$_FILES['photo']['error'];
    }
}

//you get the following information for each file:
$_FILES['field_name']['name']
$_FILES['field_name']['size']
$_FILES['field_name']['type']
$_FILES['field_name']['tmp_name']

?>

It is copied directly from a tutorial that apparently works ok. As you can see I've ever forced some error reporting at the top, but all I get when I submit the form is a blank screen (browser loads file-accept.php) and the uploaded file does not appear in uploads/ (chmoded to 777).

EDIT: I am now getting these errors:

Array ( [photo] => Array ( [name] => k3Jb9gv.jpg [type] => image/jpeg [tmp_name] => /tmp/phpzc4fLT [error] => 0 [size] => 384262 ) )

Notice: Undefined index: field_name in .............. on line 38, 39, 40, 41

10
  • You should get warnings? Commented Feb 5, 2014 at 17:35
  • have you looked in your error log just to be sure? Commented Feb 5, 2014 at 17:35
  • Have you checked what the value of $message is somewhere? Commented Feb 5, 2014 at 17:36
  • $valid_file is never initially set to true so now can you see why it wont move the uploaded file. Commented Feb 5, 2014 at 17:37
  • @putvande nope it's just a blank screen. @LiamSorsby it's a shared host so I'm not sure if I can access logs @crush I've noticed the script doesn't actually do anything with $message so I echoed it at the end, but it still does not display anything. Commented Feb 5, 2014 at 17:37

1 Answer 1

1

This line gives you the problems:

$new_file_name = strtolower($_FILES['photo']['tmp_name']);

You should change that to something else like:

$new_file_name = strtolower($_FILES['photo']['name']);

This is because otherwise you filename is the whole temporary url of your file (including directories). That will give you a warning that you are not allowed to upload it there.

Also, you need to set $valid_file to true somewhere, probably before your check for the valid file.

//if they DID upload a file...
if($_FILES['photo']['name'])
{
    print_r($_FILES);
    //if no errors...
    if(!$_FILES['photo']['error'])
    {
        $valid_file = true;
        //now is the time to modify the future file name and validate the file
        $new_file_name = strtolower($_FILES['photo']['name']); //rename file
        if($_FILES['photo']['size'] > (1024000)) //can't be larger than 1 MB
        {
            $valid_file = false;
            $message = 'Oops!  Your file\'s size is to large.';
        }

        //if the file has passed the test
        if($valid_file)
        {
            //move it to where we want it to be
            move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$new_file_name);
            $message = 'Congratulations!  Your file was accepted.';
        }
    }
    //if there is an error...
    else
    {
        //set that to be the returned message
        $message = 'Ooops!  Your upload triggered the following error:  '.$_FILES['photo']['error'];
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

Yes it is, at move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$new_file_name)
I am still just getting a blank accept-file.php page. It seems I can't even force an error by intentionally misspelling functions etc

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.