У меня есть большой видеофайл, который транслируется с использованием потокового сервера вне моего контроля, и иногда я хочу удалить видеофайл. Когда файл просматривается кем-то, использующим потоковый сервер, возникает ошибка PHP с «Отказано в доступе».
Я хотел бы проверить перед попыткой удаления, может ли файл быть удален или нет. Я не хочу на самом деле пытаться удалить файл и посмотреть, если это не удается, я хотел бы проверить заранее.
Это мой код:
$file = "video.flv";
$file2 = "newvideoname.flv";
clearstatcache();
if (is_writeable($file)) {
echo "is writeable";
}
else {
echo "is NOT writeable";
}
echo "\n";
$fh = fopen($file, 'a+');
if (!flock($fh, LOCK_EX | LOCK_NB)) {
// file locked, do something else
echo "is locked";
}
else {
echo "not locked!";
}
fclose($fh);
echo "\n";
if (touch($file)) {
echo "modification time has been changed to present time";
}
else {
echo "Sorry, could not change modification time";
}
echo "\n";
rename($file, $file2);
Вывод, который я получаю при потоковой передаче video.flv при выполнении кода:
is writeable
not locked!
modification time has been changed to present time
PHP Warning: rename(video.flv,newvideoname.flv): Permission denied in ...
Иногда я получаю:
is writeable
PHP Warning: fopen(video.flv): failed to open stream: Permission denied ...
PHP Warning: flock() expects parameter 1 to be resource, boolean given
is locked
PHP Warning: fclose(): supplied argument is not a valid stream resource
PHP Warning: touch(): Utime failed: Permission denied
Sorry, could not change modification time
PHP Warning: rename(video.flv,newvideoname.flv): Permission denied ...
Таким образом, иногда файл не может быть заблокирован PHP, и он не может быть touch () редактирован PHP, и тогда, конечно, переименование не работает, но иногда PHP говорит, что «все хорошо» до команды переименования. В команде переименования никогда не работает случайным образом.
Что мне делать с файлом?