PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#2 Forum Général PHP » Gérer Warning: mkdir() [function.mkdir]: Permission denied » 18-01-2010 10:29:31

ProtoAstre
Réponses : 2

Bonjour

Je débute en php, et je bidouille plus que j'écris.
Bref j'ai récupéré un explorateur de fichier en php, il est génial, il s'agit de encode explorer
Le fichier index.php installé sur la racine du dossier exploré sur mon serveur 2003 géré par IIS fonctionne à merveille.

Un seul problème se pose avec "l'upload"
En fonction des droits sur les dossiers, certains utilisateurs peuvent écrire et d'autre pas.
Si j'upload un fichier dans un dossier où j'ai les droits > ça passe
Si j'upload un fichier dans un dossier où je n'ai pas les droits > ça passe pas et j'ai bien un retour avec un message d'erreur (Erreur lors du changement de dossier! avec $_ERROR = $_LANG["failed_upload"];) grace à ce code

function uploadFile($location, $userfile)
  {
    global $_CONFIG;
    global $_ERROR;
    global $_LANG;

    $name = basename($userfile['name']);
    if(get_magic_quotes_gpc())
      $name = stripslashes($name);

    $upload_dir = $location->getFullPath();
    $upload_file = $upload_dir . $name;

    if(!is_uploaded_file($userfile['tmp_name']))
    {
      $_ERROR = $_LANG["failed_upload"];
    }
    else if(!@move_uploaded_file($userfile['tmp_name'], $upload_file))
    {
      $_ERROR = $_LANG["failed_move"];
    }
    else
      chmod($upload_file, 0755);
  }
     

Donc c'est parfait, mais

Si je crée un dossier dans un dossier où j'ai les droits > ça passe
Si je crée un dossier dans un dossier où je n'ai pas les droits > ça passe pas et j'ai bien un retour avec un message d'erreur (Echec de création de dossier avec $_ERROR = $_LANG["new_dir_failed"])

mais en plus j'ai Warning: mkdir() [function.mkdir]: Permission denied in G:\services\Exploitation\public\index.php on line 841

Le code est le suivant

  function newFolder($location, $dirname)
  {
    global $_ERROR;
    global $_LANG;

    if(strlen($dirname) > 0)
    {
      $forbidden = array(".", "/", "\\");
      for($i = 0; $i < count($forbidden); $i++)
        $dirname = str_replace($forbidden[$i], "", $dirname);
      if(!mkdir($location->getDir(true, false, 0).$dirname, 0777))
        $_ERROR = $_LANG["new_dir_failed"];
      else if(!chmod($location->getDir(true, false, 0).$dirname, 0777))
        $error = $_LANG["chmod_dir_failed"];
    }
  }

J'imagine que l'on peut faire disparaitre "Warning: mkdir() [function.mkdir]: Permission denied in G:\services\Exploitation\public\index.php on line 841".
Merci pour votre aide, je suis tout ouïe !

Pied de page des forums

Propulsé par FluxBB