Autor Zpráva
H107
Profil
Zdravím,
mám stránku, na ktorej java script v pravidelnom intervale aktualizuje obrázok zasielaný z IP kamery cez FTP na server. Link na obrázok pre java script zabezpečuje samostatné php z dôvodu, že kamera vie posielať len obrázky vždy s iným názvom (v tvare: číslo-kamery(názov-kamery)_X_RRRRMMDDHHMMSS_poradové-číslo.jpg).

Chcel by som, aby sa pod zobrazovaným obrázkom zobrazoval aj časový údaj jeho vytvorenia, resp. stačila by aj časť názvu (RRRRMMDDHHMMSS).

Tu sú kódy:

java

<script type="text/javascript">
refreshImage = function(){
img = document.getElementById("K1");
img.src="kamera-1.php?rand=" + Math.random();
}
window.onload=window.setInterval(refreshImage, 1*1000);
</script>
<style>
.rotate180 {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
</style>
</head>
<body>
<div class="rotate180">
<img id="K1" src="kamera-1.php" alt="kamera-1" />
</div>
</body>

kamera-1.php

<?php 
if ($handle=opendir('./kamera-1/')) { 
while ($file = readdir($handle)) 
{ 
$polozky[count($polozky)] = $file; 
} 
closedir($handle); 
sort($polozky); 
$i = sizeof($polozky); 
$link= 'kamera-1/'.$polozky[$i-2]; 
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: ".$link); 
exit(); 
} 
reset($polozky); 
?>


Celé som to poskladal podľa rôznych návodov z netu, som v tejto oblasti laik a preto píšem sem. Vedel by mi niekto poradiť?

Vďaka.
Keeehi
Profil
Tak předně jsem to php trochu učesal. Navíc není potřeba všechny soubory načíst do pole a to řadit (což je náročnější operace) ale při průchodu složkou stačí najít maximum.
<?php
$path = 'kamera-1/';

// function deleteOld($file) {
//     preg_match('~_(\d{10})_\d+\.jpg~', $file, $matches);
//     $time = (int) $matches[1];
//     $now = (int) date('YmdHis')
//     
//     if ($time < $now - 60) {
//         unlink($file);
//     }
// }

if ($dir = opendir('./' . $path)) { 
    $file = "";
    while(($currentFile = readdir($dir)) !== false) {
        if ( $currentFile === '.' || $currentFile === '..' ) {
            continue;
        }
        
        if (empty($file)) {
            $file = $currentFile;
            continue;
        }
        
        if (strcmp($currentFile, $file) > 0) {
            // deleteOld($path . $file);
            $file = $currentFile;
            // continue;
        }
        
        // deleteOld($path . $currentFile);
    }
    closedir($dir);
    
    echo $path . $file;
}
Doporučil bych mazat staré soubory, protože jinak ten script bude stále pomalejší a pomalejší. Jednoduché řešení jsem přímo přidal do scriptu. Stačí odkomentovat co je zakomentováno. Jak staré soubory se mají mazat (momentálně starší než minutu) se určuje na řádce 9.

Co se týče skriptu, bylo třeba to celé předělat. Problém je, že nejde zjistit, na jakou URL se přesměruje. Takže se na to jde jinak. AJAXem se zavolá ten PHP skript, ten vrátí jméno souboru javascriptu a ten už si sám zajistí změnu src na potřebnou hodnotu. Jelikož zná jméno souboru, může si z něj vytáhnout i tu časovou známku.
<html>
    <head>
        <style>
            .rotate180 {
                -webkit-transform: rotate(180deg);
                -moz-transform: rotate(180deg);
                -o-transform: rotate(180deg);
                -ms-transform: rotate(180deg);
                transform: rotate(180deg);
            }
        </style>
    </head>
    <body>
        <div class="rotate180">
            <img id="K1" alt="kamera-1" />
        </div>
        <div id="time"></div>
        
        <script type="text/javascript">
            (function (w, d) {
                var img = d.getElementById('K1');
                var time = d.getElementById('time');
                var re = /_(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})_\d+\.jpg/;
                
                var zeroTrim = function (v) {
                    return v.replace(/^0+/, '');
                }
                
                var refreshImage = function () {
                    var xhr = new XMLHttpRequest();
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4) {
                            img.src = xhr.responseText;
                            var found = xhr.responseText.match(re);
                            time.innerHTML = zeroTrim(found[3]) + '. ' + zeroTrim(found[2]) + '. ' + zeroTrim(found[1]) + ' ' + zeroTrim(found[4]) + ':' + found[5] + ':' + found[6];
                        }
                    }
                    xhr.open('GET', 'kamera-1.php?rand=' + Date.now());
                    xhr.send();
                };
                
                w.setInterval(refreshImage, 1 * 1000);
                refreshImage();
            })(window, document);
        </script>
    </body>
</html>

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: