Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] informacja o otwartym pliku
Forum PHP.pl > Forum > Przedszkole
felixk
Witam, kończąc tworzyć swój edytor plików chciałem dać informację użytkownikom o tym, że próbują otworzyć już otwarty plik. Niestety jak to z reguły ja coś sknociłem i niestety nie działa. Poniżej kod, którym próbuję to zrealizować.

  1. <?php
  2. $tab1 = array('<p>', '</p>');
  3. $tab2 = array("", "");
  4. if (empty($_GET['strona']))
  5. {echo'powitanie i zaproszenie do korzystania';}
  6. else
  7. {
  8. echo'<form method="post"><textarea name="content" cols="90" rows="10">';
  9. $a = file_get_contents("".$dir.$_GET['strona'].".".$typ_pliku."");
  10. $c = strlen($a);
  11. if ($c == "0")
  12. {
  13. echo '<script language="javascript">alert("BَD! Plik prawdopodobnie otwarty lub wyst?pił bł?d zapisu przy poprzedniej próbie edycji. \n Wgraj ponownie plik na serwer i spróbuj jeszcze raz")
  14. document.location.href = "edytor.php";</script>';}
  15. else
  16. {
  17. echo $a;
  18. echo '</textarea><br />';
  19. echo '<input class="submit" type="submit" value="Zapisz" /><input type="button" onclick="window.location.reload()" value="Pokaż zapisane zmiany" />';
  20. $editor_data = stripslashes($_POST['content']);
  21. $editor_data = str_replace($tab1, $tab2, $editor_data);
  22. $editor_data = html_entity_decode($editor_data);
  23. $b = file_put_contents("".$dir.$_GET['strona'].".".$typ_pliku."", $editor_data);
  24. echo'</form>';
  25. }
  26. }
  27. ?>


Z góry dziękuję za wszelkie uwagi i sugestie i pomoc w rozwiązaniu problemu.
nospor
Czemu uważasz, ze jeżeli file_get_contents nic nie zwróci, to znaczy to że plik jest otwarty?
felixk
Cytat(nospor @ 4.10.2012, 07:22:27 ) *
Czemu uważasz, ze jeżeli file_get_contents nic nie zwróci, to znaczy to że plik jest otwarty?


Nospor, ja nic nie uważam po prostu szukam sposobu jak takie otwarcie sprawdzić. Może masz jakiś pomysł?
nospor
Napisałeś kod jaki napisałeś, wiec się zastanawiałem skad ci taki pomysł przyszedł do głowy.... Bo w programowaniu strzelać byle strzelać naprawdę nie przynosi żadnych rezultatów...

Jak chcesz blokować plik do odczytu, zapisu to musisz zakładać na niego locka
http://www.php.net/manual/pl/function.flock.php
Crozin
Zdefiniuj może najpierw co rozumiesz przez "plik jest otwarty", bo po kodzie widać, że na pewno nie chodzi o jego otwarcie przez system operacyjny.
felixk
Cytat(Crozin @ 4.10.2012, 20:43:31 ) *
Zdefiniuj może najpierw co rozumiesz przez "plik jest otwarty", bo po kodzie widać, że na pewno nie chodzi o jego otwarcie przez system operacyjny.


Plik otwarty, czyli plik, które jest aktualnie wczytany przez file_get_contents

@nospor
Szukałem przez google czegoś co mi pomoże i natrafiłem na strlen, ale najpewniej nie umiem go użyć, bo nie działa

Poza tym mam ogólny problem z kilkoma konstrukcja if{} else{}. Nie umiem dopasowywać else do ifów i wychodzą cuda
nospor
file_get_contents trwa ułamek sekundy i naprawdę cięzko ci sie bedzie wstrzelić jak ktoś innny to będzie robił akurat wtedy gdy ty....

Już ci napisałem: załóż locka
felixk
Cytat(nospor @ 4.10.2012, 20:48:38 ) *
file_get_contents trwa ułamek sekundy i naprawdę cięzko ci sie bedzie wstrzelić jak ktoś innny to będzie robił akurat wtedy gdy ty....

Już ci napisałem: załóż locka


  1. <?php
  2. $tab1 = array('<p>', '</p>');
  3. $tab2 = array("", "");
  4. if (empty($_GET['strona']))
  5. {
  6. echo'';
  7. }
  8. else
  9. {
  10. echo'<form method="post"><textarea name="content" cols="90" rows="10">';
  11. $a = file_get_contents("".$dir.$_GET['strona'].".".$typ_pliku."");
  12. flock($a); //108
  13. if (!flock($a, LOCK_EX)) //109
  14. {
  15. echo '<script language="javascript">alert("BَD! Plik prawdopodobnie otwarty lub wystąpił błąd zapisu przy poprzedniej próbie edycji. \n Wgraj ponownie plik na serwer i spróbuj jeszcze raz")
  16. document.location.href = "edytor.php";</script>';
  17. }
  18. else
  19. {
  20. echo $a;
  21. echo '</textarea><br />';
  22. echo '<input class="submit" type="submit" value="Zapisz" /><input type="button" onclick="window.location.reload()" value="Pokaż zapisane zmiany" />';
  23. $editor_data = stripslashes($_POST['content']);
  24. $editor_data = str_replace($tab1, $tab2, $editor_data);
  25. $editor_data = html_entity_decode($editor_data);
  26. $b = file_put_contents("".$dir.$_GET['strona'].".".$typ_pliku."", $editor_data);
  27. echo'</form>';
  28. }
  29. }
  30. ?>


Kod
Warning: flock() expects at least 2 parameters, 1 given in C:\xampp\htdocs\edytor.php on line 108

Warning: flock() expects parameter 1 to be resource, string given in C:\xampp\htdocs\edytor.php on line 109


Poza tym ostrzeżenie powinno być przed otwarcie a błąd pokazuje się wewnątrz edytora
nospor
Przecież komunikat błędu wyraźnie ci mówi co masz źle.... czytać nie umiesz?
felixk
Cytat(nospor @ 4.10.2012, 21:12:09 ) *
Przecież komunikat błędu wyraźnie ci mówi co masz źle.... czytać nie umiesz?


Umiem, ale jak mam dać drugi parametr skoro lokalizację pliku zawiera się w 1?
nospor
Cytat
Poza tym ostrzeżenie powinno być przed otwarcie a błąd pokazuje się wewnątrz edytora
Najpierw otwierasz textarea, potem walisz błąd, potem zamykasz textarea a na koniec się dziwisz że blad ci się wyświetla w edytorze.... no naprawdę dziwne...

Cytat
Umiem, ale jak mam dać drugi parametr skoro lokalizację pliku zawiera się w 1?
Zajrzyj do manuala. Tam masz opisane na przykładach jak używać flock i jakie parametry tam przekazywać. Zacznij wkońcu czytać....

Przenosze na przedszkole i zakładaj sam przez najbliższy czas tam właśnie swoje wątki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.