bonjour
j'ai un script de copie de repertoire qui tourne impec sur un espace mutualisé, mais une fois sur un dédié, il ne fonctionne pas bien, la copie du contenu du repertoire ne marche plus, voici le message d'erreur :
Warning: copy() [
function.copy]: SAFE MODE Restriction in effect. The script whose uid is 10363 is not allowed to access /var/www/vhosts/nomdisite.com/httpdocs/repbase owned by uid 48 in
/var/www/vhosts/nomdusite.com/httpdocs/administrator/class_newrep.php on line
42Warning: copy(../repbase/index.php) [
function.copy]: failed to open stream: No such file or directory in
/var/www/vhosts/nomdusite.com/httpdocs/administrator/class_newrep.php on line
42ligen 42 : copy ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier));
le safe mode est sur ON en local et OFF en général, est ce le ON en local qui empeche la copie ?
pour info la fonction mkdir et rename (création du repertoir de destination et le fait de le renommer) fonctionne, donc mon repertoire "repbase" est bien créé avant d'être renommé
disposition des fichier
root/admin/repbase
root/admin/fichierducode.php
root/la-ou-est-copié-le-repertoire
voilà le code tel qu'il est
<?php
function create_tab ($dir) { // fonction creant le tableau contenant les repertoires et fichiers
$dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire
if (is_dir ($dir)) // si c'est un repertoire
$dh = opendir ($dir); // on l'ouvre
else {
echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide
exit;
}
while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire
if ($file !== '.' && $file !== '..') { // no comment
$path =$dir.'/'.$file; // construction d'un joli chemin...
if (is_dir ($path)) { //si on tombe sur un sous-repertoire
$tableau[$dir]['dir'][] = $path;
$tabTmp = create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire
if (is_array ($tabTmp) && is_array ($tableau))
$tableau = array_merge ($tableau, $tabTmp);
}
else
$tableau[$dir]['file'][] = $path;
}
}
closedir ($dh); // on ferme le repertoire courant
if (isset ($tableau)) {
return $tableau;
}
}
function copier_rep ($destination, $reps, $tableau_dir = array ()) { // fonction pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif.
if (empty ($tableau_dir)) {
echo "";
$tableau_dir = create_tab ($reps);
}
if (!is_array ($reps)) {
$reps = array ($reps);
}
foreach ($reps as $rep) {
if (!is_dir ($destination.'/'.basename ($rep))) {
mkdir ($destination.'/'.basename ($rep),0777);
if (!empty ($tableau_dir[$rep]['file']) && isset($tableau_dir[$rep]['file']) && is_array ($tableau_dir[$rep]['file'])) {
foreach ($tableau_dir[$rep]['file'] as $fichier) {
copy ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier));
}
}
if (!empty ($tableau_dir[$rep]['dir']) && isset ($tableau_dir[$rep]['dir']) && is_array ($tableau_dir[$rep]['dir'])) {
copier_rep ($destination.'/'.basename ($rep), $tableau_dir[$rep]['dir'], $tableau_dir);
}
}
}
}
copier_rep ('..', 'repbase'); // 1er paramètre : le répertoire de destination sous forme d'une chaine
// 2d paramètre : le répertoire à copier sous forme d'une chaine ou d'un tableau //----------------------------renommer le repertoire-----------------------------
if($namerep!='')
{
$repbase = "../repbase";
$new_name = "../".$namerep;
if(!is_dir($new_name)) rename($repbase, $new_name);
?>
Merci
Laubro
