Käytössä ollut tuollainen sivu joka hakee kansioista aina uusimman kuvan, toiminut hyvin vanhassa webhotellissa, mutta uudessa ei toimi, mitä tuo vaatii toimiakseen? Jostain php asetuksistako johtuu toimimattomuus? Tuolla yritän käyttää...
https://bittivirta.cloud/webhotellit.php
<?php class ImageFilterIterator extends FilterIterator { public function accept() { if(preg_match('/^(?:gif|jpe?g|png)$/i',$this->getExtension())) { return true; } else { return false; } } } $dir_location = dirname(__FILE__)."/cam1"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam1=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam2"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam2=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam3"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam3=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam4"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam4=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam5"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam5=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam6"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam6=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam7"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam7=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam8"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam8=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam9"; $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam9=array_values($imageArr)[0][0]; $dir_location = dirname(__FILE__)."/cam10"; // $dir = new DirectoryIterator($dir_location); $imageArr = array(); foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){ if($fileInfo->isFile()){ $cTime = new DateTime(); $cTime->setTimestamp($fileInfo->getCTime()); $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename(); } } krsort($imageArr); $cam10=array_values($imageArr)[0][0]; header("Refresh: 300"); ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Uusimmat kuvat</title> <style>img {width: 65%;}</style> </head> <body> <?php echo '<a href="cam1"><img src="cam1/'.$cam1.'" alt="Kamera 1"/></a><br/>'; echo '<a href="cam2"><img src="cam2/'.$cam2.'" alt="Kamera 2"/></a><br/>'; echo '<a href="cam3"><img src="cam3/'.$cam3.'" alt="Kamera 3"/></a><br/>'; echo '<a href="cam4"><img src="cam4/'.$cam4.'" alt="Kamera 4"/></a><br/>'; echo '<a href="cam5"><img src="cam5/'.$cam5.'" alt="Kamera 5"/></a><br/>'; echo '<a href="cam6"><img src="cam6/'.$cam6.'" alt="Kamera 6"/></a><br/>'; echo '<a href="cam7"><img src="cam7/'.$cam7.'" alt="Kamera 7"/></a><br/>'; echo '<a href="cam8"><img src="cam8/'.$cam8.'" alt="Kamera 8"/></a><br/>'; echo '<a href="cam9"><img src="cam9/'.$cam9.'" alt="Kamera 9"/></a><br/>'; echo '<a href="cam10"><img src="cam10/'.$cam10.'" alt="Kamera 10"/></a>'; ?> </body> </html>
Toimii jo, kansiot puuttuivat...
Virhe löytyy lukemalla virheilmoituksia, jotka saa näkyviin yleensä näin:
Virheilmoituksessa olisi lukenut: ”Failed to open directory: No such file or directory” eli kansio puuttuu.
Hassua, että on osattu käyttää hienosti jotain iteraattoriluokkaa mutta muilta osin onkin kopioitu 10 kertaa identtinen koodinpätkä, vaikka voisi helposti käyttää silmukkaa tai funktiota. Lisäksi tuossa on aika monta turhaa kohtaa, mm. muuttujia $cTime ja $dir ei käytetä ollenkaan ja dirname(__FILE__) olisi helpommin vain __DIR__. Eli taitaa olla kopioitua koodia, joka toimii enemmänkin tuurilla kuin ajatuksella.
Koodia voisi parantaa vaikka näin:
<?php class ImageFilterIterator extends FilterIterator { public function accept(): bool { return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]); } } $images = []; foreach (range(1, 10) as $i) { $dir = __DIR__ . "/cam" . $i; [$images[$i], $ctime] = [null, 0]; foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) { if ($info->getCTime() > $ctime) { [$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()]; } } } header("Refresh: 300"); ?> <!DOCTYPE html> <html lang="fi"> <head> <meta charset="utf-8"> <title>Uusimmat kuvat</title> <style> img { width: 65%; } a { display: block; margin: 0.5rem; } </style> </head> <body> <?php foreach ($images as $i => $img) { $src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x"; echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>"; } ?> </body> </html>
Kiitos! Juu omat taidot ei riitä koodin tekemiseen, netistä löydetty pätkä josta sitten olen testailemalla copy/paste muokannut...
Friedrich Nietzsche kirjoitti:
PHP:n kuoltua näytettiin vielä vuosisatojen kuluessa hänen varjoaan eräässä luolassa – suunnatonta kaameaa varjoa. PHP on kuollut: mutta koska ihmiset ovat sellaisia kuin he ovat, voi olla vielä vuosituhansien aikana koodia, joissa näytetään sen varjoa. – Ja me – meidän täytyy voittaa vielä varjonkin.
Näin puhui Zarathustra.
Odotetaan aloittajan vastausta. Jos olet keskustelun aloittaja, kirjaudu sisään ja vastaa!