Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sprawdzanie poprawności składniowej kodu PHP
hawk
post
Post #1





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Chciałbym sobie - z poziomu skryptu php - wczytać z dysku jakiś inny skrypt i sprawdzić, czy jest on poprawny składniowo. Potem można by wysłać do usera info: "tak, plik jest OK" lub "nie, jest błąd w linii tej a tej".

Problemy są dwa:

1) Chcę tylko sparsować plik, a nie wykonywać. Temu akurat można zaradzić wstawiając przed kodem do sprawdzenia return, coś w stylu:
[php:1:dcb9e2b8c6]<?php eval(' return; ' . file_get_contents('foo.php')); ?>[/php:1:dcb9e2b8c6]
Wtedy jedyne błędy to będą błędy parsowania lub błędy kompilatora, czyli te o które chodzi.

2) Tutaj jest pies pogrzebany: można sobie zrobić set_error_handler i przechwytywać błędy, ale błedy parsowania zawsze są brutalnie wywalane na wyjście i kończą skrypt. Kompletnie olewają mój piękny error handler (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) .

Tak więc, czy ktoś zna sposób na sprawdzenie poprawności pliku (lub stringa, na jedno wychodzi) bez jego wykonywania i bez wywalania całego skryptu w przypadku błędu? Przecież php robi to bez przerwy, php.exe chyba ma taki switch, analizator lexykalny jest dostępny (tokenizer), a tu nie można sparsować głupiego kawałka kodu (IMG:http://forum.php.pl/style_emoticons/default/angrysmiley.gif) .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


@Bakus:
Myślałem o tym (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale:
- nie potrafię ustalić w skrypcie gdzie znajduje się php.exe
- coś u siebie namieszałem w php bo php.exe nie znajduje bibliotek i w ogóle nie rusza
Ale ogólnie to powinno działać. Co do zabezpieczenia systemu: podobno php.exe ma switcha który powoduje że skrypt jest tylko parsowany, nie wykonywany.

@jabol:
Piękna funkcja. Niestety, to moje musi chodzić na PHP4, ale to kolejny powód, by lubić PHP5 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .

A generalnie to poradziłem sobie tak:
Jest skrypt, który przyjmuje dowolny kod php w POST, i zapisuje do tymczasowego pliku taki string:
Kod
"<?php echo 'No syntax errors found'; die(); ?>" . $_POST['code']

a potem wykonuje ten plik. Skutek prosty:
- nie ma błędów: wypluwamy info i kończymy bez wykonywania nieznanego kodu
- są błędy: parser php sam wypluwa info i kończy skrypt

A w głównym skrypcie po prostu otwieram socketa, wysyłam żądanie HTTP POST i odczytuję odpowiedź serwera... Styknie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:27