Script de migration d'un vieux code Zend Framework

ViPHP
ViPHP | 3300 Messages

25 août 2009, 07:03

Cette nuit je me suis trouvé à devoir passer un code basé sur Zend Framework < 1.0 vers la version 1.9.1, c'était assez facile comparativement à ce que j'ai pu voir sur d'autres frameworks (pear pour ne pas le citer) un seul soucis majeur, il a fallu renomer toutes les actions des controllers en lower case pour qu'elle marchent à nouveau, et comme je suis un gros fainéant j'ai préféré me faire un petit script de migration (donc de transformation de code php en php) que je vous soumet, si ça peut servir à quelqu'un tant mieux :)

Il nécessite php-cli et readline, je l'ai utilisé avec mon php 5.3 mais je ne vois pas pourquoi un php 5 quelconque aurait un soucis à l'exécuter.

#! /usr/bin/php -q
<?php
error_reporting(E_ALL | E_STRICT);
$curdir = dirname(__FILE__);

//it will scan the files in /application/controllers/ so please check that is the directoy you want to look into
$files = glob($curdir . '/application/controllers/*.php');

for($i=0; $i<count($files); $i++) {
        $error_state = false;
        $text = '';
        $content = file_get_contents($files[$i]);
        $lines = explode("\n", $content);
        $patterns = array();
        $replaces = array();
        foreach($lines as $numl=>$l) {
                //This is the magic line, it will match for any occurence of something containing asciis with upper case letters and finishing with Action
                //it will also ignore the class definition since in my case it was containing the word Action
                if(!preg_match('`^class`', $l) && preg_match('`([a-z]+[A-Z].*)Action`', $l, $reg)) {
                        $error_state = true;
                        $text .= str_replace($curdir, '', $files[$i]) . ' contains an uppercase function here: '. $reg[1].'Action (line '.($numl+1).').' . "\n";
                        if(!in_array('`'.$reg[1].'Action`', $patterns)) {
                                array_push($patterns, '`'.$reg[1].'Action`');
                                array_push($replaces, strtolower($reg[1]) . 'Action');
                        }
                }
        }
        if($error_state) {
                echo $text;
                $input = strtolower(substr(readline('Fix? YES/no: '), 0, 1));
                if($input == 'y' || $input == '') {
                        file_put_contents($files[$i], preg_replace($patterns, $replaces, $content));
                        echo 'Fixing...' . "\n";
                        $i--;
                } else {
                        die('GoodBye!' . "\n");
                }
        }
}
die('This is clean :)' . "\n");

Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 4674 Messages

26 août 2009, 11:54

Hey :-),

Pourquoi -q à /usr/bin/php ? Ni moi, ni php -h, ne connaissons cette option.
Au passage, je te conseille plutôt : #!/usr/bin/env php, tu auras plus de chance d'être multi-plateforme.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 3300 Messages

26 août 2009, 14:55

Hey :-),

Pourquoi -q à /usr/bin/php ? Ni moi, ni php -h, ne connaissons cette option.
Au passage, je te conseille plutôt : #!/usr/bin/env php, tu auras plus de chance d'être multi-plateforme.
right
php -q existait avant mais je confirme que ca a pas l'air de servir à quoi que ce soit de nos jours.

pour le /usr/bin/env je suis franchement circonspect sachant que env n'est jamais au meme endroit d'un systeme a l'autre alors que php est quasi tous le temps dans /usr/bin ou à la limite /usr/local/bin. bon sinon, tu peux nous expliquer pourquoi tu viens cherhcer la petite bête sur ce post tu utilises zend framework toi peut etre? :)
Fait du php depuis que ca existe ou presque :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 août 2009, 15:09

bon sinon, tu peux nous expliquer pourquoi tu viens cherhcer la petite bête sur ce post tu utilises zend framework toi peut etre? :)
Attention, ce point n'est pas à développer, sinon ménage.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer