PHP: move_uploaded_file() failed to open s

2020-01-28 05:44发布

问题:

I'm trying to get PHP to move an uploaded file from the tmp directory to somewhere permanent on my webserver. It seems simple enough, but I'm getting this error:

Unable to move 'C:\UniServer\tmp\php3F62.tmp' to 'static/images/slides/1/1.jpg'

Pretty straight-forward, right? It can't find the destination folder.

My question is: How do I reference the desired target directory?

Is the reference relative to the script's position on the server? Or is it relative to the URL? Or the PHP DOCUMENT_ROOT? Or the OS's filesystem? Or something else?

I can't find the answer in the PHP documentation or indeed in any of the similar questions here on SO..

Can anyone help? Thanks.

回答1:

A simple way to keep track of the path is just to define the absolute path in your index.php

define ('SITE_ROOT', realpath(dirname(__FILE__)));

Then just use it like:

move_uploaded_file($_FILES['file']['tmp_name'], SITE_ROOT.'/static/images/slides/1/1.jpg');


回答2:

I had the same problem with my uploading. See my example and maybe it can help you.

The file that I created is named "uploads".

$uploads_dir = 'uploads/';
$name = $_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{       
    //in case you want to move  the file in uploads directory
     move_uploaded_file($_FILES['userfile']['tmp_name'], $uploads_dir.$name);
     echo 'moved file to destination directory';
     exit;
}


回答3:

It is from the script's position on the server! And moreover, you need to have write permissions in this folder:

'static/images/slides/1/1.jpg'

Instead it is better to use an absolute path this way:

'C:\UniServer\***\static\images\slides\1\1.jpg

Use an absolute path.



回答4:

$destination = dirname(dirname(dirname(dirname(__FILE__))))."/runtime/tmp/";
chown($destination, 0755);
move_uploaded_file($info['tmp_name'], $destination.$info['name']);

This is my solution, I just use mkdir to create a directory to put my picture which I want to move. Wish it helps.