2015-05-06 10 views
6

Così sto cercando di utilizzare la funzione di rinominare in php.php rename() Accesso negato. (Codice: 5)

al primo tentativo, se la cartella di destinazione è vuota o non contiene le directory con lo stesso nome della cartella di origine la funzione di ridenominazione funziona perfettamente. Tuttavia, se c'è lo stesso nome di directory fallisce. Quello che voglio è solo sovrascriverlo e pensavo che rinominare() sarebbe sufficiente.

Ecco il mio codice:

/** 
     * Move temp folders to their permanent places 
     * 
     * $module_folder = example (violator, pnp, etc)  
     * $folders = name of folders within module_folder 
     **/ 
     public function move_temp_to_permanent($module_folder, $folders){ 
      $bool = false; 

      $module_folder_path = realpath(APPPATH . '../public/resources/temps/' . $module_folder); 

      $module_folder_destination_path = $_SERVER['DOCUMENT_ROOT'] . '/ssmis/public/resources/photos/' . $module_folder . '/'; 

      foreach($folders as $folder){ 
       $bool = rename($module_folder_path . '/' . $folder, $module_folder_destination_path . $folder); 
      } 

      return $bool; 
     } 

Il codice di cui sopra mi dà un errore che dice:

Messaggio: rename (C: \ xampp \ htdocs \ ssmis \ risorse pubbliche \ \ temps \ trasgressore/SJ-VIOL-2015-0002, C:/xampp/htdocs/ssmis// risorse/foto/trasgressore/SJ-VIOL-2015-0002 pubblico): Accesso negato. (Codice: 5)

Sto usando CodeIgniter come framework.

Grazie mille!

+3

controllare i permessi dei file. – panther

+0

Sono riuscito a usare rename() con successo come ho detto sopra. Ma quando provo ad usarlo per spostare una cartella dall'origine alla cartella di destinazione in cui c'è lo stesso nome della risorsa, allora si verifica l'errore. Devo ancora controllare le autorizzazioni dei file poiché sono stato in grado di scrivere nella directory? – iamjc015

+0

non si può avere cartelle con lo stesso nome in una directory, è necessario controllare per lo stesso nome e 'merge' il contenuto, se necessario. –

risposta

9

Se è su Windows, questo può essere leggere i contributi:

rename() sicuramente non segue la convenzione * nix rename su WinXP con PHP 5. Se esiste il $ newname, ritornerà FALSE e $ oldname e $ newname rimarranno nel loro stato originale . Si può fare qualcosa di simile a questo, invece:

function rename_win($oldfile,$newfile) { 
    if (!rename($oldfile,$newfile)) { 
     if (copy ($oldfile,$newfile)) { 
      unlink($oldfile); 
      return TRUE; 
     } 
     return FALSE; 
    } 
    return TRUE; 
} 

Link.

+0

questo è quello che ho fatto per risolvere il problema. Elimina il vecchio file. Grazie. – iamjc015

+0

Grande. Buona programmazione. – Tpojka

+0

Downvoter, spiegazione per favore. Grazie. – Tpojka

0

Si sta aggiungendo extra/in percorso rendono questo come

/** 
     * Move temp folders to their permanent places 
     * 
     * $module_folder = example (violator, pnp, etc)  
     * $folders = name of folders within module_folder 
     **/ 
     public function move_temp_to_permanent($module_folder, $folders){ 
      $bool = false; 

      $module_folder_path = realpath(APPPATH . '../public/resources/temps/' . $module_folder); 

      $module_folder_destination_path = $_SERVER['DOCUMENT_ROOT'] . '/ssmis/public/resources/photos/' . $module_folder . '/'; 

      foreach($folders as $folder){ 
       $bool = rename($module_folder_path . $folder, $module_folder_destination_path . $folder); 
      } 

      return $bool; 
     } 

si può anche eco il percorso è disposto in modo da poter controllare il proprio diritto o no

+0

Ti risponderò se questo lavoro. – iamjc015

+0

Non ha funzionato. Ho bisogno che slash per individuare la directory ... – iamjc015