Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odnajdywanie kodu podanego w treści pliku XML i inne problemiki z XML
Forum PHP.pl > Forum > XML, AJAX > XML
Meares
Witam. Od dłuższego już czasu piszę prosty/mocarny silnik gier bMMO (OpenSource), w którym chciałbym zaimplementować system modyfikacji podobny do tego znanego z SimpleMachinesForum. Postaram się krótko opisać jak on miałby mniej-więcej działać.

Wszystko zaczyna się od paczki zip, która wrzucona na serwer (poprzez skrypt, nie FTP) miałaby zostać rozpakowana, ale nie "fizycznie". Chodzi mi o to by paczka była w "pamięci podręcznej" (choć nie wiem czy to jest wykonalne w przypadku skryptów php) (do podręcznej gdyż może nie przejść testów zgodności - banalny do wykonania (jestem tego prawie pewien)). Po rozpakowaniu plików do pamięci skryptu skrypt sprawdzający czy modyfikacja jest zgodna z wersją skryptu miałby otworzyć plik package.xml, który miałby w środku taką treść:
  1. <?xml version="1.0" ?>
  2. <package>
  3. <name>Nazwa modyfikacji</name>
  4. <author>Autor modyfikacji</author>
  5. <version>Wersja modyfikacji</version>
  6. <relase-date>Data udostępnienia modyfikacji</relase-date>
  7.  
  8. <install for="1.0 - 1.2, 1.4 - 1.99">
  9. <unpack-file name="plik1.php" dir="directory" />
  10. <modify-file name="plik2.php" dir="diirectory2">
  11. <find>
  12. KOD DO ZNALEZIENIA W PLIKU "plik2.php" ZNAJDUJACEGO SIE W KATALOGU "directory2"
  13. </find>
  14. <replace>
  15. KOD, KTORY MIALBY ZASTAPIC KOD PODANY WYZEJ
  16. </replace>
  17. </modify-file>
  18. <do file="plik3.php" />
  19. </install>
  20. </package>
Skrypt sprawdzający czy dana modyfikacja pasuje do aktualnej wersji silnika zwyczajnie miałby porównać czy wersja silnika znajduje się na liście wersji podanej w tagu <install>. Kolejne wersje miały by być wymieniane po przecinkach, a myślnik oznaczałby przedział (w wypadku wyżej podanego kodu modyfikacja miała by pasować do wersji: od 1.0 do 1.2, oraz od 1.4 do 1.99). To jeszcze nic w porównaniu z tym co miało by się dziać dalej: skrypt instalacyjny (wcześniej była mowa o sprawdzeniu wersji przy uploadzie paczki) miałby wypakować plik, którego nazwa została podana w <unpack-file name="X"> do katalogu oznaczonego w <unpack-file dir="Y">, modyfikować pliki na zasadzie znajdź i zamień, oraz mieć możliwość wykonania skryptu zawartego w oddzielnym pliku PHP, do którego ścieżka była by podana w <do file="X">.

Mam nadzieję, że zbytnio ne namotałem i wiecie o co chodzi. biggrin.gif Pomocy potrzebuję, gdyż kompletnie nie mam pojęcia jak wykonać te modyfikacje, rozpakowania oraz wykonanie pliku zewnętrznego. Nie oczekuję, że napiszecie to za mnie - chodzi mi o jakieś konkretne przykłady czego i jak użyć.

PS. Czytałem artykuł dotyczący XMLa na wortalu ("XML - morze możliwości - XPath, XPointer, XInclude"), jednak nie porusza on zbytnio tematu, który potrzebuję.
erix
Skoro znalazłeś ten mechanizm w SMF, to nie prościej go przeanalizować?

Możesz poszukać jeszcze czegoś w stylu diffa. A jeśli chodzi o interpretację XML - praca domowa.

A gotowce, to nie ten dział.
Meares
Cytat(Meares @ 4.02.2010, 14:57:32 ) *
Nie oczekuję, że napiszecie to za mnie - chodzi mi o jakieś konkretne przykłady czego i jak użyć.

Nie chcę gotowca tylko jakiegoś sensownego przykładu. Mechanizm w SMF znalazłem, lecz (jak większość modułów w SMF) jest ostro namieszane.
erix
Ale nadal nie widzę pytania - czego nie rozumiesz?
Meares
Choćby tego jak wyszukać w pliku tekstowym kilku linijek kodu, który jest podany w pliku xml.
skowron-line
Jeżeli chcesz czegoś wyszukać w xml u to xpath.
Meares
Nie w XMLu. Chcę znaleźć kod PHP, podany w treści pliku XML, w pliku PHP. (Patrz przykładowy schemat w pierwszym poście.)
erix
A nie możesz po prostu wczytać pliku PHP (do stringa) i poszukać danego kodu przez strpos? Nie przyglądałem się managerowi dodatków w SMF, ale na 99% jest to tak realizowane.
Meares
O tym nie pomyślałem. Dziękuję.

Dobra, z resztą sobie jednak poradzę. Jak dla mnie temat nadaje się już do zamknięcia.
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.