Aller au contenu

GD, adresses relatives et absolues


Sarc

Sujets conseillés

Bonjour,

J'utilise des fonctions qui contiennent du GD.

Par exemple :

$fichierSource = "dos1/$idv/$idq.png"; 
$source = imagecreatefrompng($fichierSource);

Ces fonctions marchent très bien si le script qui l'appelle est dans le bon dossier (c'est-à-dire dans celui qui contient dos1).

Seulement, si je me trouve dans un autre dossier, forcément l'adresse relative ne marche plus...

J'ai donc pensé à passer par de l'absolu :

$fichierSource = "/dos0/dos1/$idv/$idq.png"; 
$source = imagecreatefrompng($fichierSource);

Mais là, même si l'adresse est bonne, il me sort ça :

Warning: imagecreatefrompng(/dos0/dos1/1/1.png): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\dos0\dossier_classes\image.class.php on line 227

J'y arrive pas :( ni en absolu ni en relatif, alors comment il faut faire ?

Lien vers le commentaire
Partager sur d’autres sites

Si j'ai bien compris, sarc essaye de faire fonctionner son scrit quel que soit l'endroit dans l'arborescence d'où il est appelé.

Est-ce que ça fonctionne avec ça ? :

$fichierSource = $_SERVER['DOCUMENT_ROOT'].'/dos0/dos1/$idv/$idq.png';

Lien vers le commentaire
Partager sur d’autres sites

Tu as bien compris !

Et non, hélas ça ne marche pas non plus... Je comprends pas bien pourquoi, d'ailleurs. :/ J'ai l'impression que ces fonctions PHP ont une notion différente de l'adressage que pour le reste :hypocrite:

J'ai une méthode un peu bourrin qui consisterait à donner en paramètre de la fonction les "../" en fonction du dossier dans lequel est le script, mais c'est pas super propre quand même. :shutup:

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Autre méthode bourrin : mettre dans ta fonction une routine qui calcule toute seule le chemin entre le script que tu utilises et celui pour les images (genre compter le nombre de / dans le chemin absolu), et mettre les ../ en fonction.

Lien vers le commentaire
Partager sur d’autres sites

Le fonctions GD utilisent des chemins physiques et non des URL (hormis si tu as un wapper et utiliser la syntaxe qui va bien).

Donc, si tu utilises /dos0, ca signifie que c'est le repertoire dos0 qui se trouve a la racine de ton serveur. Est-ce que que tu veux ?

Si c'est vraiment ce que tu recherches, peut etre alors est-ce que tu es bloque par des restrictions d'acces (droits au niveau d'UNIX, restriction au niveau de php ...).

Lolo

Lien vers le commentaire
Partager sur d’autres sites

Merci de vos réponses,

J'ai opté en solution temporaire (je l'espère) pour la méthode bourrin numéro 1, étant donné que j'ai pas trop d'appels à ces fonctions, ça me pèse pas trop de rajouter un argument.

destroyedlolo, effectivement dos0 est un dossier à la racine du serveur. Je bosse en local pour l'instant, donc j'ai un truc du genre h*tp://127.0.0.1/dos0/dos1/$idv/$idq.png. L'adresse de l'image est alors bonne, si on raisonne en absolu.

Mais si les fonctions GD (ainsi que file_exist, il me semble, avec laquelle j'ai eu les mêmes soucis) bossent sur des chemins physiques, je dois mettre quoi, l'adresse en c:\easy-php\etc ? Et si je bosse sur un serveur distant, je dois également mettre une adresse absolue physique des fichiers ?

Je me perds dans ces considérations ><

Lien vers le commentaire
Partager sur d’autres sites

destroyedlolo, effectivement dos0 est un dossier à la racine du serveur. Je bosse en local pour l'instant, donc j'ai un truc du genre h*tp://127.0.0.1/dos0/dos1/$idv/$idq.png. L'adresse de l'image est alors bonne, si on raisonne en absolu.

Quant je parlais de racine du serveur, je parlais de la racine du serveur physique. Donc h*tp://127.0.0.1/ est de facto different de / pour GD.

Mais si les fonctions GD (ainsi que file_exist, il me semble, avec laquelle j'ai eu les mêmes soucis) bossent sur des chemins physiques, je dois mettre quoi, l'adresse en c:\easy-php\etc ? Et si je bosse sur un serveur distant, je dois également mettre une adresse absolue physique des fichiers ?

Ben, 2 solutions propres :

  1. si tu as un wrappeur d'installe, un
    $fichierSource = "http://dos1/$idv/$idq.png";
    $source = imagecreatefrompng($fichierSource);

    devrait fonctionner. Mais j'aime pas car ca va faire une requete sur le serveur pour rien (et vu que j'ai quasi systematiquement des actions qui modifie a la voler mes images, par exemple pour rajouter un watermark, c'est loin d'etre la solution.

  2. la solution que je prefere est l'utilisation de apache_lookup_uri() qui converti une URI (local donc) en son chemin physique. Le gros avantage par rapport a l'utilisation de $_SERVER['DOCUMENT_ROOT'] est que tu passes quant meme par apache et donc ca fonctionne avec les alias et peut etre meme les url-rewriting (j'ai pas essaie la).

Lien vers le commentaire
Partager sur d’autres sites

Destroyedlolo, merci beaucoup tu m'enlèves une épine du petit doigt de pied droit.

J'ai viré ma méthode bourrin et remplacé par les adresses physiques des images, ça devrait le faire maintenant ! (Enfin avec les tests en local, ça marche... Je verrai sur serveur distant si ça marche toujours !)

Pourquoi ils passent pas par les url, comme tout le monde ? Ca serait plus simple quand même. ><

En tout cas, problème résolu pour l'instant :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...