dimayakovlev.ru


Самоперезаписываемый 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, просто как демонстрация того, что это возможно. Если использование самоперезаписываемых скриптов может решить практическую задачу и при этом учтены аспекты безопасности, то не вижу причин, почему этим не воспользоваться.