2016-05-07 19 views
1

Ich versuche, Bilder für WP-Posts abzurufen, die in einem Wp-uploads-Verzeichnis mit if (file_exists() gehalten werden, aber es erkennt den Dateipfad nicht.Warum gibt file_exists() false zurück?

Für jeden Beitrag stehen bis zu 8 Bilder zur Verfügung. Jedes Bild hat die Buchstaben a-g am Ende des Dateinamens (oder nichts) und hat str_replace, um bestimmte Zeichen in den Dateinamen zu ersetzen.

Ich muss jedes Bild zeigen, wenn es existiert, und wenn nicht, nichts zurückgeben. Wenn also der Post am Ende mit Bildern mit b, d und f verbunden ist, werden nur diese drei angezeigt.

Ich habe ohne die (file_exists()) getestet und es ist in der Lage, die Bilder mit einem einfachen Echo für jeden abholen - aber es scheint die $img Pfade werden nicht erkannt.

Im ein bisschen ein PHP-Noob so würde jede Hilfe ... Sie beginnen

$uid = get_post_meta (get_the_ID(), 'Unique number', true); 
$root ="/wp-content/uploads/2016/Collection/"; 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$img = $root.$path.".jpg"; 
$imga = $root.$path."a.jpg"; 
$imgb = $root.$path."b.jpg"; 
$imgc = $root.$path."c.jpg"; 
$imgd = $root.$path."d.jpg"; 
$imge = $root.$path."e.jpg"; 
$imgf = $root.$path."f.jpg"; 
$imgg = $root.$path."g.jpg"; 

if (file_exists($img)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; } 
if (file_exists($imga)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; } 
if (file_exists($imgb)) { echo "<img src='".$root.$path."b.jpg' />"; } else { echo ""; } 
if (file_exists($imgc)) { echo "<img src='".$root.$path."c.jpg' />"; } else { echo ""; } 
if (file_exists($imgd)) { echo "<img src='".$root.$path."d.jpg' />"; } else { echo ""; } 
if (file_exists($imge)) { echo "<img src='".$root.$path."e.jpg' />"; } else { echo ""; } 
if (file_exists($imgf)) { echo "<img src='".$root.$path."f.jpg' />"; } else { echo ""; } 
if (file_exists($imgg)) { echo "<img src='".$root.$path."g.jpg' />"; } else { echo ""; }` 

Antwort

1

Sie benötigen, wie Sie PHP sagen neu anordnen zu sehen, die Adresse,

$root ist wahrscheinlich nicht die absolute Dateipfad root (wahrscheinlich absolut Bedeutung) verwenden, um stattdessen das spezielle Super-Variable für diese, $_SERVER['DOCUMENT_ROOT'], die die Wurzel des Web zugänglich filepath ist daher haben Sie dann:

$img = $_SERVER['DOCUMENT_ROOT'].$root.path.".jpg" 
//while retaining your current/at the start of $root 

Dies ist die Dateistruktur Prüfung ist, wenn die Datei vorhanden ist, nicht die Dateistruktur, auf die in der <img>-Tag verweisen, scheint das in Ihren Beispielen oben korrekt zu sein.

Also, Ihre allgemeine Korrektur sollte wie folgt aussehen:

$root ="/wp-content/uploads/2016/Collection/"; 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$img = $root.$path.".jpg"; 
... 
if (file_exists($_SERVER['DOCUMENT_ROOT'].$img)){ 
.... 
} 

Ein weiterer Hinweis ist, dass die Ergebnisse dieser Funktion werden gecached so sollten Sie clearstatcache() am Anfang dieser Datei aufrufen, so dass es kann überprüfen, ob die Bilder vorhanden sind. Momentan, ohne dass das Bild vorhanden ist, verwendet PHP die Cached-Past-Ergebnisse, die möglicherweise nicht aktuell sind.

+0

Ja, Sie müssen den vollständigen oder absoluten Dateipfad verwenden. Wenn dies nicht funktioniert, stellen Sie sicher, dass es nur funktioniert, wenn [allow_url_fopen] (http://php.net/filesystem.configuration#ini.allow-url-fopen) ist in Ihrer PHP-Konfiguration aktiviert. –

+0

'$ _SERVER ['DOCUMENT_ROOT']' löste das Problem für mich - danke. – Aitch

1

geschätzt werden $root mit einem /, beginnend es daher aus dem Stammverzeichnis des Servers. Entfernen Sie die erste / und versuchen Sie es erneut.

+0

Dies ist zwar * a * Lösung, es ist nicht die beste Lösung ist, weil es die sehr breite Annahme macht, dass der Dateipfad zu dem Bild ist ein Kind des PHP-Skript ausgeführt wird, so dass, wenn das PHP-Skript befindet sich In einem Ordner '/ wp-content/admin /' zum Beispiel findet diese Lösung die mit '$ root' angegebene Datei nicht. – Martin

+0

Sie haben Recht, aber ich hatte nicht alle Informationen, also vermutete ich, dass das Dokumentenstammwort die Wurzel von WordPress war. – Manhim

0
$uid = get_post_meta (get_the_ID(), 'Unique number', true); 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$uploads = wp_upload_dir(); 

Get-Stammverzeichnis.

$root = $uploads['path']; 
$imgDir = $root.$path.".jpg"; 

if (file_exists($imgDir)){ 
....... 
} 
+0

was macht das? Warum funktioniert das? – Martin

+0

Überprüfen Sie aus C: \ development \ xampp \ htdocs \ beispiel.com/content/uploads/2016/05 –

+0

Vielleicht fügen Sie diese Daten in Ihre Antwort, um Ihre Antwort nützlicher zu machen – Martin

Verwandte Themen