#!/bin/bash
### Diese Zeile muss angepasst werden!
#phpcli='/usr/bin/php74/bin/php-cli';
phpcli='/usr/bin/php';
## automatische Ermittlung(nicht empfohlen)
# phpcli=$(readlink -f "$(which php)");
###
##################
# Dieses Skript versucht Dateien umzuwandeln,
# bei denen in PHP7.4 folgende Fehlermeldung erscheint:
# "Deprecated: Array and string offset access syntax with curly braces is deprecated in php"
## Run with: ###
## find -name '*.php' -exec /PFAD/ZU/php73to74.sh "{}" 2> php73to74.log \;;
#################
file="$1";
dir=$(dirname "$1");
if [ ! -f "${phpcli}" ] || [ ! -x "${phpcli}" ]; then
echo "phpcli ('${phpcli}') ist falsch. Exit!" 1>&2;
exit 1;
fi
if [ -z "${file}" ]; then
echo "Keine Datei angegeben. Exit!" 1>&2;
exit 2;
elif [ -f "${file}]" ]; then
echo "'${file}' ist keine Datei. Exit!" 1>&2;
exit 4;
elif [ ! -r "${file}" ]; then
echo "'${file}' ist nicht lesbar. Exit!" 1>&2;
exit 8;
elif [ ! -w "${file}" ]; then
echo "Keine Schreibrechte an '${file}'. Exit!" 1>&2;
exit 16;
elif [ ! -w "${dir}" ]; then
echo "Keine Schreibrechte am Verzeichnis '${dir}'. Exit!" 1>&2;
exit 16;
fi
echo "-------------------------------------------------" 1>&2;
echo "Für Syntaxprüfung benutztes PHP:" 1>&2;
echo " Pfad: ${phpcli}" 1>&2;
echo -n "Version: " 1>&2;
${phpcli} -v | head -n1 1>&2;
echo "" 1>&2;
err=$(${phpcli} -l "${file}" 2>&1);
if [ 0 -ne $? ]; then
echo "-------------------------------------------------" 1>&2;
echo "Misserfolg: Die Umwandlung von '${file}' wurde verweigert." 1>&2;
echo "-------------------------------------------------" 1>&2;
echo "Grund: '${file}' enthält folgenden Fehler:" 1>&2;
echo "${err}" 1>&2 ;
echo "-------------------------------------------------" 1>&2;
exit 32;
fi
tmpfile1=$(mktemp);
tmpfile2=$(mktemp);
backupfile="${file}-$(date +%Y%m%d_%H%M)";
sed -E -e 's/\$([a-zA-Z0-9_]+)\{([^\}]*)\}/\$\1[\2]/g' "${file}" > "${tmpfile1}";
${phpcli} -l "${tmpfile1}" 1>/dev/null 2>/dev/null;
if [ 0 -eq $? ]; then
t=$(diff "${tmpfile1}" "${file}" | wc -l);
if [ 0 -ne $t ]; then
cp "${file}" "${backupfile}";
cp "${tmpfile1}" "${file}";
echo "-------------------------------------------------" 1>&2;
echo "Erfolg: '${file}' wurde umgewandelt. Backup in '${backupfile}'." 1>&2;
echo "-------------------------------------------------" 1>&2;
echo "diff:" 1>&2;
echo "-------------------------------------------------" 1>&2;
diff "${backupfile}" "${file}" 1>&2;
echo "-------------------------------------------------" 1>&2;
rm -f "${tmpfile1}" "${tmpfile2}";
exit 0;
else
echo "Neutral: '${file}' Nichts zu tun." 1>&2;
rm -f "${tmpfile1}" "${tmpfile2}";
exit 0;
fi
else
sed -E -e 's/\$([a-zA-Z0-9_]+)\{([^\}]*)\}/\$\1[\2]/g' "${tmpfile1}" > "${tmpfile2}";
${phpcli} -l "${tmpfile2}" 1>/dev/null 2>/dev/null;
if [ 0 -eq $? ]; then
t=$(diff "${tmpfile2}" "${file}" | wc -l);
if [ 0 -ne $t ]; then
cp "${file}" "${backupfile}";
cp "${tmpfile2}" "${file}";
echo "-------------------------------------------------" 1>&2;
echo "Erfolg: '${file}' wurde umgewandelt. Backup in '${backupfile}'." 1>&2;
echo "-------------------------------------------------" 1>&2;
echo "diff:"
echo "-------------------------------------------------" 1>&2;
diff "${backupfile}" "${file}" 1>&2;
echo "-------------------------------------------------" 1>&2;
rm -f "${tmpfile1}" "${tmpfile2}";
exit 0;
else
echo "Merkwürdig: '${file}' Nichts umgewandelt'." 1>&2;
rm -f "${tmpfile1}" "${tmpfile2}";
exit 0;
fi
fi
fi
echo "-------------------------------------------------" 1>&2;
echo "Misserfolg: '${file}' konnte nicht erfolgreich umgewandelt werden." 1>&2;
echo "-------------------------------------------------" 1>&2;
echo "Grund:";
err=$(${phpcli} -l "${tmpfile1}" 1>&2);
if [ 0 -ne $? ]; then
echo "Erster Umwandlungsversuch führte zu folgendem Fehler:" 1>&2;
echo "${err}" 1>&2;
echo "-------------------------------------------------" 1>&2;
fi
err=$(${phpcli} -l "${tmpfile2}" 1>&2);
if [ 0 -ne $? ]; then
echo "'Zweiter Umwandlungsversuch führte zu folgendem Fehler:" 1>&2;
echo "${err}" 1>&2;
echo "-------------------------------------------------" 1>&2;
fi
rm -f "${tmpfile1}" "${tmpfile2}";
exit 64;