Sostituire in massa gli “short tags” di PHP

Trasferendo un sito in PHP da un server all’altro potrebbe capitarvi una problematica che oggi non ho saputo individuare all’istante.  L’errore che avevo sul nuovo server infatti era il generico:

Parse error: syntax error, unexpected end of file in the line...

Dato che dal giorno del trasferimento a quello della segnalazione era già passata una settimana, ho pensato ad una modifica maldestra dei file. Invece googlando l’errore già citato assieme al nome del plugin WordPress coinvolto ho trovato un commento illuminante che mi ha portato alla soluzione: la direttiva short_open_tag di PHP disabilitata. Un bel giorno infatti qualcuno decise che a scrivere

<?php

si perdeva troppo tempo, e che

<?

era sufficiente. Tuttavia questa forma “breve” poteva creare confusione con i documenti XML, che iniziano in questo modo:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

Ecco perché tutte le versioni più recenti di PHP hanno questa famigerata direttiva disabilitata. Ed ecco perché io ho resistito dalla facile tentazione di abilitarla optando invece per una sostituzione multipla che risolve il problema una volta per sempre. Posizionandomi sulla root del sito ho dato questi comandi in successione (sicuramente ottimizzabili)

find . -type f -name "*.php" -print0 | xargs -0 perl -pi.bak -e 's/&lt;\? /&lt;?php /g'
find . -type f -name "*.php" -print0 | xargs -0 perl -pi.bak -e 's/&lt;\?= /&lt;?php echo /g'
find . -type f -name "*.php" -print0 | xargs -0 perl -pi.bak -e 's/&lt;\?\n/&lt;?php\n/g'
find . -type f -name "*.php" -print0 | xargs -0 perl -pi.bak -e 's/&lt;\?\r\n/&lt;?php\r\n/g'

Questi comandi creano anche dei file di backup, che al termine delle operazioni possono essere eliminati così:

find -name "*.php.bak" -delete
Tags:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

%d blogger hanno fatto clic su Mi Piace per questo: