A voir également:
- Javascript : chemin relatif vers une image
- Telecharger javascript - Télécharger - Langages
- Javascript echo ✓ - Forum PHP
- Erreur #125 javascript - Forum Mozilla Firefox
- Table de multiplication javascript ✓ - Forum Javascript
- Xxwxx dll virus javascript - Forum Virus
2 réponses
La 1°) est la meilleur des solutions
tu peut aussi faire
Puis tu utilise ta variable path
tu peut aussi faire
<script type="text/javascript"> var path = <?php echo realpath(__FILE__); ?>; </script>
Puis tu utilise ta variable path
Bon, en fait
selon l'environnement sur lequel je travaille, le documentRoot (dans httpd.conf) change
En dév, il vaut C:/ProgramFiles/easyphp/www, ce qui fait que l'on accède aux applis par les urls suivantes :
http://127.0.0.1/appli1/index.php ou
http://127.0.0.1/appli2/index.php
Ce qui est pratique en dév pour travailler sur diverses applis..
En prod, pour l'appli1 hébergée sur un serveur indépendant, le documentRoot vaut C:/ProgramFiles/easyphp/www/appli1, ce qui fait que l'on accède à l'appli1 par l'url suivante :
http://127.0.0.1/index.php
Par conséquent, je ne peux pas, dans un fichier .js, marquer img.src = "/appli1/images/fond.jpg"
car le chemin pourrait etre img.src = "/images/fond.jpg" si je suis en prod...
Pour résoudre ce pb, je n'utilise plus le '/' au début de mes chemins d'accès aux images, j'essaye (!!) de passer par des urls commencant par './'
Ce qui est pratique en css, c'est que si l'on a cette arborescence :
www/images/fond.jpg
www/css/fichier.css
on peut écrire, dans le fichier.css qq chose comme
.tag {background:url('../images/fond.jpg')}
car "./" est considéré comme le répertoire du fichier css en cours de lecture
On se fiche alors de savoir si l'adresse de base du site est http://127.0.0.1 ou http://127.0.0.1/appli1 vu que l'on travaille avec des chemins relatifs au fichier css et non à partir de l'adresse de base du site..
Ce n'est apparement pas ce comportement que l'on retrouve en javascript
Pour preuve, essayez de faire ceci :
dans un .js marquez
img = new Image();
img.src = './fond.jpg';
mettez le .js, le fond.jpg et votre fichier index.php de test dans un meme répertoire, tout fonctionne. Normal.
Mettez maintenant le index.php dans un sous répertoire, faites l'include correct de votre .js (avec ../ devant donc)
L'image n'est plus trouvée (car elle est recherchée dans le sous répertoire, et non pas dans le répertoire dans lequel se trouve le .js)
Encore mieux, voici comment faire planter l'exemple 1 qui marchait bien :
ajoutez des parametre à votre url :
ainsi, si
http://127.0.0.1/index.php fonctionne
http://127.0.0.1/index.php?un/deux/trois ne marchera plus !
en effet, le .js est alors persuadé que son 'working directory' est un répertoire hypothétique nommé C:/ProgramFiles/easyphp/www/un/deux/trois
dans lequel il ne trouvera pas l'image fond.jpg
Comment s'en sortir ?
Merci pour vos idées
(en fait j'ai solutionné mon truc : je ne charge plus une image mais un div avec une classe particuliere. Dans le .css qui définit cette classe, je mets le chemin d'accès à l'image que je veux afficher en background du div, chemin qui commence par "./"
Cette solution ne me convient toutefois pas car je voudrais précharger mon image, et je ne peux faire cela qu'en javascript ! J'aimerais donc une réponse différente de celle ci)
selon l'environnement sur lequel je travaille, le documentRoot (dans httpd.conf) change
En dév, il vaut C:/ProgramFiles/easyphp/www, ce qui fait que l'on accède aux applis par les urls suivantes :
http://127.0.0.1/appli1/index.php ou
http://127.0.0.1/appli2/index.php
Ce qui est pratique en dév pour travailler sur diverses applis..
En prod, pour l'appli1 hébergée sur un serveur indépendant, le documentRoot vaut C:/ProgramFiles/easyphp/www/appli1, ce qui fait que l'on accède à l'appli1 par l'url suivante :
http://127.0.0.1/index.php
Par conséquent, je ne peux pas, dans un fichier .js, marquer img.src = "/appli1/images/fond.jpg"
car le chemin pourrait etre img.src = "/images/fond.jpg" si je suis en prod...
Pour résoudre ce pb, je n'utilise plus le '/' au début de mes chemins d'accès aux images, j'essaye (!!) de passer par des urls commencant par './'
Ce qui est pratique en css, c'est que si l'on a cette arborescence :
www/images/fond.jpg
www/css/fichier.css
on peut écrire, dans le fichier.css qq chose comme
.tag {background:url('../images/fond.jpg')}
car "./" est considéré comme le répertoire du fichier css en cours de lecture
On se fiche alors de savoir si l'adresse de base du site est http://127.0.0.1 ou http://127.0.0.1/appli1 vu que l'on travaille avec des chemins relatifs au fichier css et non à partir de l'adresse de base du site..
Ce n'est apparement pas ce comportement que l'on retrouve en javascript
Pour preuve, essayez de faire ceci :
dans un .js marquez
img = new Image();
img.src = './fond.jpg';
mettez le .js, le fond.jpg et votre fichier index.php de test dans un meme répertoire, tout fonctionne. Normal.
Mettez maintenant le index.php dans un sous répertoire, faites l'include correct de votre .js (avec ../ devant donc)
L'image n'est plus trouvée (car elle est recherchée dans le sous répertoire, et non pas dans le répertoire dans lequel se trouve le .js)
Encore mieux, voici comment faire planter l'exemple 1 qui marchait bien :
ajoutez des parametre à votre url :
ainsi, si
http://127.0.0.1/index.php fonctionne
http://127.0.0.1/index.php?un/deux/trois ne marchera plus !
en effet, le .js est alors persuadé que son 'working directory' est un répertoire hypothétique nommé C:/ProgramFiles/easyphp/www/un/deux/trois
dans lequel il ne trouvera pas l'image fond.jpg
Comment s'en sortir ?
Merci pour vos idées
(en fait j'ai solutionné mon truc : je ne charge plus une image mais un div avec une classe particuliere. Dans le .css qui définit cette classe, je mets le chemin d'accès à l'image que je veux afficher en background du div, chemin qui commence par "./"
Cette solution ne me convient toutefois pas car je voudrais précharger mon image, et je ne peux faire cela qu'en javascript ! J'aimerais donc une réponse différente de celle ci)