[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ^M und <? tags in PHP korrigieren
[Thread Prev] | [Thread Next]
- Subject: Re: ^M und <? tags in PHP korrigieren
- From: "Raphael H. Becker" <Raphael.Becker@xxxxxx>
- Date: Thu, 15 Sep 2005 22:32:02 +0200
- To: uugrn@xxxxxxxxxxxxxxx
On Thu, Sep 15, 2005 at 09:11:22PM +0200, Fabian Koch wrote: > Da kannst du ne Menge scripts ergoogeln mit 'crlf to lf script' oder sowas. tr -d '\r' loescht alle ^M alias \r Beispiel: <file.php > tmp0815.php tr -d '\r' && mv tmp0815.php file.php > Das <? mit <?PHP ersetzen (muss das ueberhaupt?) wuerde ich mit sed machen. > > zB 'sed s/<?/<?PHP' Boese! aus <?PHP wird damit ein <?PHPPHP und spaeter ein <?PHPPHPPHP... und irgendwann ... > also ungefaehr: > > #!/bin/sh > > for i in *; > do foo=$(cat $i | sed s/<?/<?PHP); > cat foo > $i; > done; Aeh, was soll das tun? BTW: Nutzlose Benutzung von Katzen (google: "useless use of cat award") Also vorausgesetzt, das regexp fuer sed funktioniert wie gewuenscht, dann ggf sowas: find /var/www -name "*.ht*" -o -name "*.php" | sed -e "s,^,',; s,$,',;" | xargs clear_php.sh (BTW: der sed-aufruf sorgt dafuer, dass alle Dateinamen in '' geschrieben werden, damit xargs nicht ungluecklich wird, wenn eine Datei ein Leerzeichen ethaelt. Man koennte es auch so machen: find ... -print0 | xargs -0 command Das funktioniert aber nicht auf allen Unices. ) (BTW2: find ... -exec command {} \;" geht zwar, ist aber boese, zB weil command fuer jede einzelne Datei ausgefuehrt wird. xargs hingegen buendelt die Zeilen aus stdin und erzeugt dann wenige aufrufe mit vielen Parametern also zB file1 file2 ... file1000 file1001 ... file2000 ... wird zu: command file1 file2 file3 file4 ... file1000 command file1001 file1002.... file 2000 ... ) Und clear_php.sh dann sinngemaess sowas: http://rabe.uugrn.org/scripts/clear_php.sh #! /bin/sh # ----------------------------------------------- # 2005-09-15 Raphael Becker <rabe@xxxxxxxxx> # # PHP-Code saeubern # if [ $# -gt 0 ]; then # es gibt mehr als 0 Parameter # Temporaere Dateien PID=$$ TMPDIR="/tmp/$(basename $0).$PID/" mkdir "$TMPDIR" || { echo "$0: Fehler: Kann kein temporaeres Verzeichnis $TMPDIR anlegen" >&2 ; exit ; } while [ -n "$1" ]; do # Alle Dateien (file1 file2 ... file1000 ...) aus der Parameterliste durchlaufen (siehe shift!) if [ -f "$1" ]; then # $1 ist eine Datei if [ -w "$1" ]; then # Schreibrechte auf $1 vorhanden TMPFILE="$TMPDIR/$(basename $1)" # zB xyz/foo.php --> /tmp/clear_php.sh.47110815/foo.php if touch "$TMPFILE"; then # Koennen die tmp-Datei erzeugen if { tr -d '\r' < "$1" | sed -e 's,<? ,<?PHP ,g' > "$TMPFILE"; }; then # Erfolgreich in tempdatei konvertiert if mv "$TMPFILE" "$1"; then # success!! echo "$1 konvertiert" else # Das sollte theoretisch nicht vorkommen, da vorher alles # geprueft wurde (Schreibrechte) echo "$0: Fehler: Datei $1 konnte nach dem Konvertieren nicht zurueckgeschrieben werden" >&2 fi else # irgendwas im tr|sed filter ist schiefgelaufen echo "$0: Fehler beim Konvertieren von $1" >&2 fi else # Das sollte ansich immer funktionieren echo "$0: Fehler: Kann keine temporaere Datei erzeugen: $TMPFILE" >&2 fi else # Schreibrechte der Quelldatei nicht vorhanden, keine Kovertierung # erzwingen echo "$0: Fehler: $1 ist nicht schreibbar" >&2 fi else # zB Verzeichnisse, Sockets, Devices, ... echo "$0: Fehler: keine Datei: $1" >&2 fi # Parameterliste shiften, $2->$1, $3->$2 ... $n->$n-1, $n="" shift done # /tmp Aufraeumen. # Gefaehrlich, FIXME rm -Rf "$TMPDIR" else echo "Aufruf: $0 file1 [file2 [fileN [...]]]" >&2 exit 1 fi # ----------------------------------------------- Ziemlich viel Script um ein einfaches tr | sed herum. Aber im Zweifel lohnt es sich, diesen Aufwand zu treiben. recode arbeitet uebrigens nach einer recht aehnlichen Struktur. > Das sollte tun. Da kannste dann noch das mit dem CRLF mit reinwerfen Ich verwende dafuer lieber "tr -d '\r'". Es geht auch, wenn man sed -e 's,^M,,g' sagt, aber vielen ist beim Abtippen nicht klar, dass man ein literales ^M an dieser Stelle eingeben muss (in vi mit Strg+V, Strg+M), d.h. ein copypaste des scripts oben wuerde nicht funktionieren. Es gibt noch ein paar kleinere Schwachstellen, die dieses Script leider fuer eine Anmeldung zum Nobelpreis verhindern. Wer sie findet, darf sie behalten oder hier nennen. Es gibt einige. Obiges Script kann natuerlich fuer nahezu beliebige Konvertierungsaufgaben mit temporaerer Datei verwendet werden, es ist letztlich nur ein wrapper um tr|sed herum in diesem Fall. Theoretisch kann man damit auch Grafiken konvertieren oder andere Aufgaben erledigen, bei denen eine angebene Datei (oder viele Dateien!) modifiziert werden soll. MfG -- Raphael Becker http://rabe.uugrn.org/ http://schnitzelmitkartoffelsalat.und.rahmspin.at/ .........|.........|.........|.........|.........|.........|.........|..