Безопасна ли команда rm -f в команде php? - PullRequest
0 голосов
/ 28 августа 2018

Здесь нет ввода пользователя, но я все еще хочу убедиться, что это безопасно:

<?php system('rm /tmp/my-cache/3600/* -f');

Есть ли какие-либо обстоятельства, которые могут привести к удалению файлов из другого каталога? Например, что произойдет, если этот каталог по какой-то причине не существует?

Я думаю, что это безопасно, но я был укушен подобным (но совершенно другим) фрагментом кода ранее, в задании cron, которое выполняется каждую минуту:

cd /tmp/my-cache/3600
find . -maxdepth 1 -mmin +61 -type f -delete

При некоторых обстоятельствах эта папка не существовала, что означало, что find удалил все файлы в домашнем каталоге вместо этого!

(Исправление заключалось в том, чтобы обернуть его внутри блока if [ -d "/tmp/my-cache/3600" ]; then / fi)

Как я уже сказал, я думаю, что вызов php system безопасен, я просто хочу проверить, нет ли смягчающего обстоятельства, о котором я не знаю, что может вызвать проблемы?

1 Ответ

0 голосов
/ 28 августа 2018

rm -f /tmp/my-cache/3600/* безопасно, если /tmp/my-cache/3600/ пусто, ничего не будет удалено.

Единственная разница с rm /tmp/my-cache/3600/* (нет -f) состоит в том, что вы не получите это предупреждение:

Нет такого файла или каталога

... но это не значит, что что-то было удалено. Согласно справочной странице rm , это происходит с опцией -f:

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

... поэтому rm ведет себя так, как будто он что-то удалил, даже если это не так.


find тоже безопасно!

Вместо того, чтобы проверять, существует ли каталог, затем cd в него и затем запустить find, вы должны использовать следующую команду find:

find /tmp/my-cache/3600 -maxdepth 1 -mmin +61 -type f -delete

... потому что он уже делает проверку за вас:

find: / tmp / my-cache / 3600: такого файла или каталога нет

...