Białe spacje w plikach PHP są czasami problematyczne, dlatego próbuję znaleźć pliki, które spełniają typowe, problematyczne kryteria. Próbuję znaleźć wszystkie pliki rekursywnie, które mają jeden lub oba te warunki:Znaleźć pliki PHP wstrzykujące białe spacje
1) Nie rozpoczyna się od znaku <
lub #
.
i/lub
2) nie kończy się w >
charakteru, chyba że ma końca w ścisłej nawias której następuje dowolnej ilości nowych linii.
myślę, że pierwszy warunek będzie: $[^<#]
myślę, że drugi warunek będzie: [ [^>^] | [}\n*^]]
jednak pamiętać, że w moich naiwnych regexes $
i ^
stanowią początek i koniec plik, a nie jakiejkolwiek linii w pliku. A nawet z tymi, zakładając, że są poprawne, jak mógłbym je połączyć? Podoba ci się?
[$[^<#]] | [[ [^>^] | [}\n*^]]]
Następnie, umieszczając je w grep:
grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] *
Oczywiście, to nie działa (tm). Czy ktoś może nauczyć mnie poprawiania błędów? Dzięki.
To dobry plik:
<?php
?>
Więc to:
<?php
function someFunc(){
}
I to jest dobre:
#!/usr/bin/php -q
<?php
?>
Główny HTML jest w porządku:
<html>
<?php
echo '</html>';
?>
Trailing HTML jest zbyt dobrze:
<?php
echo '<html>';
?>
</html>
To jest złe (prowadząca nowej linii):
<?php
?>
To jest złe zbyt (prowadzące spacja):
<?php
?>
Jest źle, jak cóż (trailing newline):
<?php
?>
Jednym z najprostszych sposobów na uniknięcie tego problemu jest NIE dołączanie zamykającego '?>' Na końcu plików. Jest to poprawne PHP i jest zawarte w wielu popularnych standardach kodowania PHP, w tym w standardzie kodowania PEAR. Kończenie plików przy pomocy '?>' Oznacza kłopot. –
Pomysł, który możesz wziąć pod uwagę: włącz buforowanie wyjściowe, plik 'include()' i sprawdź, czy dane wyjściowe generowane podczas dołączania zawierają wiodące/końcowe spacje. –
Dziękuję Frank. Jednak pliki kończące się na '?>' Są poprawnymi plikami PHP, nie powodują błędu i są bardzo powszechne. Nie będę dyskutować z innymi deweloperami na ten temat i zmienić ich stylu kodowania, po prostu chcę zautomatyzować proces znajdowania problematycznych plików dla mnie. – dotancohen