Je pense que realpath() est la meilleure façon de valider l'existence d'un chemin. http://www.php.net/realpath
Voici un exemple de fonction :
<?php
/**
* Checks if a folder exist and return canonicalized absolute pathname (long version)
* @param string $folder the path being checked.
* @return mixed returns the canonicalized absolute pathname on success otherwise FALSE is returned
*/
function folder_exist($folder)
{
// Get canonicalized absolute pathname
$path = realpath($folder);
// If it exist, check if it's a directory
if($path !== false AND is_dir($path))
{
// Return canonicalized absolute pathname
return $path;
}
// Path/folder does not exist
return false;
}
Version courte de la même fonction
<?php
/**
* Checks if a folder exist and return canonicalized absolute pathname (sort version)
* @param string $folder the path being checked.
* @return mixed returns the canonicalized absolute pathname on success otherwise FALSE is returned
*/
function folder_exist($folder)
{
// Get canonicalized absolute pathname
$path = realpath($folder);
// If it exist, check if it's a directory
return ($path !== false AND is_dir($path)) ? $path : false;
}
Exemples de sorties
<?php
/** CASE 1 **/
$input = '/some/path/which/does/not/exist';
var_dump($input); // string(31) "/some/path/which/does/not/exist"
$output = folder_exist($input);
var_dump($output); // bool(false)
/** CASE 2 **/
$input = '/home';
var_dump($input);
$output = folder_exist($input); // string(5) "/home"
var_dump($output); // string(5) "/home"
/** CASE 3 **/
$input = '/home/..';
var_dump($input); // string(8) "/home/.."
$output = folder_exist($input);
var_dump($output); // string(1) "/"
Utilisation
<?php
$folder = '/foo/bar';
if(FALSE !== ($path = folder_exist($folder)))
{
die('Folder ' . $path . ' already exist');
}
mkdir($folder);
// Continue do stuff
3 votes
L'opérateur booléen OR devrait être AND, et en PHP, il s'écrit &&.
16 votes
@IvoRenkema PHP prend également en charge
or
/and
en plus de||
/&&
.2 votes
Opérateur
&&
est inutile ici, car, si le fichier n'existe pas (!file_exists($dir) == true
), il est certain qu'il ne s'agit pas d'un répertoire. Et si le fichier existe,!is_dir($dir)
ne sera pas vérifié, car!file_exists($dir)
retournerafalse
y&&
L'opérateur est court-circuit .4 votes
À mon avis, l'opérateur devrait être OR.
0 votes
Avec && cela fonctionne parfaitement pour moi
0 votes
Il devrait être
if ( !file_exists( $dir ) || !is_dir( $dir) ) { mkdir($dir); }
Si vous mettez &&, ne créera pas le répertoire s'il y a un fichier avec le même nom que le répertoire.