Nie dzia

Konfiguracja serwerów, usług, itp.
goska_23
Beginner
Posty: 277
Rejestracja: 04 września 2007, 13:40
Lokalizacja: Katowice

Nie działa funkcja ,,filemtime'' na stronie www Debiana

Post autor: goska_23 »

Mam problem z funkcją 'filemtime' z php na mojej stronie testowej na Debianie Lenny.
PHP niby działa (chodzą stronki w CMSach opartych o php), ale jak próbuję dopisać własne kody np. 'filemtime' wyświetlający datę modyfikacji określonego pliku znajdującego się w katalogu strony to nie działa.
Dla pewności przetestowałam to co potrzebuję na testowej stronie Debiana - na stronie tej są tylko 2 pliki index.php, którego zawartość pokazuję i plik tekstowy Wersja_prog1.txt, którego datę modyfikacji chciałabym wyświetlać na stronie za pomocą funkcji "filemtime".


Zawartość pliku index.php:

Kod: Zaznacz cały

<html><body bgcolor="skyblue" text="mediumblue">
<h1>It works!</br>WITAMY !</br>

TEST TEST
<?php
echo 'A Test php';
echo "B Test php1";
echo filemtime('http://192.168.0.88/scctest1/Wersja_prog1.txt') or die('Podany plik nie istnieje'); 
?>
</body>
</html>
Wynik tego kodu po otwarciu stronki testowej:

Kod: Zaznacz cały

It works!
WITAMY !
TEST TEST A Test phpB test php1
Warning: filemtime() [function.filemtime]: stat failed for http://192.168.0.88/scctest1/Wersja_prog1.txt in /var/www/scctest1/index.php on line 13
Podany plik nie istnieje
Na Debianie mam serwer stron www +php + mysql.

Kod: Zaznacz cały

Apache Version 	Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch
Szukałam w tym temacie w google ale na razie nic właściwego nie wygrzebałam, mam trochę mało doświadczenia z php i nie umiem się doszukać co mam nie tak ustawione w php, że ta funkcja mi nie działa?

Może ktoś ma więcej doswiadczenia i coś poradzi?

Uzupełnienie:
Może problem jest również ze ścieżką bezwzględną do pliku, dałam jeszcze tak:

index.php:

Kod: Zaznacz cały

TEST TEST
<?php
echo 'A Test php ';
echo "B test php1 ";
echo "----XXXXX-----";
echo filemtime('Wersja_prog1.txt') or die('Podany plik nie istnieje'); 
?>
teraz ten plik w przeglądarce wyświetla się taK:

Kod: Zaznacz cały

TEST TEST A Test php B test php1 ----XXXXX-----1
Wyskakuje mi teraz cyfra '1' zamiast daty modyfikacji mojego pliku lub informacji, że nie istnieje.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

W tej funkcji podajesz względną bądź bezwzględną ścieżkę do pliku względem wykonującego skryptu, a nie adres po http. Funkcja zwraca uniksowy timestamp więc jeśli chcesz coś mieć po ludzku to musisz wynik przepuścić przez jakąs funkcję formatującą (np date() ). Sprawdz czy w ogole masz uprawnienia do czytania tego pliku przez php (apache)
goska_23
Beginner
Posty: 277
Rejestracja: 04 września 2007, 13:40
Lokalizacja: Katowice

Post autor: goska_23 »

Bastian, chodziło o to:

Kod: Zaznacz cały

/var/www/mojastronka1/wp-content/files/Software/Wersja_prog1.txt
Zadziałało przy ścieżce bezwzględnej.

Czytałam, że funkcja działa po stronie serwera i próbowałam ze ścieżką względną (taka sama jak przy adresie http) ale nie działało i w sumie zwątpiłam o co chodzi, próbowałam różnych wersji kodu php i nic nie działało tak, że w końcu zapytałam gdzie "błądzę" na forum.
Wielkie dzięki Bastian.

Problem jest jednak jeszcze taki, że z innego fizycznie serwera linuxa z inną stroną chcę sprawdzić datę modyfikacji tego pliku .txt i pliku .exe na tym serwerze debiana. Skoro ścieżkę trzeba wpisać bezwzględną w "postaci" jak po stronie serwera a nie adres http to ten kod php się nie nadaje w tym przypadku.

Próbowałam w przypadku tego drugiego serwera z kodem javascript, ale to co znalazłam jest dobre tylko dla pliku .txt, w przypadku pliku .exe nie wpisuje mi się linijka z datą modyfikacji pliku tylko jak otwieram podstronę z tym kodem to próbuje mi pobrać ten plik .exe.

Ten kod javascript znalazłam w sieci i przetestowałam na pliku Wersja_prog1.txt - działa znakomicie, tylko jak zmienię na plik .exe to jest problem.
Wpiszę ten kod, może ktoś ma pomysł jak można zmodyfikować żeby działało dla pliku Prog1.exe (tę datę modyfikacji trzeba sprawdzać w pliku Prog1.exe na zdalnym serwerze poprzez http).

Kod javascript:

Kod: Zaznacz cały

<html>
<head>
<title>Last Modified</title>
<script type="text/javascript">
function getLastMod()
{
    var myFrm = document.getElementById('myIframe');    
var lastModif = new Date(myFrm.contentWindow.document.lastModified);    
document.getElementById('LastModified').innerHTML = "Plik Prog1.exe zmodyfikowano: " + lastModif.toLocaleString();
}
</script>
</head>
<body>
<span id="LastModified"></span>
<iframe id="myIframe" onload="getLastMod()" src="[URL]http://www.mojastronka1/wp-content/files/Software/Prog1.exe[/URL]" style="display:none;">
</iframe>
</body>
</html>
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Z plikiem binarnym (*.exe) tego nie zrobisz, bo przeglądarka nie wczyta ci takiego pliku. Nie wiem na ile znasz się na Javascripcie, ale ten powyższy kod bazuje na ładowaniu pliku do iframe przeglądarki (czyli pliku, który przeglądarka jest wstanie obsłużyć) i pobranie jczasu modyfikacji jego treści. Działa to w ten sposób bo inaczej działać nie może. Nie mam pomysłu jak rozwiązać Twój problem w sposób, który opisujesz. Chyba najrozsądniej byłoby na serwerze, gdzie jest ten plik postawić php i korzystać z filemtime. Można też zrobić skrypt, który będzie z serwera pobierał ten plik i juz lokalnie sprawdzał przez filemtime(), oczywiście o ile nie poda daty jego zapisania na tym serwerze lokalnym.
goska_23
Beginner
Posty: 277
Rejestracja: 04 września 2007, 13:40
Lokalizacja: Katowice

Post autor: goska_23 »

Mam taki temat, że mam 2 strony www, każda na fizycznie innym serwerze z linuxem.
Obie strony korzystają z tych samych plików załączników, które umieszczone są w katalogu jednej ze stronek. Pliki dostępne są do pobrania na obu stronach www, ale fizycznie znajdują się w katalogu tylko jednej ze stronek (czyli są na tym jednym serwerze a na drugim prowadzą do nich tylko linki). W przypadku 2 plików, które często są modyfikowane chciałam pokazać na obu stronach (będących na 2 róznych serwerach) datę ich modyfikacji. Są to pliki .txt i .exe.
Na obu serwerach jest php. Na jednym serwerze ( tym co są fizycznie pliki .txt i .exe w katalogu strony) jest OK działa mi skrypt php (mam funkcję opartą o 'filemtime' php).
Mam problem z pokazaniem daty modyfikacji pliku .exe na tej stronce tego serwera co fizycznie tam tego pliku nie ma tylko jest link przez http.
Szukam w czym mogłabym zamieścić skrypt na tej drugiej stronie, żeby pokazywał datę modyfikacji pliku .exe wskazanego poprzez link do adresu http.
Zastanawiałam się czy tego skryptu javascript nie można jakoś zmodyfikować, coś innego zamiast iframe, żeby działało dla pliku .exe.
Poszukam jeszcze czegoś w google, chociaż nie jestem pewna jaki skrypt (w jakim języku) byłby odpowiedni.

Generalnie to chodzi o to, żeby plików załączników udostępnianych na stronkach nie kopiować na drugą stronę, żeby były dostępne tylko w jednym miejscu.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

W javascripcie tego nie zrobisz bo musisz się opierać o przeglądarkę, a nie załadujesz binarnego pliku tak aby potem za pomocą javascriptu i jego funkcji odczytać czas modyfikacji. Ja bym to zrobił w ten sposób, że odczytane lokalnie czasy modyfikacji przesłałbym plikiem na drugi serwer i tam je odczytywał (a skrypt puścić w cronie).
Albo za pomocą javascriptu na drugiej stronie (tej bez fizycznych plików) odczytałbym daty, które wyświetla ta pierwsza strona. Tak, tak chyba bym to zrobił :)
goska_23
Beginner
Posty: 277
Rejestracja: 04 września 2007, 13:40
Lokalizacja: Katowice

Post autor: goska_23 »

Acha. Dzięki za wskazówkę.
ODPOWIEDZ