Vérifier si le fichier existe avant de les afficher dans Magento PHP?
Je suis en mesure d'obtenir sur le web chemin d'accès au fichier de la sorte:
$filename = 'elephant.jpg';
$path_to_file = $this->getSkinUrl('manufacturertab');
$full_path = $path_to_file . '/' . $filename;
Mais si le fichier n'existe pas, puis je me retrouve avec une fracture de la lien de l'image.
J'ai essayé ceci:
if(!file_exists($full_path)) {
Mage::log('File doesn\'t exist.');
} else {
?><img src="<?php echo $full_path ?>" /><?php
}
Bien sûr, cela ne fonctionne pas parce que file_exists
ne fonctionne pas sur les url.
Comment puis-je résoudre ce problème?
1.)
Puis-je traduire entre les chemins d'accès et url de sites web sous Magento?
par exemple, quelque chose comme (pseudo-code):
$system_path = $this->getSystemPath('manufacturertab');
Qui ressemble symétrique et portable.
ou
2.)
Est-il un PHP ou Magento fonction de vérification de la ressource distante existence? Mais cela semble un gaspillage, car la ressource est vraiment local. Il serait stupide de PHP pour utiliser une méthode http à vérifier un fichier local, ne serait-il pas?
Solution que j'utilise actuellement:
$system_path = Mage::getBaseDir('skin') . '/frontend/default/mytheme/manufacturertab'; //portable, but not pretty
$file_path = $system_path . '/' . $filename;
Je vérifie si file_exists
et si il le fait, je l'affichage de la img
. Mais je n'aime pas l'asymétrie entre le fait d'avoir à coder en dur une partie du chemin d'accès pour le chemin d'accès au système, et à l'aide d'une méthode pour le chemin de l'url. Il serait agréable d'avoir une méthode pour les deux.
Vous devez vous connecter pour publier un commentaire.
Fonction
sera de retour le même chemin que
mais sur votre système de fichiers local. Vous pouvez omettre le "_default' => false paramètre et il va stil travail (je l'ai laissé là juste parce que getSkinUrl définit aussi en interne).
Notez que le paramètre de getSkinUrl et getFilename peut être soit un fichier ou un répertoire, mais vous devriez toujours utiliser le chemin d'accès complet (avec le nom de fichier), de sorte que le mécanisme de secours fonctionne correctement.
Compte de la situation
skin/default/default/manufacturertab/a.jpg
skin/yourtheme/default/manufacturertab/b.jpg
Dans ce cas, l'appel à getSkinUrl ou getFilename renvoie le chemin d'accès à a.jpg et b.jpg dans les deux cas, si le nom de fichier est fourni en paramètre, mais pour votre cas où vous n'définir le nom du dossier, il serait de retour la peau/votretheme/default/manufacturertab/pour les deux cas, et lorsque vous fixez le nom de fichier et vérifier a.jpg la vérification de l'échec. C'est pourquoi vous shold toujours fournir le chemin d'accès complet en tant que paramètre.
Vous devrez toujours utiliser votre propre fonction pour vérifier si le fichier existe que getFilename fonction retourne le chemin d'accès par défaut si le fichier n'existe pas (les retours skin/default/default/manufacturertab/foo.jpg si manufacturertab/foo.jpg n'existe pas).
$filename
, mais où pourrais-je obtenir ce chemin d'accès complet?$file_path = $this->getSkinUrl( 'manufacturertab' ) . '/' . $filename;
mais au lieu de cela, vous devez écrire$file_path = $this->getSkinUrl( 'manufacturertab/' . filename );
car cela permet getSkinUrl fonction non seulement de vérifier si un dossier mais également si le fichier existe. Il en va de même pour getFilename fonction. Notez que le chemin n'a pas changé, la seule chose qui a changé, c'est que vous concaténer le nom et le chemin relatif à partir de la peau de dossier avant ou après l'appel de la fonction.- il m'aider:
vous pouvez utiliser
vous pouvez également utiliser curl ou essayez ce lien http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Mage::getBaseDir()
est ce que vous me demandez. Pour votre scénario,getSkinBaseDir()
effectuera un meilleur travail.Noter que pour la
<img src>
vous aurez besoin de l'adresse, et non pas le chemin d'accès système. ...is_file()
, plutôt que defile_exists()
, dans ce cas, peut être une bonne option si vous êtes sûr que vous êtes la vérification d'un fichier, pas un dir.Vous pouvez utiliser les éléments suivants:
Travaillé pour moi quand j'essaie de vérifier si une image existe sur l'URL