FILE_EXISTS()与timthhum.php兼容吗?

时间:2011-11-08 作者:Ben

我正在使用最新的timthumb脚本生成我的帖子缩略图,并将其与摘录一起包含在内。虽然我只想在缩略图文件实际存在时加载缩略图,否则我甚至不想加载图像占位符。

我将在多用户网络上使用它,该网络仍处于开发的早期阶段。我想测试帖子作者是否忽略了正确添加“thumb”自定义字段,如果有,通常会返回404 not found错误。

因此,我将以下代码放入循环中,首先确定帖子是否有任何图像,然后使用帖子中列出的第一个图像的文件路径检查文件是否存在。

<?php
$content = $post->post_content;
$searchimages = \'~<img [^>]* />~\';
preg_match_all($searchimages, $content, $pics);
$iNumberOfPics = count($pics[0]);
if($iNumberOfPics > 0){
    $blogTemplate = get_bloginfo(\'template_directory\');
    $imgSrc = get_post_meta($post->ID, "thumb", $single = true);
    $imgSrc = $blogTemplate . "/scripts/timthumb.php?src=" . $imgSrc . "&w=300&zc=1";

    if(file_exists($imgSrc)){ ?>
        <a href="<?php the_permalink(); ?>" class="thumb" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><img src="<?php echo $imgSrc; ?>" alt="<?php the_title(); ?>" /></a><?php              
    }
}
?>
我已经测试了输出的$imgSrc字符串,该字符串是有效的,它是一个现有文件,尽管my file\\u exists($imgSrc)函数总是返回false。我想知道timthumb脚本是否与file\\u exists()函数兼容?

2 个回复
最合适的回答,由SO网友:Ben 整理而成

文件_exists();并且是可读的();(我决定改为使用它,因为它检测文件是否可读以及是否存在)两者都需要$\\u服务器[\'DOCUMENT\\u ROOT\'];当文件物理存储在文件服务器的HDD上时调用的变量,因此无需在函数中声明域名。这样做:

is_readable($_SERVER[\'DOCUMENT_ROOT\'].\'/\'.preg_replace(\'/(https?:\\/\\/)?(www\\.)?+(example\\.com)\\/?/\',\'\',$imgSrc);
无需编写任何特殊的apache代码。

SO网友:Kevin Langley Jr.

file\\u exists()函数是内置的php函数,应该可以在任何地方使用。但你这样做是错误的。不能在php文件中使用查询字符串来检查文件是否存在。仅仅因为它是一个有效链接,并不意味着文件\\u存在()。服务器上没有名为/scripts/timthumb的文件。php?src公司=*

您需要对代码执行以下操作:

<?php
$content = $post->post_content;
$searchimages = \'~<img [^>]* />~\';
preg_match_all($searchimages, $content, $pics);
$iNumberOfPics = count($pics[0]);
if($iNumberOfPics > 0){
    $blogTemplate = get_bloginfo(\'template_directory\');
    $imgSrc = get_post_meta($post->ID, "thumb", $single = true);

    if(file_exists($imgSrc)){ 
    $imgSrc = $blogTemplate . "/scripts/timthumb.php?src=" . $imgSrc . "&w=300&zc=1";
    ?>
        <a href="<?php the_permalink(); ?>" class="thumb" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><img src="<?php echo $imgSrc; ?>" alt="<?php the_title(); ?>" /></a><?php              
    }
}
?>
这样,您实际上是在检查真实的文件名,然后在知道文件存在后,将url更改为查询字符串url。

结束

相关推荐

Count within foreach loop

如何在foreach循环中回显计数?我想更改下面div的类,使其成为menu-button-1、menu-button-2等: <?php $pages = get_children(array(\'orderby\' => \'menu_order\', \'order\' => \'asc\')); foreach($pages as $post) { setup_postdata($post); $fields = get_fields();