getimagefile() in smarty template works randomly
P粉715274052
P粉715274052 2023-09-11 00:04:59
0
1
584

In the photo gallery template (CMSMS) I use the following code:

<ul>
{foreach from=$images item=image}
{$imagesize=getimagesize($image->file)}
<li> name : {$image->file} <em>width :</em> {$imagesize[0]}- <em>height:</em> {$imagesize[1]} </li>
{/foreach}
</ul>

Each time the gallery is loaded, the dimensions (width and height) of only some of the images are retrieved, sometimes all of them. It's completely random and not necessarily the same image. Obviously I tried different images from different sources.

I encountered the error Open Stream failed: Connection refused. Ctrl F5 gives randomly

This is a shared hosting (OVH).

I created a php file and an images directory (lots of them) in the root of the website.

<?php

function walkDir($path = null) {
    if(empty($path)) {
        $d = new DirectoryIterator('./testqdima');
    } else {
        $d = new DirectoryIterator($path);
    }

    foreach($d as $f) {
        if(
            $f->isFile() && 
            preg_match("/(\.gif|\.png|\.jpe?g)$/", $f->getFilename())
        ) {
            list($w, $h) = getimagesize($f->getPathname());
            echo "<p>".$f->getFilename() . " Dimensions: " . $w . ' ' . $h . "</p>";
        } elseif($f->isDir() && $f->getFilename() != '.' && $f->getFilename() != '..') {
            walkDir($f->getPathname());
        }
    }
}

walkDir();

?>

It works fine and all images are processed.

So if anyone has encountered this problem before...

P粉715274052
P粉715274052

reply all(1)
P粉515066518

Many hosting providers impose connection limits and/or connection rate limits (or similar) to combat DDOS attacks (or for resource allocation considerations).

For connection rate limit, it is:

Connection Rate Limit: a number that specifies the number of 
new connections accepted per second for the virtual server.

They may also employ other methods to limit the number of PHP calls/specific PHP method calls per second.

For template methods, each call to getimagesize is a separate request, and therefore may trigger throttling and result in a connection refused error

For the PHP way, it is treated as a single request, so it will pass successfully.

I think you can only resolve the issue by talking to the hosting company (but they may not entertain you as they still need to resolve possible DDOS etc.), otherwise stick with the way your PHP parses image records (or switch Go to another hosting company/use a dedicated server)

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template