rpsep2
rpsep2

Reputation: 3111

mkdir() says theres no such directory and fails?

Im likely doing something very simply wrong, but when I try to make a directory (using a variable of an insert just performed as the last folder name), I get the error:

Warning: mkdir() [function.mkdir]: No such file or directory in /home/blah/blah

with the code:

if (!is_dir("images/listing-images/rent/'.$insertID.")) {
        //make new directory with unique id
   mkdir("images/listing-images/rent/'.$insertID."); 
}

of course the directory doesn't exist.. I'm trying to make it now? confused!

Upvotes: 56

Views: 119356

Answers (8)

Diogene Kalisa
Diogene Kalisa

Reputation: 21

$path = 'd:\path\to\my\file';
mkdir($path, null, true);

This is copied from the php manual. The last argument "true" allows the creation of subfolders

Upvotes: 2

Luca Antonelli
Luca Antonelli

Reputation: 383

Probably the real error was that he forgot an extra apex.

This:

mkdir("images/listing-images/rent/'.$insertID.");

Inside:

/'.$insertID."

Correct Version:

/".$insertID

Extended Correct Version:

mkdir("images/listing-images/rent/".$insertID);

Upvotes: 0

user3410311
user3410311

Reputation: 622

in my case $insertID was generated from some data as string by concatinating

$insertID=$year.$otherId;

I simple rewrote code like this and error disappeared:

$insertID=(int)($year.$otherId);

Upvotes: 0

Ramyz
Ramyz

Reputation: 422

  • recursive Allows the creation of nested directories specified in the path name.
  • but did not work for me!! for that here is what i came up with!!
  • and it work very perfect!!

$upPath = "../uploads/RS/2014/BOI/002"; // full path
$tags = explode('/' ,$upPath); // explode the full path
$mkDir = "";

foreach($tags as $folder) {          
    $mkDir = $mkDir . $folder ."/";   // make one directory join one other for the nest directory to make
    echo '"'.$mkDir.'"<br/>';         // this will show the directory created each time
    if(!is_dir($mkDir)) {             // check if directory exist or not
      mkdir($mkDir, 0777);            // if not exist then make the directory
    }
}

Upvotes: 0

CaffeinatedDave
CaffeinatedDave

Reputation: 321

You shouldn't use is_dir() to check if something exists, you want file_exists() as well. Try:

if (file_exists("images/listing-images/rent/$insertID") {
    mkdir("images/listing-images/rent/$insertID.");
}

Have taken the '. out since it looks like a syntax error, but you might have a legitimate reason to keep it in.

If the mkdir still fails, it could be that images/listing-images/rent doesn't exist, you'll have to create that separately if so.

Upvotes: -2

John Conde
John Conde

Reputation: 219804

You have an error in your string:

mkdir("images/listing-images/rent/'.$insertID.");

should be:

mkdir("images/listing-images/rent/$insertID");

Upvotes: 11

addiedx44
addiedx44

Reputation: 2743

Assuming you're using PHP > 5.0.0, try mkdir("path", 0777, true); to enable creating directories recursively (see here: http://php.net/manual/en/function.mkdir.php).

Upvotes: 16

zerkms
zerkms

Reputation: 254886

It happens because you don't have images/listing-images/rent path existing in your filesystem.

If you want to create the whole path - just pass the 3rd argument as a true:

mkdir('images/listing-images/rent/'.$insertID, 0777, true);

There is also a chance you're in a wrong directory currently. If this is the case - you need to change the current dir with chdir() or specify the full path.

Upvotes: 139

Related Questions