Самоперезаписываемый PHP скрипт
Запущенный на выполнение PHP скрипт может перезаписать себя. Следущий пример показывает вариант реализации такого поведения скрипта.
<?php
$rhyme = [
'One, two, Freddy\'s coming for you!',
'Three, four, better lock your door!',
'Five, six, grab your crucifix!',
'Seven, eight, better stay up late!',
'Nine, ten, never sleep again!'
];
define('I', 0);
echo $rhyme[I] . PHP_EOL;
$i = I + 1;
if ($i == count($rhyme)) {
$i = 0;
}
$contents = file_get_contents(__FILE__);
$contents = str_replace("define('I', " . I . ");", "define('I', $i);", $contents);
$fp = fopen(__FILE__, 'w');
fwrite($fp, $contents);
fclose($fp);
Сохраните код в файл rhyme.php и запускайте в консоли php rhyme.php.
После каждого запуска в консоль будет выводиться новая строка считалочки, а в коде файла скрипта будет обновляться значение, присваемое постоянной I
.
Идея поделиться кодом возникла при обсуждении с читателем вопроса о новых функциях GetSimple CMS, просто как демонстрация того, что это возможно. Если использование самоперезаписываемых скриптов может решить практическую задачу и при этом учтены аспекты безопасности, то не вижу причин, почему этим не воспользоваться.