question répertoire racine

Eléphanteau du PHP | 39 Messages

05 déc. 2007, 21:17

Salut à tous

je vous soumets mon problème qui je pense sera vite résolu par des pro.

Je récupère une variable "choix_livre"

je renomme un fichier jpg (image.jpg) par le nom de la variable ci-dessus

et je copie le fichier renommé dans le répertoire racine

(cela fonctionne en interne easyphp)
<?php 
$resultat = $_POST['choix_livre'];
//echo $resultat;//test de la variable
$resultat = $resultat . '.jpg';
//echo $resultat;//re-test de la variable (parano!)
$image_testee = 'image.jpg';
//$dest_dossier = 'c:/easyphp1-8/www/new_verseau/scan/';
$dest_dossier = 'scan/';
//$dest_dossier_final = 'c:/easyphp1-8/www/new_verseau/';
$dest_dossier_final = 'www/';
rename($dest_dossier . $image_testee, $dest_dossier . $resultat);
// on copie dans le répertoire racine et on écrase le fichier existant
copy($dest_dossier . $resultat, $dest_dossier_final . $resultat);
// on efface dans le répertoire /scan le fichier image.jpg
if ( file_exists( $dest_dossier . $resultat)) {
    unlink($dest_dossier . $resultat);
}	
?>
j'ai le message d'erreur suivant :

Warning: copy(www/livre_1.jpg) [function.copy]: failed to open stream: No such file or directory in resultat.php on line 53

La ligne 53 correspond bien sur à
copy($dest_dossier . $resultat, $dest_dossier_final . $resultat);
le dossier "www" est le répertoire racine du site.
je viens de vérifier il existe bien (malheureusement) le fichier "livre_1.jpg".

il existe 4 fichiers image dans la racine du site qui permettent la fondue enchainée de la page d'accueil.

je pense que c'est plus un problème de "directory" mais je ne sais plus quoi mettre à la place de "www/"

@+

Naje83

ps : le site www.le-verseau.net

ViPHP
ViPHP | 1996 Messages

05 déc. 2007, 23:31

As tu les droits d'écriture sur ce fichier ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 déc. 2007, 23:52

Quand tu donne un chemin relatif comme "dossier1/" le programme cherche le dossier dans son propre dossier en complétant automatiquement le chemin d'accès. Par contre si tu donne un chemin absolu comme "c:/dossier1/" le programme suit ce chemin sans complément.

Un chemin relatif comme "dossier1/" se différencie d'un chemin absolu comme "c:/dossier1/" par l'absence du lecteur racine par lequel le système doit commencer l'accès.
Les chemin relatifs sont complétés automatiquement à l'exécution par le chemin du programme.

Ainsi :
  • Si mon programme PHP se trouve dans le dossier : c:/machin/www/projet1/
    Et qu'on souhaite copier dans un dossier nommé : c:/machin/www/dossier1
    Et que le chemin désigné dans le programme est relatif comme "dossier1/"
    Le programme à l'exécution, cherche alors le dossier dans le chemin absolu: c:/machin/www/projet1/dossier1
Ce dossier n'existe pas vraiment dans ce chemin, le programme retourne alors une erreur similaire à celle que tu reçoit.

Mais :
  • Si mon programme PHP se trouve dans le dossier : c:/machin/www/projet1/
    Et qu'on souhaite copier dans un dossier nommé : c:/machin/www/dossier1
    Et que le chemin désigné dans le programme est absolu comme "c:/machin/www/dossier1/"
Le programme à l'exécution, cherche alors le dossier dans ce même chemin absolu: c:/machin/www/dossier1/ et ne retournera pas d'erreur si ce dossier existe.

Attention:
Les fonctions de manipulation de fichiers s'exécutent sur le serveur par le serveur (et précisément par un programme), il faut penser donc à préparer à l'avance les chemins de travail ainsi que les droits d'accès aux programmes qui lisent et écrivent dans ces chemins.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 39 Messages

06 déc. 2007, 11:02

Un grand merci cette explication (j'ai tout compris !).

Donc j'ai résolu mon problème en mettant à la place de "www/" le chemin absolu que j'ai trouvé grâce à la commande :
<?php
print  $_SERVER['DOCUMENT_ROOT'];
?>
Encore merci :lol:

@+

Naje83

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]