When a plugin is loaded, its md5 is calculated and compared with an md5 from the server. If the values dont match, a new version of the plugin is downloaded from the server and written over the old plugin.
My problem has arisen because now I need to do this same procedure for the core itself. So basically i run my script ("php.exe core.php"), and then the script has to open itself (fopen('core.php')) and overwrite itself with a newer version of the script!
Coming from a C++ background, these seems totally illogical, but its the task i have been given...
So, to test whether this is even possible, I wrote the following test program:
<?php define( 'MESSAGE_1', 'i like the rice' ); define( 'MESSAGE_2', 'the rice is nice' ); define( "MESSAGE", MESSAGE_2 ); echo MESSAGE."\n"; $self = "./self_update.php"; $contents = @file_get_contents( $self ); $string_1 = "define( \"MESSAGE\", MESSAGE_1 );"; $string_2 = "define( \"MESSAGE\", MESSAGE_2 );"; if( strpos( $contents, $string_1 ) !== false ) $contents = str_replace( $string_1, $string_2, $contents ); else $contents = str_replace( $string_2, $string_1, $contents ); $fp = @fopen( $self, 'w' ); fwrite( $fp, $contents ); fclose( $fp ); ?>
I have only been able to test this on Windows. On WinXP it works, each time you run the script it outputs a different message, because it has overwritten itself with a new script.
Does anyone know if this will also work on Linux/Unix? Or will the file be locked?
If anyone can try out my test script on their system and tell me if it works, that would be great!