php shell命令中的rm -f安全吗?

时间:2018-08-28 09:16:37

标签: php shell rm

此处没有用户输入,但我仍然要检查这是否安全:

<?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 :(得分:2)

rm -f /tmp/my-cache/3600/*是安全的,如果/tmp/my-cache/3600/为空,则不会删除任何内容。

rm /tmp/my-cache/3600/*(无-f)的唯一区别是您不会收到此警告:

  

没有这样的文件或目录

...但是这并不意味着某些内容已被删除。根据{{​​3}},这是通过-f选项发生的:

  

如果该文件不存在,请不要显示诊断消息或修改退出状态以反映错误。

...因此rm的行为就像它删除了某些内容,即使它没有删除。


find也很安全!

您应该使用以下cd命令,而不是先检查目录是否存在,然后find进入目录,然后运行find

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

...因为它已经为您完成了检查:

  

找到:/ tmp / my-cache / 3600:没有这样的文件或目录