2012-05-11 151 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