2012-05-11 147 views
0

我試圖在PDF存在的情況下將縮略圖鏈接到相同名稱的PDF,但如果PDF不存在則不鏈接到任何內容。這裏是我的代碼:無法讓PHP file_exists正常工作

<?php 
if (function_exists('has_post_thumbnail') && has_post_thumbnail()) { 
$full_image_url = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full') ; 
$pdf = substr_replace($full_image_url , 'pdf', strrpos($full_image_url[0] , '.') +1); 

$filename = $pdf[0]; 
if (file_exists($filename)) { 
echo '<a href="' . $pdf[0] . '" title="' . the_title_attribute('echo=0') . '" . target="_blank" >'; 
the_post_thumbnail('Full Size'); 
echo '</a>'; 
    } 
else { 
echo "The file $filename exists"; 
    } 
} 
?> 

目前,else語句僅僅是爲了證明它是否找到文件。它似乎是,因爲它顯示The file http://localhost/AWAD/wp-content/uploads/2012/03/+D.pdf exists。如果我擺脫了條件,發佈的縮略圖會顯示一個指向PDF的鏈接。我無法獲得有條件工作。

任何人都可以發現它爲什麼不起作用嗎?

+1

'$ pdf [0]'的內容是什麼? PDF與您的PHP腳本的位置有關的位置是什麼? – Mischa

回答

1

我敢肯定file_exists想要一個完整的文件路徑,而不是URL。因此,您可能需要使用WordPress wp_uploads_dir函數獲取上傳目錄的基本路徑,然後將剩餘路徑附加到該目錄的末尾,然後將該字符串傳遞給file_exists。希望這是有道理的。

+0

好吧,所以我試過'$ uploads = wp_upload_dir();$ filename =($ uploads ['path']。'/'。basename($ pdf [0]));'else語句現在輸出文件路徑「文件/ Applications/MAMP/htdocs/AWAD/wp- content/uploads/2012/05/+ D.pdf存在「。問題是,它在03文件夾中。如何獲取原始縮略圖的文件夾? – sharcupine

+0

好吧,所以這工作(儘管它看起來應該比它更復雜一點,所以如果有人有更好的方法,我很樂意聽到它):'$ filename =($ uploads ['basedir']''。 /'。basename(dirname(dirname($ pdf [0])))。'/'。basename(dirname($ pdf [0]))。'/'。basename($ pdf [0]));' – sharcupine

+0

這看起來有點笨拙。經過一番研究,看起來您可能需要'get_attached_file'函數。它可能會更清潔,但我沒有用過它,所以我不能肯定地說。查看codex:http://codex.wordpress.org/Function_Reference/get_attached_file –

4

你應該在你的FS傳遞路徑file_exists,你傳遞一個URL現在

+0

此外,根據環境,一旦代碼被糾正爲接收文件系統路徑,請注意PHP安全模式可能會對每個文檔的結果產生負面影響。 http://php.net/manual/en/function.file-exists.php – Eli

+0

謝謝。我只是需要它拼出更多一點。 – sharcupine