file_exists ne fontionne pas..

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : file_exists ne fontionne pas..

Re: file_exists ne fontionne pas..

par macgawel » 03 sept. 2010, 15:25

Bon, j'ai trouvé, ça ne fonctionne pas en chemin absolu : http... mais ça fonctionne avec du relatif.. Ce que finalement j'avais fais au départ, mais je suppose qu'avec l'erreur idiote du $_GET j'ai cherché loin pour si peu..

Merci !
Parce que quand tu utilises l'URL absolue (http://...) php pense que c'est un fichier distant.
Du coup, pour peu qu'il y ait des bridages/sécurités, c'est refusé.
Alors qu'en utilisant un chemin relatif il voit ça comme un fichier local.

Accessoirement : il faut si possible préférer les chemins relatifs - ça évite les maintenances quand on change de nom de domaine...

Re: file_exists ne fontionne pas..

par AoSiX » 03 sept. 2010, 15:19

Bon, j'ai trouvé, ça ne fonctionne pas en chemin absolu : http... mais ça fonctionne avec du relatif.. Ce que finalement j'avais fais au départ, mais je suppose qu'avec l'erreur idiote du $_GET j'ai cherché loin pour si peu..

Merci !
Ça pourrait t'aider : http://www.ao6-labs.eu/2010/08/savoir-s ... nt-existe/

Re: file_exists ne fontionne pas..

par euhkah » 03 sept. 2010, 15:15

Bon, j'ai trouvé, ça ne fonctionne pas en chemin absolu : http... mais ça fonctionne avec du relatif.. Ce que finalement j'avais fais au départ, mais je suppose qu'avec l'erreur idiote du $_GET j'ai cherché loin pour si peu..

Merci !

Re: file_exists ne fontionne pas..

par euhkah » 03 sept. 2010, 14:35

Salut,

pour récupérer la variable preview de l'URL, tu dois utiliser $_GET["preview"] !!
Bonjour AoSIX !
Je sais oui, c'est ce que je fais regarde :
<?php
header("Content-Type: image/jpeg");
if (file_exists($_GET[preview])) { $url = $_GET[preview]; }
else { $url = "http://.../images/none.png"; }
$img_in = imagecreatefromjpeg($url) or die ("erreur");
$img_out = imagecreatetruecolor($_GET[w], $_GET[h]);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
$t = imagejpeg($img_out);
echo $t;
?>
Ca fonctionne avec :
http://.../preview.php?preview=D:\...\www\admin\photos\...\IMAGE_001.jpg&w=100&h=100
Mais pas avec :
http://.../preview.php?preview=http://.../admin/photos/.../IMAGE_001.jpg&w=100&h=100
Qui pourtant sont censés être la même chose..

Re: file_exists ne fontionne pas..

par AoSiX » 03 sept. 2010, 14:29

Salut,

pour récupérer la variable preview de l'URL, tu dois utiliser $_GET["preview"] !!

Re: file_exists ne fontionne pas..

par euhkah » 03 sept. 2010, 14:22

Bonjour.

1. $preview a quelle valeur ?

2. Tu as lu le manuel ?
Cette fonction retourne FALSE pour les fichiers non accessibles en raison des restrictions du safe mode. Cependant, ces fichiers peuvent toujours être inclus s'ils sont dans le dossier safe_mode_include_dir.
Depuis PHP 5.0.0, cette fonction peut aussi être utilisée avec quelques protocoles url.
En PHP 4, si $preview = http://www.monsite.ext/chemin/fichier ça ne fonctionne pas.
Bonjour macgawel !
1. $preview est une image, sa valeur c'est une url, qui est valide puisque lorsque je la tape seule dans le navigateur, l'image apparait.
2. J'ai lu le manuel, mais j'ai pas compris l'histoire du safemode, d'autant qu'en y retournant voir là, je vois que c'est obsolète.. Je comprends pas.. Qu'est ce que je dois/peux faire ? file_exists() retourne false pour une histoire de sécurité ?

Ps: C'est PHP5
Bonjour,

Pour ton serveur local sous windows, essaye de metre le chemin physique du fichier.

(exemple : c:/mon_dossier/mon_ficher.jpg) avec des / et non des \ qui peuvent te poser probleme avec des quotes.
Bonjour ilbee !
J'y avais pensé, mais je n'avais pas osé le faire, en mettant le chemin physique du fichier, je confirme, le file_exists fonctionne ! Mais alors pourquoi en mettant l'url non ?

EDIT: Le chemin physique, resout même le problème du redimensionnement de l'image (qui ne fonctionnait pas en partie parce que par erreur j'avais tapé $_GET[$w] au lieu de $_GET[w].. Comment puis-je faire en sorte que ça fonctionne maintenant avec une url normale ? Est-ce l'histoire du safe mode ?

Re: file_exists ne fontionne pas..

par ilbee » 03 sept. 2010, 13:19

Bonjour,

Pour ton serveur local sous windows, essaye de metre le chemin physique du fichier.

(exemple : c:/mon_dossier/mon_ficher.jpg) avec des / et non des \ qui peuvent te poser probleme avec des quotes.

Re: file_exists ne fontionne pas..

par macgawel » 03 sept. 2010, 12:35

Bonjour.

1. $preview a quelle valeur ?

2. Tu as lu le manuel ?
Cette fonction retourne FALSE pour les fichiers non accessibles en raison des restrictions du safe mode. Cependant, ces fichiers peuvent toujours être inclus s'ils sont dans le dossier safe_mode_include_dir.
Depuis PHP 5.0.0, cette fonction peut aussi être utilisée avec quelques protocoles url.
En PHP 4, si $preview = http://www.monsite.ext/chemin/fichier ça ne fonctionne pas.

file_exists ne fontionne pas..

par euhkah » 03 sept. 2010, 12:12

Bonjour ! (et merci de prendre le temps d'essayer de m'aider..)
Je viens de m'inscrire parce que j'ai réellement besoin d'aide ! Normalement, en cherchant, ou en le contournant, je trouve toujours solution à mon problème..
Sauf que cette fois-ci non !
J'ai installé sur mon PC (Windows) Apache, PHP, MySQL et phpMyAdmin, pour m'amuser un peu. L'idée de départ c'était de pouvoir partager en ligne quelques fichiers avec ma famille simplement.. Et petit à petit, pour m'occuper je m'amuse à améliorer l'interface..
Hier, en voulant rajouter de beaux icônes devant chaque nom de fichier, j'ai été emmener à utiliser le fonction file_exists(). Elle me retournait systématiquement false, même en mettant un adresse invariable genre "http://...". J'ai réussi à contourner le problème en faisant : $tmp = file(mon_fichier) puis if ($tmp[0]) ... Je ne sais pas pour quelle raison celle là il en veut bien et pas l'autre mais bon..
Ce matin, j'ai voulu afficher des thumbnails de mes photos.. J'utilise donc un fichier preview.php comme ceci :
<?php
header("Content-Type: image/jpeg");
if (!file_exists($preview)) {
	$preview="images/noimg.jpg";
}
$img_in = imagecreatefromjpeg($preview);
$img_out = imagecreatetruecolor($w, $h);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
$t = imagejpeg($img_out);
echo $t;
?>
J'ai cru au départ que peut être, la librairie GD n'était pas active mais si.. J'ai cru ensuite que ça pouvait peut être venir du register_globals, puisque j'appelle mon image en faisant :
<img src="preview.php?preview=http://..&w=..&h=.." />
J'ai donc remplacer tous les $preview $w et $h par des $_GET[preview] etc.. mais rien ne change.. En m'énervant ensuite un peu, j'ai supprimer les lignes :
header("Content-Type: image/jpeg");
if (!file_exists($preview)) {
	$preview="images/noimg.jpg";
}
Et j'ai remplacer la ligne : $img_in = imagecreatefromjpeg($preview); par : $img_in = imagecreatefromjpeg($_GET[preview]) or die ("erreur");
NB: j'ai viré le content-type pour voir ce qu'il se passait vraiment là dedans ! et j'ai tapé directement dans mon navigateur : http://.../preview.php?preview=http://..&w=..&h=..

Et là.. Erreur ! Sans parler que même avant, avec le file_exist, je retournais une nouvelle fois "false" ! Bref, le même script fonctionne chez OVH.. et sur mon server local non.. Avez-vous une idée ?