More Related Content
Similar to Migration Concepts For Enterprise PHP Applications
Similar to Migration Concepts For Enterprise PHP Applications (20)
More from Mayflower GmbH (20)
Migration Concepts For Enterprise PHP Applications
- 1. Migration concepts for enterprise PHP applications
International PHP Conference 2008 – Spring Edition
Thorsten Rinne
- 2. Introduction
❙ Thorsten Rinne
❙ 31 years old
❙ Graduated in computer science
❙ Project manager at Mayflower GmbH, Munich
❙ Reporting applications
❙ Critical bank applications
❙ PHP Consulting
❙ PHP software development since 1999
❙ Founder and main developer of Open Source FAQ-
management software phpMyFAQ since 2001
❙ Zend Certified Engineer (PHP 5)
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 2
- 3. Summary
❙ Introduction
❙ Why upgrade?
❙ Process model
❙ MySQL upgrade process
❙ PHP upgrade process
❙ Migration
❙ Conclusion
❙ Questions and answers
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 3
- 4. Introduction: Why upgrade?
❙ MySQL 4 support will end
❙ Active support already ended by the end of 2006
❙ Only extended support until 2008 for MySQL 4.0 and
2009 for MySQL 4.1
❙ MySQL 5 has more and advanced features like stored
procedures, trigger, better SQL support
❙ PHP 4 support will end
❙ PHP 4 is dead, dead, dead
❙ Only security relevant fixes until 2008-08-08
❙ PHP 5.2 is faster and more stable than every PHP 4
version
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 4
- 5. Introduction: Requirements
❙ No qualitative changes like new features
❙ No technical changes like
❙ new database layer
❙ new template engine
❙ Using new PHP 5 features
❙ No influences for productive services like
❙ External systems
❙ End user frontends
❙ Minimization of time and effort
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 5
- 6. Introduction: What is porting?
Innovation potential
❙ Reasons
❙ Most simple form of
migration
ive
sit
Rewrite
❙ Manageble risks
po
❙ Small complexity because of
the lack of qualitive and
Reengineering
technical changes
e
tiv
❙ Requirement
ga
ne
❙ Minor differences between
Porting
current and future
application platform
complexity
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 6
- 7. Process model
❙ Reducing of complexity with a planned procedure
❙ Coverage of the complete porting
❙ Methodical description of the process
❙ Tool support
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 7
- 8. Process model: Preparations
❙ Targets
❙ Porting without any technical or qualitative changes
❙ Recovery of support (MySQL/PHP)
❙ Minimizing the interferences of services and reduction
of change times
❙ Interferences
❙ Porting problems between MySQL and PHP versions
❙ Application complexity
❙ missing documentation and missing contact persons
❙ Communication between all team members
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 8
- 9. Process modell: Upgrading MySQL
❙ Upgrade in two steps
❙ MySQL 4.0 to MySQL 4.1
❙ MySQL 4.1 to MySQL 5.0
❙ Why two steps?
❙ Big changes between 4.0 and 4.1
❙ Password changes
❙ Character sets
❙ Collations
❙ Many minor BC breaks
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 9
- 10. Upgrade path for MySQL
❙ First dump your current database, if it‘s InnoDB. If you use
MyISAM, just backup everything.
❙ upgrade your development machine
❙ Reload your tables
❙ Test, test, test with MySQL 5.0
❙ Fix your queries and application if you have problems
❙ Use the STRICT MODE in MySQL 5.0
❙ Test, test, test with MySQL 5.0
❙ Upgrade your production machine
❙ Reload your production database
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 10
- 11. How to dump MySQL?
❙ Use the MySQL 4.1 mysqldump binary!
shell> mysqldump –uroot -p
–-database mydatabase
--single-transaction
--default-character-set=utf-8
--disable-keys
--extended-insert
| bzip2 –c > backup.sql.bz2
Warning: This can lock all tables!
❙ Fix the password column in the MySQL user table
shell> mysql_fix_privilege_tables
--password=root_password
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 11
- 12. MySQL Pitfalls
❙ Rebuild your TIMESTAMPs, check this also in your application
❙ TIMESTAMP now has the format
'YYYY-MM-DD HH:MM:SS'
❙ DECIMAL(14,2) in MySQL 4.0 is not the same as
DECIMAL(14,2) in MySQL 4.1/5.0
❙ using DECIMAL(10,5): 100000 will be 99999.99999
❙ using DECIMAL(11,5): 100000 will be 100000.00000
❙ New reserved words
❙ SQL2003 standard for your SQL queries with natural JOINs
and JOINs with USING may produce different results
❙ http://dev.mysql.com/doc/refman/5.0/en/upgrading-from-
4-1.html
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 12
- 13. After MySQL upgrade
❙ Release the current combination
❙ PHP 4 / MySQL 5
❙ Why?
❙ You never find all problems during your tests
❙ PHP porting may took longer than the MySQL porting
❙ Increase your experience with MySQL 5
❙ Prepare the PHP 5 update
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 13
- 14. Process model: Upgrading PHP
❙ Which PHP version?
❙ Latest PHP 5.2 release for production, if you build by
yourself or current PHP 5.2 package from your
Linux/Unix/*BSD/Solaris distribution
❙ Testing with PHP 5.3-dev if you have time and money
❙ Please don‘t use
❙ PHP 5.0.x
❙ PHP 5.1.x
❙ PHP 6.0.0-dev
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 14
- 15. Upgrade path for PHP
❙ upgrade your development machine to latest PHP 5.2
release
❙ Test, test, test
❙ Fix your code if you have problems
❙ register_globals = off
❙ error_reporting = E_ALL & E_STRICT
❙ display_errors = on
❙ log_errors = on
❙ Test, test, test
❙ Upgrade your production machine
❙ Release your ported application
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 15
- 16. Migrate configuration files
❙ httpd.conf
❙ change this line:
LoadModule php4_module php/sapi/php4apache2.dll
❙ with this one:
LoadModule php5_module /php/php5apache2.dll
❙ php.ini
❙ You should use the php.ini-recommended file, but check, if
you need magic quotes on…. Otherwise your application could
be insecure!
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 16
- 17. PHP 5 Pitfalls:
New reserved keyords
❙ abstract ❙ public
❙ catch ❙ throw
❙ clone ❙ try
❙ extends ❙ use
❙ final ❙ namespace
❙ implements
❙ instanceof
❙ interface
❙ goto
❙ private
❙ protected
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 17
- 18. PHP 5 Pitfalls
Constructor / Destructor
❙ PHP 4
❙ construct method has the name of the class
❙ No destruct method
❙ PHP 5
❙ construct method: __construct()
❙ If not available, fallback to PHP4 handling
❙ destruct method: __destruct()
❙ Executed at the end of the request
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 18
- 19. PHP 5 Pitfalls
Magic methods
❙ __autoload()
❙ __call(), __callStatic() (only PHP 5.3)
❙ __construct()
❙ __destruct()
❙ __get()
❙ __isset()
❙ __set()
❙ __set_state()
❙ __sleep()
❙ __toString()
❙ __unset()
❙ __wakeup() „Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 19
- 20. PHP 5 Pitfalls
❙ get_class(), get_parent_class() and
get_class_methods() now case-sensitive
❙ __CLASS__, __METHOD__, and __FUNCTION__ are also
case-sensitive
❙ Objects are referenced by handle, and not by value
❙ Objects aren’t primitive types like in PHP 4
❙ If you need a copy of a object, use __clone()
❙ Re-declaration of $this isn’t allowed anymore
❙ === operator is more strict than it was in PHP 4
❙ __call()/__set()/__get() are different in PHP 4
❙ Don’t use zend.ze1.compatibility_mode!
❙ Use instanceof instead of is_a() „Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 20
- 21. Migration strategies
❙ After the release of the PHP 5 ported application
REFACTORING!
❙ Strategies for
❙ „Spaghetti code“
❙ Half procedural – half object-orientated
❙ PHP 4 OOP
❙ Please don‘t try a complete rewrite
❙ Too expensive
❙ Takes too long
❙ Joel on software: „Things You Should Never Do “
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 21
- 22. Migration
„Spaghetti Code“
❙ Very old code, maybe developed in the last PHP 3 century
❙ No or just minor separation of code and layout
❙ No use of libraries like PEAR, Zend Framework or eZ
components
❙ No documentation
❙ No tests
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 22
- 23. Migration
„Spaghetti Code“: Strategy
❙ Identify recurring code parts and implement classes
❙ Use of standard libraries like Zend Framework, eZ
components or PEAR
❙ Add inline documentation
❙ Fix your coding styles
❙ Add unittests for the new, refactored backend
❙ Add Selenium tests for the frontend
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 23
- 24. Migration
„Half procedual – halb object-orientated“
❙ Code with differend quality
❙ Just a few documentation
❙ Maybe some tests
❙ „the typical current PHP 4 project“ ☺
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 24
- 25. Migration
„ Half procedual – halb object-orientated“: Strategy
❙ Add inline documentation for all classes and methods
❙ Improve the re-using of duplicate code
❙ Add unittests and Selenium tests
❙ Improve every code part with PHP 5 functions, for example
using file_put_contents() instead of fopen(),
fwrite(), and fclose().
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 25
- 26. Migration
PHP 4 OOP
❙ Application was developed object-orientated in PHP 4
❙ Using of
❙ PHP 4 references
❙ Re-declaration of $this
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 26
- 27. Migration
PHP 4 OOP: Strategy
❙ Maybe you‘re lucky and there are no problems. Maybe.
❙ If you see problems, they are fatal errors like
❙ Objects are referenced by value
❙ $foo =& new Foo();
❙ Solution:
❙ Implement unittests
❙ Use standard APIs
❙ Fix the PHP 5 problems
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 27
- 28. Conclusion
❙ Migration is always possible
❙ Migration can be hard, but usually it isn‘t! ☺
❙ Don‘t shoot yourself in the foot with the migration
❙ First upgrade MySQL
❙ Then upgrade PHP and fix your application
❙ Then do the cleanup for a better future ☺
❙ Stay current in the future and do always small steps
❙ Keep PHP 5.3 and PHP 5.4 in mind!
„Migration concepts for enterprise
PHP applications“
© MAYFLOWER GmbH 2008 28
- 30. Thank you very much!
Thorsten Rinne, Dipl.-Inf. (FH)
Mayflower GmbH
Mannhardtstraße 6
D-80538 München
Germany
+49 (89) 24 20 54 – 31
thorsten.rinne@mayflower.de