2014-11-05 4 views
2

Я пытаюсь написать сценарий обновления для одного из наших веб-сайтов. В настоящее время скрипт будет разархивировать файлы, указанные на ссылке обновления, и разархивировать в каталог.PHP Переименовать файл

Моя проблема, если есть новая версия сама по себе, т.е. upgrader-new.php мне нужен скрипт для запуска до завершения, а затем удалить себя, то есть upgrader-new.php быть переименован в upgrader.php.

Единственное решение, которое я могу думать о том, чтобы создать третий файл т.е. upgrade-assist.php, который будет запускать перед обновлением, чтобы проверить, если upgrader-new.php существует, и если это произойдет, удалить оригинал и переименуйте новый в нужное имя. Я вижу проблемы, потому что исходный скрипт все равно должен был бы звонить upgrader-assist.php, и насколько я знаю, вы не можете удалить запущенный скрипт?

Любые предложения?

Спасибо!

+0

Рассмотрите более надежную систему. Переносы базы данных Laravel - это отдельные файлы с датами в именах файлов, поэтому система знает, к какому приказу их применять. Позволяет быть версиями и очевидными. – ceejayoz

ответ

4

Насколько я знаю, вы не можете удалить запущенный скрипт?

Вы можете, попробуйте это один:

<?php unlink(__FILE__); 

Это прекрасно, если нет других процессов, использующих этот файл (и, конечно, процесс работает достаточно разрешения, чтобы сделать это).

Файл не обрабатывается и не выполняется по строкам, но загружается в память, поэтому вы можете свободно переименовывать или удалять его, и он будет работать до конца (или фатальной ошибки).

+0

Нет, вы не можете ... – baao

+0

Я ценю ответ! Любые предложения по переименованию нового скрипта после оригинала были удалены? – acupajoe

+1

да, вы можете! http://stackoverflow.com/questions/5242469/php-self-delete-file-is-it-possible Вам просто нужно запустить новый PHP-скрипт (переименованный) и изящно выйти из старого. –

Смежные вопросы