I have developed a theme for a clients magento installation which allows manually uploaded files to be used in catalog/product/view/media.phtml. This is so I can use srcset
to load higher resolution images.
The code uses file_exists()
to see if the imagery has been uploaded before displaying a placeholder if nothing is present.
As soon as I turn enable the caches, the file_exists()
function returns false and my placeholder is shown. If I disable the caches, the correct images return.
I have tried using relative paths as well as getcwd()
and $_SERVER['DOCUMENT_ROOT']
to no avail. I have tried the same code with is_file()
and is_readable()
to no avail.
I have output the calculated path within the cached template to verify that the path it has generated is correct.
The only thing stopping the images from loading is enabling the caches which shaves 2 seconds off the load time so is definitely desirable.
Am I missing something or is this a bug?
Magento CE 1.9.1.0
PHP 5.4
Code:
<?php
$_product = $this->getProduct();
$_helper = $this->helper('catalog/output');
$images = $this->getGalleryImages();
$tehurl = $_product->getProductUrl();
$suburl = substr($tehurl, strrpos($tehurl, "/") + 1);
$suburl = str_replace("-", "", $suburl);
?>
<div class="product-image-gallery">
<?php if (file_exists($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png")) { ?>
<div class="productslider">
<div class="view">
<ul>
<?php for ($x = 0; $x <= 2; $x++) { ?>
<li><img src="/assets/front/saleimg/productview/tp-1x/<?php echo $suburl."-".$x; ?>.png" srcset="/assets/front/saleimg/productview/tp-2x/<?php echo $suburl."-".$x; ?>.png 2x" /></li>
<?php } ?>
</ul>
</div>
</div>
<?php
}
elseif (file_exists($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/".$suburl.".jpg")) {
?>
<img src="/assets/front/saleimg/productview/<?php echo $suburl; ?>.jpg" srcset="/assets/front/saleimg/productview/<?php echo $suburl; ?>-2x.jpg 2x" />
<?php
}
elseif (count($images) > 0) {
$i = 0;
foreach ($this->getGalleryImages() as $_image):
if ($this->isGalleryImageVisible($_image)):
?>
<img id="image-<?php echo $i; ?>" src="<?php echo $this->getGalleryImageUrl($_image); ?>" />
<?php
endif;
$i++;
endforeach;
}
else {
?>
<!-- <?php
var_dump($_SERVER['DOCUMENT_ROOT']);
var_dump($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png");
$lame = $_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png";
var_dump(file_exists($lame));
var_dump(file_exists($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png"));
var_dump(is_file($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png"));
var_dump(is_readable($_SERVER['DOCUMENT_ROOT']."/assets/front/saleimg/productview/tp-1x/".$suburl."-0.png"));
?> -->
<img src="/assets/front/saleimg/placeholders/productbottles.png" />
<?php } ?>
</div>
<?php echo $this->getChildHtml('after');
file_exists
logic please? Ideally the whole block and related models.Mage::getBaseDir()
to get the base magento directory?$_SERVER['DOCUMENT_ROOT']
so I know the path going in tofile_exists()
is correct, it just returns false (edit: the code works perfectly when cache is disabled, it only stops working because of the cache)