tyz nic
chyba trzeba wrócić do wersji z tablicą wewnątrz skryptu
w sumie jak jest jeden skrypt na dziś i jutro to tez dobre rozwiązanie
ikp-php3 napisał(a):
tyz nic
chyba trzeba wrócić do wersji z tablicą wewnątrz skryptu
w sumie jak jest jeden skrypt na dziś i jutro to tez dobre rozwiązanie
Modularność to jest potężne narzędzie, nie rezygnowałbym z niego. Przyda Ci się to w wielu innych miejscach.
Jak otwieram https://www.24ikp.pl/00dodatki/imieniny.php, to widzę pustą stronę (nie widać błędów).
Jak otwieram https://www.24ikp.pl/00dodatki/imieniny_jutro.php to widzę imieniny.
Pokażesz aktualny plik 00dodatki/imieniny.php
?
<?php
$today = new DateTime();
$tomorrow = new DateTime();
$tomorrow->modify('+1 day');
$todayNameDay = namesByNameDay($today);
$tomorrowNameDay = namesByNameDay($tomorrow);
if ($todayNameDay) {
echo "Imieniny mają $todayNameDay";
} else {
echo "Dzisiaj nie ma imienin.";
}
if ($tomorrowNameDay) {
echo "<br>Jutro imieniny mają $tomorrowNameDay";
} else {
echo "Jutro nie ma imienin.";
}
function namesByNameDay($date) {
{
$nameDays = include __DIR__ . '/imieniny_imiona.php';
$month = $date->format('n');
$day = $date->format('j');
if (array_key_exists($month, $nameDays) && array_key_exists($day, $nameDays[$month])) {
if ($nameDays[$month][$day] !== '') {
return $nameDays[$month][$day];
}
}
return null;
}
?>
a może problem nie jest w skrypcie tylko w tablicy może za prosta
ikp-php3 napisał(a):
a może problem nie jest w skrypcie tylko w tablicy może za prosta
Uruchomiłem program u siebie, dostałem błąd:
PHP Parse error: Unclosed '{' on line 22 in /home/danon/Projects/coyote/file.php on line 36
Zapewne chodzi o nadmiarowe nawiasy po funkcji.
Może powinieneś włączyć reportowanie błędów w swojej aplikacji, wtedy byś też to zobaczył?
ikp-php3 napisał(a):
wróciłem do tej ścieżki bez dira
$nameDays = include 'imieniny_imiona.php';
ale o dziwo działa też
$nameDays = include './imieniny_imiona.php';
Te dwa zapisy są ze sobą równoważne. Oba odczytają plik imieniny_imiona.php
w CWD (aktualnym roboczym katalogu).
ikp-php3 napisał(a):
dziękuję, czy to tak powinno być?
<?php # Dzień roku liczony od zera. $dnroku = intval (date ('z')); # Tablica imienin załadowanych z pliku. $kalendarz = file ('imieniny.txt'); # Dzisiejsze imieniny. $imdzis = trim ($kalendarz[$dnroku]); echo "<P>Dziś obchodzimy imieniny $imdzis.</P>"; # Ile jest dni w roku? $rok = intval (date ('Y')); $dwr = (($rok % 4 == 0 && $rok % 100 > 0) || $rok % 400 == 0) ? 366 : 365; # Jutrzejsze imieniny. if (++$dnroku >= $dwr) $dnroku = 0; $imjut = trim ($kalendarz[$dnroku]); print "<P>Jutro: $imjut.</P>"; ?>
a co do tablicy to powinny być:
$dnroku[0] = "Edwarda, Hanny, Szymona";
$dnroku[1] = "Edwarda, Hanny, Szymona";itd...
i nic poza tym?a jak rozstrzygnąć luty
czy pod wersja php5.4 będzie działało
Tak, wystarczy dodać znaczniki otaczające kod PHP. Nie musisz nic ręcznie wpisywać do tablicy, zamiast do kolejnych elementów tablicy wpisz dane do kolejnych wierszy w zewnętrznym pliku. Ta wersja skryptu używa tylko dosyć podstawowych funkcji, więc jak najbardziej zadziała w PHP5.4.
a jak rozstrzygnąć luty
Chodzi Ci o to, że 29. lutego w roku przestępnym są inne imieniny, niż byłyby tego samego dnia roku w roku zwykłym, bo byłby to 1. marca? Rzeczywiście, zapomniałem o tym. Poprawiony skrypt:
<?php
# Dzień roku liczony od zera.
$dnroku = intval (date ('z'));
# Tablica imienin załadowanych z pliku.
$kalendarz = file ('imieniny.txt');
# Ile jest dni w roku?
$rok = intval (date ('Y'));
$dwr = (($rok % 4 == 0 && $rok % 100 > 0) || $rok % 400 == 0) ? 366 : 365;
function czyjeim ($d) {
global $kalendarz, $dwr;
# Zwróć, czyje imieniny są danego dnia roku.
if ($dwr <= 365 && $d >= 59) {
# Rok nie jest przestępny oraz mamy 1. marca lub później.
++$d;
}
return trim ($kalendarz[$d]);
}
# Dzisiejsze imieniny.
$imdzis = czyjeim ($dnroku);
echo "<P>Dziś obchodzimy imieniny $imdzis.</P>";
# Jutrzejsze imieniny.
if (++$dnroku >= $dwr)
$dnroku = 0;
$imjut = czyjeim ($dnroku);
echo "<P>Jutro: $imjut.</P>";
?>