web-dev-qa-db-fra.com

Utilisation de file_exists pour vérifier le fichier dans les téléchargements

Contexte: pour les images d'un site utilisées dans une section particulière, chaque publication s'appuie sur un nom de base placé dans des métadonnées, qui est ensuite utilisé avec des extensions automatiques pour générer de grandes images, des images miniatures de la galerie et une vignette de page d'index.

Par exemple, si Example_Name est le nom de base, alors:
Example_Name_2-LG.jpg est la deuxième grande image de la série
Example_Name_2_SM.jpg est la deuxième image miniature de la galerie correspondante.
Example_Name_IN.jpg est la vignette d'index choisie pour représenter l'ensemble.

En utilisant les métadonnées et les conditions PHP, tout ce que le client doit faire est de mettre le nom de base une fois, puis de télécharger les images nommées de manière appropriée dans le dossier Uploads et le modèle de page remplit les espaces.

Tout cela fonctionne bien, avec une prise. Il y a sept emplacements pour les vignettes et la page affiche tous des div vignettes, même s'il y a moins de sept images vignettes dans le dossier Uploads.

Je voudrais emballer chaque div miniature avec une condition qui utilise file_exists pour vérifier l'existence d'images miniatures réellement dans le dossier Uploads, de sorte que si l'image nommée n'existe pas dans le chemin du fichier indiqué, le div vide correspondant ( et son hyperlien) n'apparaîtront pas.

J'ai essayé de construire des chemins absolus à l'aide de la fonction wp_uploads_dir, ainsi que de bloginfo('template_directory') et même de la version obsolète TEMPLATEPATH, mais je n'ai réussi qu'à générer des erreurs PHP. Je suppose que c'est un problème de chemin ou quelque chose de particulier que je ne comprends pas à propos de la fonction PHP file_exists.

Exemple d’agrandissement de page utilisant wp_upload_dir:

<?php 
    $upload_dir = wp_upload_dir(); 
    if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg') ) {
?>
    <div id="thumb7" class="thumb">  <!-- Should appear only when Example_Name_7_SM.jpg exists -->
        ...
    </div>

<?php } ?>

Toutes les suggestions appréciées.

1
boomturn

Vous ne pouvez pas utiliser une URL de fichierin file_exists() comme ceci:

file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );

Vous devriez plutôt utiliser un chemin de fichier absolute , par exemple:

file_exists( "/absolute/path/to/wp-content/uploads/Example_Name_2_SM.jpg" );

Alors tu devrais essayer

$meta = get_post_meta( $post->ID, '_meta_example_name', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
   //...
}

$upload_basedir = WP_CONTENT_DIR . '/uploads';

ou

$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];
2
birgire

Dans cette ligne ...

if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )

... vous ne voulez pas tous ces echos. Vous n'essayez pas de echo quoi que ce soit. Vous avez même echos entrecoupé de concaténation de chaînes. Laissez tous ceux dehors.

if ( 
  file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg') 
)

Cependant, je vérifierais probablement la publication de la méta plus tôt et passerais l'appel à file_exists si la clé méta est vide.

$upload_dir = wp_upload_dir();
$meta_name = get_post_meta($post->ID,'_meta_example_name',true);
if (
  !empty($meta_name)
  && file_exists( $upload_dir['baseurl'].'/'.$meta_name.'_7_SM.jpg') 
) {
  // your markup
}
1
s_ha_dum

Vous devriez utiliser __DIR__. En supposant que vous vérifiiez à l'intérieur du fichier functions.php, ce serait:

if(file_exists(__DIR__ . '/../../uploads/Example_Name_2_SM.jpg')){
    // Do something ...
}
0
Max