Как заставить сценарий PHP удалить себя (и включает dir) [дубликат]

Всегда существует ГОЛОВА, что точки к в настоящее время проверяли ответвление по удаленному repo (который может или не может быть ведущим устройством). Даже удаленные репозитории имеют текущие ответвления. Обычно это - ведущее устройство, и первое, что пришло на ум я не могу думать ни о какой причине, почему можно было бы хотеть изменить его, но это может быть изменено.

7
задан Phil 1 August 2009 в 22:23
поделиться

4 ответа

Попробуйте отменить связь . Пользователю веб-сервера потребуются права на запись для каталога / сценария.

4
ответ дан 6 December 2019 в 08:45
поделиться

Боковое примечание к другим ответам:

Я бы рекомендовал переименовать файл или поместить оператор выхода в начало файл, удаление - ИМХО не лучший вариант. Пользователь может захотеть прочитать ваш сценарий установки или повторно запустить его. Возможно, это могло бы быть лучшим решением:

$contents = file_get_contents(__FILE__);
file_put_contents(__FILE__,
    "<?php # Remove this line and the next line to re-configure the application
    die('The application has already been configured.'); ?>\n" . $contents
);

Вы также можете переименовать его во что-то, что веб-сервер не будет передавать клиентам, или, что еще лучше, переместите его куда-нибудь, к чему у веб-сервера нет доступа, или даже и то, и другое:

rename(__FILE__, '/tmp/' . basename(__FILE__) . '.bak');

Не забудьте упомяните место, куда был перемещен сценарий установки в сценарии установки, хотя ...

Об удалении каталогов: Это делается с помощью rmdir () , однако каталог должен быть пустым. Перемещение папок такое же, как и с файлами, функция называется rename () .

Это делается с помощью rmdir () , однако каталог должен быть пустым. Перемещение папок такое же, как и с файлами, функция называется rename () .

Это делается с помощью rmdir () , однако каталог должен быть пустым. Перемещение папок такое же, как и с файлами, функция называется rename () .

4
ответ дан 6 December 2019 в 08:45
поделиться

unlink ($ _ SERVER ['SCRIPT_FILENAME']);
или
unlink (__ FILE__ );

1
ответ дан 6 December 2019 в 08:45
поделиться

Вы можете использовать unlink , чтобы удалить файл, и __ FILE __ , чтобы получить полный путь к текущему файлу:

unlink(__FILE__);

В качестве «доказательства»:

squale@shark:~/developpement/tests/temp
$ ll | grep 'remove-myself.php'
-rw-r--r-- 1 squale   squale      25 2009-08-01 17:01 remove-myself.php

=> Файл существует

squale@shark:~/developpement/tests/temp
$ cat remove-myself.php
<?php

unlink(__FILE__);

=> Он содержит код, который я дал

squale@shark:~/developpement/tests/temp
$ php ./remove-myself.php

=> Я запускаю скрипт

squale@shark:~/developpement/tests/temp
$ ll | grep 'remove-myself.php'

=> Он больше не существует


Чтобы это сработало, вы должны быть уверены, что вы иметь необходимые привилегии ... это означает, что пользователь, пытающийся удалить файл, должен иметь права доступа к каталогу, содержащему его.

Когда вы находитесь в командной строке, это обычно нормально; но если вы пытаетесь сделать это через Apache, вам нужно будет предоставить Apache доступ для записи в этот каталог / файл - Apache обычно не имеет таких привилегий по умолчанию (небезопасно и обычно не требуется )


Не уверен, что это будет возможно в Windows ... Это работает в Linux, но Windows может «заблокировать» файл при его запуске ...

12
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: