![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 25.01.2018 Ostrzeżenie: (0%) ![]() ![]() |
Witam, posiadam stronę na której wstawiony jest link do pliku PDF, zainstalowany Adobe Reader umożliwia bezpośrednie otwarcie, a raczej wyświetlenie tego pliku na stronie.
Problem stanowi część odpowiedzialna za wyświetlanie, mianowicie w chwili zmiany na serwerze pliku na nowszy o tej samej nazwie, po automatycznym odświeżeniu nadal wyświetla poprzednią wersję dokumentu, rozumie że plik ten jest przechowywany w pamieci przeglądarki, niestety charakter tej strony i jej wyświetlania nie pozwala na takie zjawisko podczas przeglądania. Co zrobic aby ten plik był nadpisywany w przeglądarkach, lub najlepiej nie był przechowywany, lub tylko do czasu odświeżenia tej strony (co 4 min). Szukałem jakiegoś skryptu który automatycznie by kasował pamięć podręczną wybrane strony ale nie znalazłem. w kodzie strony jest jeszcze część która sprawdza kiedy ten plik był modyfikowany. I to sprawdzanie atrybutów dziala bardzo dobrze. Czy ktoś może miał podobny problem? poniżej kod str głównej, i przykładowy kod jednej ze stron .. testowo ustawiono poprawność linków dla plików 01.pdf oraz 02.pdf. index.php Kod <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>v1 grafik</title> </head> <body> <p> <div id='menu'> <?php $sciezka = "grafik"; $lista=array(); $katalog = opendir($sciezka); while ($plik = strtolower(readdir($katalog))) { if ($plik<>"." && $plik<>"..") if(!is_dir($sciezka.$plik)) $lista[]=$plik; } closedir($katalog); sort($lista); for ($i=0;$i<count($lista);$i++) { echo "  <a href=\"index.php?id=$lista[$i]\">$lista[$i]</a>"; } ?> </div> <div id='content'> <?php switch($_GET['id']){ case '01.pdf': include 'niekasowac/01.php'; break; case '02.pdf': include 'niekasowac/02.php'; break; default: echo 'Taka strona nie istnieje'; break; } ?> </div> </p> </body> </html> pliki pdf w podkatalogu 'grafik' a strony do wyswietlania plików w nim zawartych (z nazwami od 01 do 12.pdf) w katalogu 'niekasowac' przykładowy plik 01.php Kod <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <!-- <meta http-equiv="refresh" content="13" /> ustawienie CZASU odswierzania w sekundach w html --> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" /> <meta http-equiv="content-language" content="pl"> <meta name="description" content="Grafik Pracy" /> <meta name="keywords" content="operator maszyn grafik" /> <meta name="author" content="Sza+aniK" /> <title>..:: GRAFIK :: PRACY :.: OPERATOR :: MASZYN ::..</title> </head> <body bgcolor="#4B66A5" text="white" style="margin-top:0cm" marginheight="0"> <p> <table style="width: 100%;" > <tbody> <tr> <td style="width: 20%;"><h3><div style="color:#FFFFFF;">01 Data ostatniej modyfikacji: </div></h3></td> <td style="width: 25%;"> <div style="color:#FFFFFF;"><b><h2> <?php //Definiujemy nazw_ pliku, wraz z jej sciezka $name = "./grafik/01.pdf"; function getModTime($file) { $time = filemtime($file); $date = date("\n d.m.Y \n, \g\o\d\z. \n H:i", $time); echo "\n<h1>" . $date; } //Kod wy_wietlaj_cy zawarto__ funkcji getModTime($name); ?> </h2></b> </div> </td> <td style="width: 25%;"> <p style="text-align:center; color:#99CCFF;"> uaktual. za: <span id="sekundy"></span> <script type="text/javascript"> o = document.getElementById('sekundy') function odliczaj(o,sek) { o.innerHTML=sek if(sek > 0) { set = setTimeout(function(){odliczaj(o,--sek)},1e3) } if (sek == 0) { div = document.getElementById('hide'); div.style.display = 'block'; } } odliczaj(document.getElementById('sekundy'), 240) </script> sek.</p> </td> <td style="width: 30%; style="color: #ffffff;"> <h1> <?php //Deklaracja funkcji function ost_mod($file) { $name = "./grafik/01.pdf"; // pobranie unixowej daty ostatniej modyfikacji pliku $time = filemtime($name); // obliczenie ile sekund minelo od ostatniej modyfikacji do teraz $roznica_czas = time() - $time; // Jezeli roznica jest mniejsza niz 3600 sekund (godzina) if ($roznica_czas < 3600) { // Jezeli roznica jest mniejsza niz 120 sekund (2 minuty) if ($roznica_czas < 120) { $komunikat = "<font color=#FFEE22><b> 1 minute temu.</b></font> "; } // Jezeli roznica jest wieksza niz 120 sekund else { $komunikat = intval($roznica_czas / 60) . "<font color=#FFCC55><b> minut(y) temu.</b></font>"; } } // Jezeli roznica jest mniejsza niz 7200 sekund (2 godziny) else if ($roznica_czas < 7200) { $komunikat = "1 godzine\n" .intval(($roznica_czas -3600) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 10800 sekund (3 godziny) else if ($roznica_czas < 10800) { $komunikat = "2 godziny\n" .intval(($roznica_czas -7200) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 14400 sekund (4 godziny) else if ($roznica_czas < 14400) { $komunikat = "3 godziny\n" .intval(($roznica_czas -10800) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 18000 sekund (5 godzin) else if ($roznica_czas < 18000) { $komunikat = "4 godziny\n" .intval(($roznica_czas -14400) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 21600 sekund (6 godzin) else if ($roznica_czas < 21600) { $komunikat = "5 godzin\n" .intval(($roznica_czas -18000) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 25200 sekund (7 godzin) else if ($roznica_czas < 25200) { $komunikat = "6 godzin\n" .intval(($roznica_czas -21600) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 28800 sekund (2 godziny) else if ($roznica_czas < 28800) { $komunikat = "7 godzin\n" .intval(($roznica_czas -25200) / 60) . " minut temu."; } // Jezeli roznica jest mniejsza niz 86400 sekund (jedna doba) else if ($roznica_czas < 86400) { $komunikat = intval($roznica_czas / 3600) . " godziny temu."; } // Jezeli roznica jest mniejsza niz 172800 sekund (2 doby) else if ($roznica_czas < 172800) { $komunikat = "1 dzien temu."; } // Jezeli roznica jest mniejsza niz 604800 sekund (1 tydzien) else if ($roznica_czas < 604800) { $komunikat = intval($roznica_czas / 86400) . " dni temu."; } // Jezeli roznica jest mniejsza niz 1209600 sekund (2 tygodnie) else if ($roznica_czas < 1209600) { $komunikat = "1 tydzen temu."; } // Jezeli roznica nie miesci sie w powyzszych warunkach else { $komunikat = "ponad 2 tygodnie temu"; } return "<em>zmiana:</em>\n " .$komunikat; } // wywolanie funkcji echo ost_mod(""); ?> </h1> </td> </tr> </tbody> </table> <!-- <embed src="../grafik/01.pdf" width="100%" height="600" /> --> <?php echo "<iframe src=\"./grafik/01.pdf\" width=\"100%\" style=\"height:100%\"></iframe>"; header('refresh: 13;'); ?> // testowo odswierzanie co 13 sek </p> </body> </html> może jest jakiś lepszy sposób/biblioteka umożliwiający wyświetlanie pdf/xdoc w php. Szukałem ale nie znalazłem lepszego rozwiązania. Ważne aby po aktualizacji plików pdf były wyświetlane caly czas tylko aktualne, nie zachowane w pamieci, ręczne kasowanie pamięci podręcznej co kilka min odpada. Udało mi się rozwiązać problem, poprzez wykorzystanie na serwerze php modułu mod_expires.c który testowo w programie XAMPP aktywować dla Apache. w pliku .htaccess w katalogu głównym umieściłem kod: Kod <ifmodule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 235 seconds" ExpiresByType text/html "access plus 600 seconds" ExpiresByType image/gif "access plus 2678400 seconds" ExpiresByType image/jpeg "access plus 3600 seconds" ExpiresByType image/png "access plus 3600 seconds" ExpiresByType text/css "access plus 600 seconds" ExpiresByType text/javascript "access plus 3600 seconds" ExpiresByType application/x-javascript "access plus 400 seconds" ExpiresByType application/pdf "access plus 20 seconds" </ifmodule> ExpiresByType application/pdf "access plus 20 seconds" - wpisy dokonały tego co potrzebuję ExpiresDefault "access plus 235 seconds" po określonym czasie pliki pdf tracą swą ważność w wyniku czego kasowane są z pamięci przeglądarki a w ich miejsce pobierane nowe/ponownie pliki z serwera. no niestety nikt nie pomógł ale być może moje doświadczenia i rozwiązania komuś się przydadzą Gdyby ktoś chciał wiedzieć do czego te strony są potrzebne - na dysku NAS firmy Synologic uruchomiony jest serwer PHP, do katalogu dla serwera php umieszczane są pliki w formacie PDF w folderze 'grafik' , odpowiednio dla danego miesiąca : styczeń '01.pdf', luty to '02.pdf' itd. W plikach tych są zapiski aktualnych i przyszłych prac w firmie , serwisowania maszyn itp. Osoba odpowiedzialna za dopilnowanie grafiku prac może utworzyć plik na maj 05.pdf, oraz z wyprzedzeniem na czerwiec itp. I pojawią sie do wyboru tylko dostępne miesiące dla ramki div menu. Odpowiedni kod sprawdza po stronie serwera czy plik jak w przykładzie maj został zmodyfikowany i kiedy to nastąpiło, w ten sposób osoby odczytujace prace na dany miesiąc po otwarciu strony z serwera NAS wiedzą czy jakieś zmiany zaszły. Co prawda strona nie est dopracowana do końca, są potrzebne poprawki, może jakieś style CSS . Ale już działa poprawnie i wg wytycznych zaplanowanych: 1. strona główna wyświetla w górnym menu tylko dostępne pliki dla danego miesiąca (nie więcej niż 4 w ciągu roku. 2. podczas zmiany plików na serwerze NAS/ ich edycji aktualizacji nie może dochodzić do blokowania edycji ze względu na otwarcie plikow przez jeden z komputerów w sieci - sytuacja taka miała miejsce gdy pliki były przeglądane (z prawem tylko do odczytu) z dołączonego dysku sieciowego. 3. strona ma się samoczynnie aktualizować i wyświetlane pliki PDF osadzone w stronie co określony przedział czasu 4. pliki PDF po odświeżeniu muszą być zawsze aktualne - problem w sytuacji wyświetlania plików z pamięci przeglądarki starszych niż pliki na serwerze. zamykam temat ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.05.2025 - 21:58 |