Utilizarea file_exists pentru verificarea fișierelor în directorul Uploads

2 iun. 2013, 02:08:32
Vizualizări: 32.7K
Voturi: 3

Context: Pentru imaginile unui site utilizate într-o anumită secțiune, fiecare postare se bazează pe un nume de bază stocat în meta date, care apoi este folosit cu extensii automate pentru a genera imagini mari, miniaturi pentru galerie și o miniatură pentru pagina de index.

De exemplu, dacă Example_Name este numele de bază, atunci:
Example_Name_2-LG.jpg este a doua imagine mare din serie
Example_Name_2_SM.jpg este miniatura corespunzătoare celei de-a doua imagini din galerie
Example_Name_IN.jpg este miniatura pentru index aleasă pentru a reprezenta setul

Folosind meta date și condiționale PHP, tot ce trebuie să facă clientul este să introducă numele de bază o singură dată și să încarce imaginile cu numele corespunzătoare în directorul Uploads, iar șablonul paginii completează restul.

Totul funcționează bine, cu o singură problemă. Există șapte sloturi pentru miniaturi, iar pagina afișează toate div-urile pentru miniaturi, chiar dacă există mai puțin de șapte imagini miniatură în directorul Uploads.

Aș dori să înconjor fiecare div de miniatură cu o condiție care folosește file_exists pentru a verifica existența imaginilor miniatură în directorul Uploads, astfel încât dacă imaginea numită nu există la calea de fișier indicată, div-ul gol corespunzător (și hyperlink-ul său) să nu apară.

Am încercat să construiesc căi absolute folosind funcția wp_uploads_dir, precum și bloginfo('template_directory') și chiar învechitul TEMPLATEPATH, dar am reușit doar să generez erori PHP. Presupun că aceasta este o problemă de cale sau ceva particular pe care nu îl înțeleg despre funcția PHP file_exists.

Exemplu de eroare folosind 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">  <!-- Ar trebui să apară doar când Example_Name_7_SM.jpg există -->
        ...
    </div>

<?php } ?>

Orice sugestii sunt apreciate.

1
Comentarii

Înainte de orice, ai verificat documentația PHP pentru această funcție? La fel ca Codex-ul, este o referință esențială.

brasofilo brasofilo
2 iun. 2013 03:13:20
Toate răspunsurile la întrebare 4
0

Nu poți folosi o URL de fișier în file_exists() astfel:

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

Ar trebui să folosești în schimb o cale absolută a fișierului, de exemplu:

file_exists( "/cale/absoluta/catre/wp-content/uploads/Example_Name_2_SM.jpg" );

Apoi ar trebui să încerci

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

unde

$upload_basedir = WP_CONTENT_DIR . '/uploads';

sau

$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];
2 iun. 2013 08:13:00
0

În această linie...

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

... nu dorești toate acele echo. Nu încerci să afișezi (echo) nimic. Ai chiar și echo intersperse cu concatenare de șiruri. Lasă-le pe toate afară.

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

Probabil aș verifica meta-ul postului mai devreme și aș omite apelul la file_exists dacă cheia meta este goală.

$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') 
) {
  // markup-ul tău
}
2 iun. 2013 07:56:24
0

Ar trebui să folosești __DIR__. Deci, presupunând că verifici în interiorul fișierului functions.php, ar fi:

if(file_exists(__DIR__ . '/../../uploads/Example_Name_2_SM.jpg')){
    // Fă ceva ...
}
22 mar. 2019 19:59:00
0

dacă ai nevoie pentru tema poți folosi funcția mea

function file_checker($file){
    //http://localhost/wordpress/wp-content/themes/NUMELE_TEMEI
    $location = get_template_directory_uri();// poți edita această linie <=
    $location = str_replace("http://","",$location);
    $location = str_replace("https://","",$location);
    $location = str_replace($_SERVER['HTTP_HOST'],"",$location);
    $location = $_SERVER['DOCUMENT_ROOT'].$location;
    $filename = $location.$file;
    return (file_exists($filename));

}

folosește

if(file_checker("/style.css")){
    echo "Fișierul există";
}else{
    echo "Eroare la locație, verifică codul";
}
9 iul. 2020 17:46:31