此处没有用户输入,但我仍然要检查这是否安全:
<?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
调用是安全的,我只想检查是否存在我不知道会导致问题的恶化情况?
答案 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:没有这样的文件或目录