Chuck Le Butt
Chuck Le Butt

Reputation: 48758

PHP: move_uploaded_file() failed to open stream: No such file or directory

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.

Upvotes: 24

Views: 120946

Answers (6)

MUHINDO
MUHINDO

Reputation: 1213

Add $_SERVER['DOCUMENT_ROOT'] before the name of the destination of your file. It will add an absolute location of your project on the server so the file can be upload in the exact location that you want.

Example of code

$ext = pathinfo($file['name'], PATHINFO_EXTENSION);

$file_name = time() . "-" . rand(100000, 1000000) . "." . $ext;

$destination = $_SERVER['DOCUMENT_ROOT'].'/storage/uploads/' . $file_name;

$res = move_uploaded_file($file['tmp_name'], $destination);

Upvotes: 0

Phrankexist Bailey
Phrankexist Bailey

Reputation: 1

I think this will help you without giving you any error:

$image = $_FILES['image']['name'];
$image_temp =$_FILES['image']['tmp_name'];
$target='C:/xampp/htdocs/jer/images/'.basename($_FILES['image']['name']);
move_uploaded_file($image_temp, "$target");
insert into images (images) values ('$target');

Upvotes: 0

Wayne Lee
Wayne Lee

Reputation: 1

$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.

Upvotes: 0

Praveen Kumar Purushothaman
Praveen Kumar Purushothaman

Reputation: 167172

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.

Upvotes: 0

Elina
Elina

Reputation: 64

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;
}

Upvotes: 4

Lawrence Cherone
Lawrence Cherone

Reputation: 46602

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');

Upvotes: 45

Related Questions