[RESOLU] File_exists ne fonctionne plus

Eléphant du PHP | 386 Messages

07 avr. 2013, 03:59

Bonjour,

J'utilise file_exists pour vérifier que l'avatar existe, sinon j'affiche un avatar par défaut.
Et ça ne fonctionne plus.

J'ai plusieurs includes qui ont besoins de cette condition, mais déjà j'aimerais savoir pourquoi ça ne fonctionne pas sur la page d'accueil.
Voilà ci-dessous le code de l'accueil de mon site.

Explication du pb : Pour afficher l'image, chaque avatar est renommé de cette façon : "http://www.monsite.fr/img/upload/'.$_SESSION['id'].'-mini.png"
Normalement la variable $adresse_image indique l'avatar par défaut selon le sexe.

Le problème c'est que ça affiche pour un membre ayant l'id "3" qui n'a pas d'avatar :
"http://www.monsite.fr/img/upload/3-mini.png" : Image qui n'existe pas normalement, donc il devrait afficher le chemin de la variable $adresse_image.
J'ai pourtant vérifié tous mes chemins, urls etc..., pas de problème de ce côté là.

Merci pour vos messages ;)
<?php
session_start();
require('include/functions.inc.php');

$pseudo_membre = $_SESSION['pseudo'];
$req = $connect->prepare('SELECT id, pseudo, nom, prenom, sexe FROM wa_communaute WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo_membre));
$result = $req->fetch();
$_SESSION['rang'] = $result['rang'];
$filename = ''.$_SERVER['DOCUMENT_ROOT'].'/img/upload/'.$result['id'].'mini.png';
$filecover = ''.$_SERVER['DOCUMENT_ROOT'].'/img/upload/'.$result['id'].'-cover.png';
$adresse_image = $result['sexe'] == 1 ? ''.$url_site.'/img/upload/homme.png' : ''.$url_site.'/img/upload/femme.png';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<?php if(isset($_SESSION['pseudo'])) : ?><title>Web Astronomie</title><?php else: ?><title>Web Astronomie | Le réseau social de l'astronomie</title><?php endif; ?> 
	<meta name="description" content="Web Astronomie vous permet de publier vos articles, photos... avec vos amis et les internautes du site. Inscrivez-vous dès maintenant !" />
	<?php include('include/head.inc.php'); ?> 
	<script type="text/javascript" src="js/P4zqPx67.js"></script>
	<link rel="stylesheet" href="css/slider/slider.css" />
	<link rel="stylesheet" href="css/slider/themes.css" />
</head>
<body>
	<div id="header" class="fixed">
		<div class="container">
<?php include('include/header.inc.php'); ?> 
		</div>
	</div>
	<div id="content">		
		<div class="container">
			<noscript><div class="alert-error"><p><b>Javascript est désactivé </b>| Le site ne fonctionne pas correctement, activez Javascript dans votre navigateur.</p></div></noscript>
			<?php if(!isset($_SESSION['pseudo'])) : ?> 
			<div class="bloc-data home-slider">
				<div class="slider-wrapper theme-default slider-load">
					<div id="slider" class="nivoSlider">
						<img src="css/slider/img1.jpg" alt="" /><img src="css/slider/img3.jpg" alt="" data-transition="slideInLeft" />
						<img src="css/slider/img2.jpg" alt="" /><img src="css/slider/img4.jpg" alt="" />
						<img src="css/slider/img5.jpg" alt="" /><img src="css/slider/img6.jpg" alt="" />
					</div>
				</div>
			</div>
			<script type="text/javascript">J(window).load(function(){ J('#slider').nivoSlider({ animSpeed:500,effect: 'random',startSlide:0,directionNav: false,controlNav: false,pauseOnHover:false }); });</script>
			<?php endif; ?>
			<div id="rightCol" class="float-r">
<?php include('include/right.inc.php'); ?> 
			</div>
			<?php if(isset($_SESSION['pseudo'])) : ?> 
			<div id="contentArea" class="float-l">
				<?php if (file_exists($filecover)) : ?> 
				<div id="profileSection">
					<div id="profileCover">
						<div class="cover">
							<div class="coverImage">
								<a href="" id="coverLink" style="min-height: 120px;">
									<div id="loader-cover" class="loading" style="top: 30%"></div>
									<div class="coverBorder"></div>
								</a>
								<script type="text/javascript">J(function(){ J('.loading').show();var img = new Image();J(img).load(function(){J(this).hide();J('#loader-cover').removeClass('loading').append(this);J(this).show();}).error(function(){}).attr('src', '../img/upload/<?php echo $result['id']; ?>-cover.png'); });</script>
							</div>
						</div>
					</div>
				</div>
				<?php endif; ?> 
			</div>
			<div id="leftCol" class="float-l">
				<div class="bloc-data">
					<div class="bloc-title">
						<h1>Mon compte</h1>
						<h2>Vous êtes connecté en tant que :</h2>
					</div>
					<div class="bloc-content">
						<?php if(file_exists($filename)){ ?> 
						<a href="/<?php echo $result['pseudo']; ?>" class="name-avatar mrg-bot8">
							<img src="img/upload/<?php echo $result['id']; ?>mini.png" class="dropsubAvatar float-l" width="40" height="40" alt="" />
							<p class="name-account"><?php echo $result['prenom']; ?><br /><?php echo $result['nom']; ?></p>
						</a>
						<?php } else { ?>
						<a href="/<?php echo $result['pseudo']; ?>" class="name-avatar mrg-bot8">
							<img src="<?php echo $adresse_image; ?>" class="dropsubAvatar float-l" width="40" height="40" alt="" />
							<p class="name-account"><?php echo $result['prenom']; ?><br /><?php echo $result['nom']; ?></p>
						</a>
						<?php } ?>
						<?php if($_SESSION['rang'] == 'admin') { ?>
							<a href="" id="rang6" title="Administrateur"></a>
						<?php } else { ?>
							<a href="" id="rang1" title="Touriste spatial"></a>
						<?php } ?>
					</div>
				</div>
<?php include('include/left.inc.php'); ?> 
			</div>
			<div id="page-tabs">
				<ul id="tabs">
					<li id="yes" class="selected active">
						<div></div>
						<a href="#tab1" class="tabs"><img src="../img/statut.png" height="16" width="16" class="img-tabs" alt="" /><b>Statut</b></a>
						<span class="top-statut" id="top-statut1"></span>
					</li>
					<li id="no" class="last no-active">
						<div></div>
						<a href="#tab2" class="tabs"><img src="../img/photo.png" height="16" width="16" class="img-tabs" alt="" /><b>&nbsp;Ajouter des photos/vidéos</b></a>
						<div class="last"></div>
						<span class="top-statut" id="top-statut2"></span>
					</li>
				</ul>
				<span class="float-r load-refresh" style="display: none;">
					<img src="img/loading0.gif" alt="" style="margin-right: 5px;">
				</span>
			</div>
			<div id="content-userArea" class="float-l">
				<div class="bloc-data">
					<div id="tab1" class="tab_content" style="display: block;">
						<div class="form-data">
							<form action="http://www.web-astronomie.fr" onsubmit="return check();" method="post" id="form">
								<textarea class="mur" id="elastic" name="poster" placeholder="Quoi de neuf ?"></textarea>
								<script type="text/javascript">
									window.addEvent('domready', function() {
										new DynamicTextarea('elastic');
									});
								</script>
								<div class="subform">
									<label class="uiButton uiButtonlogin uiButtonloginConfirm" id="wa_45">
										<input type="submit" value="Publier" class="submit-login" />
									</label>
								</div>
							</form>
						</div>
					</div>
					<div id="tab2" class="tab_content tab-media">
						<div class="tab-mediaContent">
							<table class="tabGrid" cellspacing="0" cellpadding="0">
								<tr>
									<td class="tabPrs">
										<div class="tabGridItem">
											<a class="tabLink" rel="ignore">
												<div class="tabTitle">Télécharger des photos</div>
											</a>
										</div>
									</td>
									<td class="tabPls">
										<div class="tabGridItem">
											<a class="tabLink" href="#" rel="async-post">
												<div class="tabTitle">Ajouter une vidéo</div>
											</a>
										</div>
									</td>
								</tr>
							</table>
						</div>
					</div>
				</div>
				<div id="mur-principal">
					<ul>
<?php include('include/mur.inc.php'); ?> 
					</ul>
				</div>
			</div>
			<?php else: ?> 
			<div id="contentArea" class="float-l">
				<div class="bloc-data">
					<div class="bloc-title">
						<h1>Bienvenue sur Web Astronomie</h1>
						<h2>Réseau social consacré à l'astronomie</h2>
					</div>
					<div class="bloc-content">
						<p class="mrg-bot8 line-h18">Web Astronomie, un réseau social <b>100% Astronomie</b> pour les débutants, passionnés et professionnels.<br />
						<span class="tabulation">
							<br />•> Créez et publiez des articles et actualités, et partagez-les avec d'autres membres du site.
							<br />•> Utilisez des outils indispensables pour pratiquer l'astronomie.
							<br />•> Partagez vos photos et observations et participez à des concours<br />
						</span>
						<br />Et bien d'autres fonctionnalités présentes et à venir...<br /><br />Sans plus attendre, cliquez sur l'icône <span id="home-imgFriends"></span> en haut à droite et <b>inscrivez-vous</b>.<br />
						<br />Bon surf !<br />L'équipe de WA.</p>
					</div>
				</div>
				<div class="bloc-data float-l" style="width:318px;">
					<div class="bloc-title">
						<h1>Articles à la Une</h1>
						<h2>Retrouvez les articles les plus récents</h2>
					</div>
					<div class="bloc-content">
						<p class="size11 mrg-bot8">Aucun article pour l'instant</p>
					</div>
				</div>
				<div class="bloc-data float-r" style="width:318px;">
					<div class="bloc-title">
						<h1>Fil d'actualités</h1>
						<h2>Liste des actualités récentes</h2>
					</div>
					<div class="bloc-content">
						<p class="size11 mrg-bot8">Aucune actualité pour l'instant</p>
					</div>
				</div>
			</div>
			<?php endif; ?> 
		</div>
	</div>
</body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 avr. 2013, 16:16

Au pif il te manquerait pas un - dans le $filename ?

Il est important de savoir ce que contiennent les variables que l'on utilise donc, lorsque l'on debogue, utiliser massivement var_dump ou un IDE et un debuggeur (comme éclipse + xdebug).
En un pont d'arrêt tu aurais pu voir que le chemin n'est pas bon et que file_exists fonctionne correctement ;)
(Généralement c'est pas le langage qui déconne :mrgreen: )

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

07 avr. 2013, 21:53

Même avec le code dessous :
$filename = ''.$_SERVER['DOCUMENT_ROOT'].'/img/upload/'.$result['id'].'-mini.png';
Ça ne fonctionne toujours pas :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 avr. 2013, 22:43

pas la peine de mettre ''. au début de la chaine.
<?php
$filename = $_SERVER['DOCUMENT_ROOT'].'/img/upload/'.$result['id'].'-mini.png'
que donne un var_dump($filename); ?

si file_exists retourne false c'est que le chemin qui lui est fournit n'est pas un fichier ou n'est pas un fichier accessible.

as tu regarder les droits du fichiers ?(666 par exemple).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

07 avr. 2013, 23:08

Alors je me connecte au membre qui a l'id : 3

Et le var_dump renvois : string(63) "/var/www/sites/webastronomiea/public_html/img/upload/1-mini.png"

Je précise que le membre qui a l'id : 3 n'a pas uploadé d'avatar

Je comprend pas, parce que ça devrait être 3-mini.png le fichier, et en plus il doit être introuvable donc la variable $adresse_image doit fonctionner :(

Le plus bizarre, c'est que ça fonctionne pour la liste des membres avec avatar ou celui par défaut :
<?php
								$req1 = $connect->query('SELECT id, pseudo, nom, prenom, sexe FROM wa_communaute ORDER BY id DESC LIMIT 10');
								while($result1 = $req1->fetch()){
									$adresse_image = $result['sexe'] == 1 ? ''.$url_site.'/img/upload/homme.png' : ''.$url_site.'/img/upload/femme.png';
									$filename = ''.$_SERVER["DOCUMENT_ROOT"].'/img/upload/'.$result1['id'].'-mini.png';
									if(file_exists($filename)){ ?> 
									<li>
										<a href="/<?php echo $result1['pseudo']; ?>" class="tooltip">
										<img src="<?php echo $url_site; ?>/img/upload/<?php echo $result1['id']; ?>-mini.png" width="28" height="28" alt="" />
										<span class="tooltip"><span class="arrow"></span><span class="tip"><?php echo htmlentities(ucfirst($result1['prenom'])); ?> <?php echo htmlentities(ucfirst($result1['nom'])); ?></span></span>
										</a>
									</li>
									<?php } else { ?> 
									<li>
										<a href="/<?php echo $result1['pseudo']; ?>" class="tooltip">
										<img src="<?php echo $adresse_image; ?>" width="28" height="28" alt="" />
										<span class="tooltip"><span class="arrow"></span><span class="tip"><?php echo htmlentities(ucfirst($result1['prenom'])); ?> <?php echo htmlentities(ucfirst($result1['nom'])); ?></span></span>
										</a>
									</li>
								<?php } } $req1->closeCursor; ?> 

Eléphant du PHP | 386 Messages

07 avr. 2013, 23:30

J'ai a peu près résolu mon problème :

J'ai des includes qui cherchent aussi si le fichier existe.
En changeant le nom de la variable $filename1 pour un file_exists, ça fonctionne.

Il y'aurai pas autre chose pour garder une seule variable $filename, et la réutiliser dans es includes sans que ça interfère des requêtes ou autre ?
Ou alors à moins que ça viens de closeCursor qui ferme tout et que je peux l'utiliser qu'une fois ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 avr. 2013, 11:25

quand tu inclus un fichier c'est comme si le code était dans le fichier donc si la variable à le même nom elle sera utilisée partout pareil.

si cette info est unique tu peux la stocker en session, cela t'évitera aussi de recalculer la chose à chaque affichage (tu test si elle existe, si oui tu fait rien, si non tu recréer le fichier).

Attention tu ne pourras pas aafficher l'image avec un lien comme ça, le navigateur web ne connais que l'url et toi tu donne le chemin absolue sur le serveur (dans le système de fichier).

ce qu'il te faut c'est juste le /upload/truc.mini.extension


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

08 avr. 2013, 19:56

Pourtant ça ne fonctionne pas avec la même variable :?
C'est pour ça que c'est bizarre.

Je pense stocker l'info en session, ça sera peut-être plus fonctionnel. Sinon pour afficher l'image, j'utilise bien l'url en variable et non le code <img>

Merci pour l'info, c'est résolu ;)