Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP-koodi ei toimi uudessa webhotellissa

pAy79 [25.08.2021 14:20:09]

#

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>

pAy79 [25.08.2021 16:19:20]

#

Toimii jo, kansiot puuttuivat...

Metabolix [25.08.2021 23:12:23]

#

Virhe löytyy lukemalla virheilmoituksia, jotka saa näkyviin yleensä näin:

<?php // Tiedoston alkuun:
ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL);

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>

pAy79 [26.08.2021 09:07:02]

#

Kiitos! Juu omat taidot ei riitä koodin tekemiseen, netistä löydetty pätkä josta sitten olen testailemalla copy/paste muokannut...

qeijo [26.08.2021 12:31:01]

#

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.

Vastaus

Odotetaan aloittajan vastausta. Jos olet keskustelun aloittaja, kirjaudu sisään ja vastaa!

Tietoa sivustosta